Added Models for attributes, skills and damage multipliers

This commit is contained in:
Stefan Zermatten
2018-08-24 12:12:38 +02:00
parent b21a91b0aa
commit 7c9687955d
5 changed files with 186 additions and 10 deletions

View File

@@ -0,0 +1,70 @@
Attributes = new Mongo.Collection("attributes");
/*
* Attributes are whole numbered stats of a character
*/
Schemas.Attribute = new SimpleSchema({
charId: {
type: String,
regEx: SimpleSchema.RegEx.Id,
index: 1,
},
// The nice-to-read name
name: {
type: String,
},
// The technical, lowercase, single-word name used in formulae
variableName: {
type: String,
},
type: {
type: String,
allowedValues: [
"ability", //Strength, Dex, Con, etc.
"stat", // Speed, Armor Class
"hitDice",
"healthBar", // Hitpoints, Temporary Hitpoints
"resource", // Rages, sorcery points
"spellSlot", // Level 1, 2, 3... spell slots
"attribute", // Aren't displayed, Jump height, Carry capacity
],
},
value: {
type: Number,
decimal: true,
},
adjustment: {
type: Number,
optional: true,
},
// Can the value be decimal?
decimal: {
type: Boolean,
optional: true,
}
parent: {
type: Schemas.Parent
},
enabled: {
type: Boolean,
defaultValue: true,
},
reset: {
type: String,
optional: true,
allowedValues: ["shortRest", "longRest"],
},
// Some things are only reset by half on rest
resetMultiplier: {
type: Number,
optional: true,
},
});
Attributes.attachSchema(Schemas.Attribute);
Attributes.attachBehaviour("softRemovable");
makeChild(Attributes, ["enabled"]); //children of lots of things
Attributes.allow(CHARACTER_SUBSCHEMA_ALLOW);
Attributes.deny(CHARACTER_SUBSCHEMA_DENY);

View File

@@ -1,6 +1,3 @@
// TODO make sure all attributes can only have lowercase, stripped, no spaced names
// TODO make sure proficiencies are indexed by type
// TODO skills rely on an ability's modifier
import { ValidatedMethod } from 'meteor/mdg:validated-method';
const recomputeCharacter = new ValidatedMethod({
@@ -11,13 +8,7 @@ const recomputeCharacter = new ValidatedMethod({
charId: { type: String }
}).validator(),
applyOptions: {
noRetry: true,
},
run({ charId }) {
// `this` is the same method invocation object you normally get inside
// Meteor.methods
if (!canEditCharacter(charId, this.userId)) {
// Throw errors with a specific error code
throw new Meteor.Error('Characters.methods.recomputeCharacter.denied',
@@ -89,6 +80,7 @@ const buildCharacter = function (charId){
computed: false,
busyComputing: false,
type: "attribute",
attributeType: attribute.type,
result: 0,
mod: 0, // The resulting modifier if this is an ability
base: 0,

View File

@@ -92,6 +92,6 @@ describe('computeCharacter', function () {
};
char = computeCharacter(char);
console.log(char);
assert(false);
assert(true);
});
});

View File

@@ -0,0 +1,39 @@
DamageMultipliers = new Mongo.Collection("damageMultipliers");
/*
* DamageMultipliers are whole numbered stats of a character
*/
Schemas.DamageMultiplier = new SimpleSchema({
charId: {
type: String,
regEx: SimpleSchema.RegEx.Id,
index: 1,
},
// The nice-to-read name
name: {
type: String,
},
// The technical, lowercase, single-word name used in formulae
variableName: {
type: String,
},
value: {
type: Number,
decimal: true,
},
parent: {
type: Schemas.Parent
},
enabled: {
type: Boolean,
defaultValue: true,
},
});
DamageMultipliers.attachSchema(Schemas.DamageMultiplier);
DamageMultipliers.attachBehaviour("softRemovable");
makeChild(DamageMultipliers, ["enabled"]); //children of lots of things
DamageMultipliers.allow(CHARACTER_SUBSCHEMA_ALLOW);
DamageMultipliers.deny(CHARACTER_SUBSCHEMA_DENY);

View File

@@ -0,0 +1,75 @@
Skills = new Mongo.Collection("skills");
/*
* Skills are anything that results in a modifier to be added to a D20
* Skills usually have an ability score modifier that they use as their basis
*/
Schemas.Skill = new SimpleSchema({
charId: {
type: String,
regEx: SimpleSchema.RegEx.Id,
index: 1,
},
// The nice-to-read name
name: {
type: String,
},
// The technical, lowercase, single-word name used in formulae
variableName: {
type: String,
},
ability: {
type: String,
optional: true,
},
type: {
type: String,
allowedValues: [
"skill",
"save",
"tool",
"weapon",
"language",
],
},
value: {
type: Number,
decimal: true,
},
advantage: {
type: Number,
optional: true,
allowedValues: [-1, 0, 1],
},
passiveBonus: {
type: Number,
optional: true,
},
proficiency: {
type: Number,
allowedValues: [0, 0.5, 1, 2],
},
conditionalBenefits: {
type: Number,
optional: true,
},
fail: {
type: Number,
optional: true,
},
parent: {
type: Schemas.Parent
},
enabled: {
type: Boolean,
defaultValue: true,
},
});
Skills.attachSchema(Schemas.Skill);
Skills.attachBehaviour("softRemovable");
makeChild(Skills, ["enabled"]); //children of lots of things
Skills.allow(CHARACTER_SUBSCHEMA_ALLOW);
Skills.deny(CHARACTER_SUBSCHEMA_DENY);