Skip to content

Commit 4856d89

Browse files
authored
Merge pull request #51 from Shourn/document-data-models
Document data models
2 parents 157ffad + caa0728 commit 4856d89

34 files changed

+941
-571
lines changed

module/documents/actors/character/character-data-model.mjs

Lines changed: 74 additions & 137 deletions
Original file line numberDiff line numberDiff line change
@@ -1,173 +1,110 @@
11
import {CharacterMigrations} from './character-migrations.mjs';
2+
import {AffinitiesDataModel} from '../common/affinities-data-model.mjs';
3+
import {AttributesDataModel} from '../common/attributes-data-model.mjs';
4+
import {BonusesDataModel} from '../common/bonuses-data-model.mjs';
5+
import {BondDataModel} from '../common/bond-data-model.mjs';
26

7+
/**
8+
* @property {number} level.value
9+
* @property {number} resources.hp.min
10+
* @property {number} resources.hp.max
11+
* @property {number} resources.hp.value
12+
* @property {number} resources.hp.bonus
13+
* @property {number} resources.mp.min
14+
* @property {number} resources.mp.max
15+
* @property {number} resources.mp.value
16+
* @property {number} resources.mp.bonus
17+
* @property {string} resources.rp1.name
18+
* @property {number} resources.rp1.value
19+
* @property {string} resources.rp2.name
20+
* @property {number} resources.rp2.value
21+
* @property {string} resources.rp2.name
22+
* @property {number} resources.rp2.value
23+
* @property {number} resources.zenit.value
24+
* @property {number} resources.ip.min
25+
* @property {number} resources.ip.max
26+
* @property {number} resources.ip.value
27+
* @property {number} resources.ip.bonus
28+
* @property {Object} resources.fp
29+
* @property {number} resources.fp.value
30+
* @property {BondDataModel[]} resources.bonds
31+
* @property {number} resources.exp.value
32+
* @property {string} resources.identity.value
33+
* @property {string} resources.pronous.value
34+
* @property {string} resources.theme.value
35+
* @property {string} resources.origin.value
36+
* @property {AffinitiesDataModel} affinities
37+
* @property {AttributesDataModel} attributes
38+
* @property {number} derived.init.value
39+
* @property {number} derived.init.bonus
40+
* @property {number} derived.def.value
41+
* @property {number} derived.def.bonus
42+
* @property {number} derived.mdef.value
43+
* @property {number} derived.mdef.bonus
44+
* @property {BonusesDataModel} bonuses
45+
*/
346
export class CharacterDataModel extends foundry.abstract.TypeDataModel {
447
static defineSchema() {
5-
const { SchemaField, NumberField, StringField, ArrayField } = foundry.data.fields;
48+
const { SchemaField, NumberField, StringField, ArrayField, EmbeddedDataField } = foundry.data.fields;
649
return {
7-
level: new SchemaField({ value: new NumberField({ min: 5, max: 60, initial: 5, integer: true }) }),
50+
level: new SchemaField({ value: new NumberField({ initial: 5, min: 5, max: 60, integer: true, nullable: false }) }),
851
resources: new SchemaField({
952
hp: new SchemaField({
10-
min: new NumberField({ min: 0, initial: 0, integer: true }),
11-
max: new NumberField({ min: 0, initial: 10, integer: true }),
12-
value: new NumberField({ min: 0, initial: 10, integer: true }),
13-
bonus: new NumberField({ min: 0, initial: 0, integer: true }),
53+
min: new NumberField({ initial: 0, min: 0, integer: true, nullable: false }),
54+
max: new NumberField({ initial: 10, min: 0, integer: true, nullable: false }),
55+
value: new NumberField({ initial: 10, min: 0, integer: true, nullable: false }),
56+
bonus: new NumberField({ initial: 0, min: 0, integer: true, nullable: false }),
1457
}),
1558
mp: new SchemaField({
16-
min: new NumberField({ min: 0, initial: 0, integer: true }),
17-
max: new NumberField({ min: 0, initial: 10, integer: true }),
18-
value: new NumberField({ min: 0, initial: 10, integer: true }),
19-
bonus: new NumberField({ min: 0, initial: 0, integer: true }),
59+
min: new NumberField({ initial: 0, min: 0, integer: true, nullable: false }),
60+
max: new NumberField({ initial: 10, min: 0, integer: true, nullable: false }),
61+
value: new NumberField({ initial: 10, min: 0, integer: true, nullable: false }),
62+
bonus: new NumberField({ initial: 0, min: 0, integer: true, nullable: false }),
2063
}),
2164
rp1: new SchemaField({
2265
name: new StringField({ initial: '' }),
23-
value: new NumberField({ min: 0, initial: 0, integer: true }),
66+
value: new NumberField({ initial: 0, min: 0, integer: true, nullable: false }),
2467
}),
2568
rp2: new SchemaField({
2669
name: new StringField({ initial: '' }),
27-
value: new NumberField({ min: 0, initial: 0, integer: true }),
70+
value: new NumberField({ initial: 0, min: 0, integer: true, nullable: false }),
2871
}),
2972
rp3: new SchemaField({
3073
name: new StringField({ initial: '' }),
31-
value: new NumberField({ min: 0, initial: 0, integer: true }),
74+
value: new NumberField({ initial: 0, min: 0, integer: true, nullable: false }),
3275
}),
33-
zenit: new SchemaField({ value: new NumberField({ min: 0, initial: 0, integer: true }) }),
76+
zenit: new SchemaField({ value: new NumberField({ initial: 0, min: 0, integer: true, nullable: false }) }),
3477
ip: new SchemaField({
35-
min: new NumberField({ min: 0, initial: 0, integer: true }),
36-
max: new NumberField({ min: 0, initial: 6, integer: true }),
37-
value: new NumberField({ min: 0, initial: 6, integer: true }),
38-
bonus: new NumberField({ min: 0, initial: 0, integer: true }),
39-
}),
40-
fp: new SchemaField({ value: new NumberField({ min: 0, initial: 3, integer: true }) }),
41-
bonds: new ArrayField(
42-
new SchemaField({
43-
name: new StringField({ initial: '' }),
44-
admInf: new StringField({ initial: '', blank: true, choices: ['Admiration', 'Inferiority'] }),
45-
loyMis: new StringField({ initial: '', blank: true, choices: ['Loyalty', 'Mistrust'] }),
46-
affHat: new StringField({ initial: '', blank: true, choices: ['Affection', 'Hatred'] }),
47-
strength: new NumberField({ min: 0, max: 4, initial: 0 }),
48-
}),
49-
),
50-
exp: new SchemaField({ value: new NumberField({ min: 0, integer: true }) }),
78+
min: new NumberField({ initial: 0, min: 0, integer: true, nullable: false }),
79+
max: new NumberField({ initial: 6, min: 0, integer: true, nullable: false }),
80+
value: new NumberField({ initial: 6, min: 0, integer: true, nullable: false }),
81+
bonus: new NumberField({ initial: 0, min: 0, integer: true, nullable: false }),
82+
}),
83+
fp: new SchemaField({ value: new NumberField({ initial: 3, min: 0, integer: true, nullable: false }) }),
84+
bonds: new ArrayField(new EmbeddedDataField(BondDataModel, {})),
85+
exp: new SchemaField({ value: new NumberField({ initial: 0, min: 0, integer: true, nullable: false }) }),
5186
identity: new SchemaField({ name: new StringField() }),
5287
pronouns: new SchemaField({ name: new StringField() }),
5388
theme: new SchemaField({ name: new StringField() }),
5489
origin: new SchemaField({ name: new StringField() }),
5590
}),
56-
affinities: new SchemaField({
57-
phys: new SchemaField({
58-
base: new NumberField({ min: -1, max: 4, initial: 0, integer: true }),
59-
current: new NumberField({ min: -1, max: 4, initial: 0, integer: true }),
60-
bonus: new NumberField({ min: -5, max: 5, initial: 0, integer: true }),
61-
}),
62-
air: new SchemaField({
63-
base: new NumberField({ min: -1, max: 4, initial: 0, integer: true }),
64-
current: new NumberField({ min: -1, max: 4, initial: 0, integer: true }),
65-
bonus: new NumberField({ min: -5, max: 5, initial: 0, integer: true }),
66-
}),
67-
bolt: new SchemaField({
68-
base: new NumberField({ min: -1, max: 4, initial: 0, integer: true }),
69-
current: new NumberField({ min: -1, max: 4, initial: 0, integer: true }),
70-
bonus: new NumberField({ min: -5, max: 5, initial: 0, integer: true }),
71-
}),
72-
dark: new SchemaField({
73-
base: new NumberField({ min: -1, max: 4, initial: 0, integer: true }),
74-
current: new NumberField({ min: -1, max: 4, initial: 0, integer: true }),
75-
bonus: new NumberField({ min: -5, max: 5, initial: 0, integer: true }),
76-
}),
77-
earth: new SchemaField({
78-
base: new NumberField({ min: -1, max: 4, initial: 0, integer: true }),
79-
current: new NumberField({ min: -1, max: 4, initial: 0, integer: true }),
80-
bonus: new NumberField({ min: -5, max: 5, initial: 0, integer: true }),
81-
}),
82-
fire: new SchemaField({
83-
base: new NumberField({ min: -1, max: 4, initial: 0, integer: true }),
84-
current: new NumberField({ min: -1, max: 4, initial: 0, integer: true }),
85-
bonus: new NumberField({ min: -5, max: 5, initial: 0, integer: true }),
86-
}),
87-
ice: new SchemaField({
88-
base: new NumberField({ min: -1, max: 4, initial: 0, integer: true }),
89-
current: new NumberField({ min: -1, max: 4, initial: 0, integer: true }),
90-
bonus: new NumberField({ min: -5, max: 5, initial: 0, integer: true }),
91-
}),
92-
light: new SchemaField({
93-
base: new NumberField({ min: -1, max: 4, initial: 0, integer: true }),
94-
current: new NumberField({ min: -1, max: 4, initial: 0, integer: true }),
95-
bonus: new NumberField({ min: -5, max: 5, initial: 0, integer: true }),
96-
}),
97-
poison: new SchemaField({
98-
base: new NumberField({ min: -1, max: 4, initial: 0, integer: true }),
99-
current: new NumberField({ min: -1, max: 4, initial: 0, integer: true }),
100-
bonus: new NumberField({ min: -5, max: 5, initial: 0, integer: true }),
101-
}),
102-
}),
103-
attributes: new SchemaField({
104-
dex: new SchemaField({
105-
base: new NumberField({ min: 6, max: 12, initial: 8, integer: true, validate: (value) => value % 2 === 0 }),
106-
current: new NumberField({ min: 6, max: 12, initial: 8, integer: true, validate: (value) => value % 2 === 0 }),
107-
bonus: new NumberField({ min: -6, max: 6, initial: 0, integer: true, validate: (value) => value % 2 === 0 }),
108-
}),
109-
ins: new SchemaField({
110-
base: new NumberField({ min: 6, max: 12, initial: 8, integer: true, validate: (value) => value % 2 === 0 }),
111-
current: new NumberField({ min: 6, max: 12, initial: 8, integer: true, validate: (value) => value % 2 === 0 }),
112-
bonus: new NumberField({ min: -6, max: 6, initial: 0, integer: true, validate: (value) => value % 2 === 0 }),
113-
}),
114-
mig: new SchemaField({
115-
base: new NumberField({ min: 6, max: 12, initial: 8, integer: true, validate: (value) => value % 2 === 0 }),
116-
current: new NumberField({ min: 6, max: 12, initial: 8, integer: true, validate: (value) => value % 2 === 0 }),
117-
bonus: new NumberField({ min: -6, max: 6, initial: 0, integer: true, validate: (value) => value % 2 === 0 }),
118-
}),
119-
wlp: new SchemaField({
120-
base: new NumberField({ min: 6, max: 12, initial: 8, integer: true, validate: (value) => value % 2 === 0 }),
121-
current: new NumberField({ min: 6, max: 12, initial: 8, integer: true, validate: (value) => value % 2 === 0 }),
122-
bonus: new NumberField({ min: -6, max: 6, initial: 0, integer: true, validate: (value) => value % 2 === 0 }),
123-
}),
124-
}),
91+
affinities: new EmbeddedDataField(AffinitiesDataModel, {}),
92+
attributes: new EmbeddedDataField(AttributesDataModel, {}),
12593
derived: new SchemaField({
12694
init: new SchemaField({
127-
value: new NumberField({ min: 0, initial: 0, integer: true }),
128-
bonus: new NumberField({ initial: 0, integer: true }),
95+
value: new NumberField({ initial: 0, min: 0, integer: true, nullable: false }),
96+
bonus: new NumberField({ initial: 0, integer: true, nullable: false }),
12997
}),
13098
def: new SchemaField({
131-
value: new NumberField({ min: 0, initial: 0, integer: true }),
132-
bonus: new NumberField({ initial: 0, integer: true }),
99+
value: new NumberField({ initial: 0, min: 0, integer: true, nullable: false }),
100+
bonus: new NumberField({ initial: 0, integer: true, nullable: false }),
133101
}),
134102
mdef: new SchemaField({
135-
value: new NumberField({ min: 0, initial: 0, integer: true }),
136-
bonus: new NumberField({ initial: 0, integer: true }),
137-
}),
138-
}),
139-
bonuses: new SchemaField({
140-
accuracy: new SchemaField({
141-
accuracyCheck: new NumberField({ initial: 0, integer: true }),
142-
magicCheck: new NumberField({ initial: 0, integer: true }),
143-
opposedCheck: new NumberField({ initial: 0, integer: true }),
144-
openCheck: new NumberField({ initial: 0, integer: true }),
145-
arcane: new NumberField({ initial: 0, integer: true }),
146-
bow: new NumberField({ initial: 0, integer: true }),
147-
brawling: new NumberField({ initial: 0, integer: true }),
148-
dagger: new NumberField({ initial: 0, integer: true }),
149-
firearm: new NumberField({ initial: 0, integer: true }),
150-
flail: new NumberField({ initial: 0, integer: true }),
151-
heavy: new NumberField({ initial: 0, integer: true }),
152-
spear: new NumberField({ initial: 0, integer: true }),
153-
sword: new NumberField({ initial: 0, integer: true }),
154-
thrown: new NumberField({ initial: 0, integer: true }),
155-
}),
156-
damage: new SchemaField({
157-
physical: new NumberField({ initial: 0, integer: true }),
158-
magic: new NumberField({ initial: 0, integer: true }),
159-
arcane: new NumberField({ initial: 0, integer: true }),
160-
bow: new NumberField({ initial: 0, integer: true }),
161-
brawling: new NumberField({ initial: 0, integer: true }),
162-
dagger: new NumberField({ initial: 0, integer: true }),
163-
firearm: new NumberField({ initial: 0, integer: true }),
164-
flail: new NumberField({ initial: 0, integer: true }),
165-
heavy: new NumberField({ initial: 0, integer: true }),
166-
spear: new NumberField({ initial: 0, integer: true }),
167-
sword: new NumberField({ initial: 0, integer: true }),
168-
thrown: new NumberField({ initial: 0, integer: true }),
103+
value: new NumberField({ initial: 0, min: 0, integer: true, nullable: false }),
104+
bonus: new NumberField({ initial: 0, integer: true, nullable: false }),
169105
}),
170106
}),
107+
bonuses: new EmbeddedDataField(BonusesDataModel, {}),
171108
};
172109
}
173110

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
/**
2+
* @property {number} accuracyCheck
3+
* @property {number} magicCheck
4+
* @property {number} opposedCheck
5+
* @property {number} openCheck
6+
* @property {number} arcane
7+
* @property {number} bow
8+
* @property {number} brawling
9+
* @property {number} dagger
10+
* @property {number} firearm
11+
* @property {number} flail
12+
* @property {number} heavy
13+
* @property {number} spear
14+
* @property {number} sword
15+
* @property {number} thrown
16+
*/
17+
export class AccuracyBonusesDataModel extends foundry.abstract.DataModel {
18+
static defineSchema() {
19+
const { NumberField } = foundry.data.fields;
20+
return {
21+
accuracyCheck: new NumberField({ initial: 0, integer: true, nullable: false }),
22+
magicCheck: new NumberField({ initial: 0, integer: true, nullable: false }),
23+
opposedCheck: new NumberField({ initial: 0, integer: true, nullable: false }),
24+
openCheck: new NumberField({ initial: 0, integer: true, nullable: false }),
25+
arcane: new NumberField({ initial: 0, integer: true, nullable: false }),
26+
bow: new NumberField({ initial: 0, integer: true, nullable: false }),
27+
brawling: new NumberField({ initial: 0, integer: true, nullable: false }),
28+
dagger: new NumberField({ initial: 0, integer: true, nullable: false }),
29+
firearm: new NumberField({ initial: 0, integer: true, nullable: false }),
30+
flail: new NumberField({ initial: 0, integer: true, nullable: false }),
31+
heavy: new NumberField({ initial: 0, integer: true, nullable: false }),
32+
spear: new NumberField({ initial: 0, integer: true, nullable: false }),
33+
sword: new NumberField({ initial: 0, integer: true, nullable: false }),
34+
thrown: new NumberField({ initial: 0, integer: true, nullable: false }),
35+
};
36+
}
37+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
import {AffinityDataModel} from './affinity-data-model.mjs';
2+
3+
/**
4+
* @property {AffinityDataModel} phys
5+
* @property {AffinityDataModel} air
6+
* @property {AffinityDataModel} bolt
7+
* @property {AffinityDataModel} dark
8+
* @property {AffinityDataModel} earth
9+
* @property {AffinityDataModel} fire
10+
* @property {AffinityDataModel} ice
11+
* @property {AffinityDataModel} light
12+
* @property {AffinityDataModel} poison
13+
*/
14+
export class AffinitiesDataModel extends foundry.abstract.DataModel {
15+
static defineSchema() {
16+
const { EmbeddedDataField } = foundry.data.fields;
17+
return {
18+
phys: new EmbeddedDataField(AffinityDataModel, {}),
19+
air: new EmbeddedDataField(AffinityDataModel, {}),
20+
bolt: new EmbeddedDataField(AffinityDataModel, {}),
21+
dark: new EmbeddedDataField(AffinityDataModel, {}),
22+
earth: new EmbeddedDataField(AffinityDataModel, {}),
23+
fire: new EmbeddedDataField(AffinityDataModel, {}),
24+
ice: new EmbeddedDataField(AffinityDataModel, {}),
25+
light: new EmbeddedDataField(AffinityDataModel, {}),
26+
poison: new EmbeddedDataField(AffinityDataModel, {}),
27+
};
28+
}
29+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
/**
2+
* @property {number} base
3+
* @property {number} current
4+
* @property {number} bonus
5+
*/
6+
export class AffinityDataModel extends foundry.abstract.DataModel {
7+
static defineSchema() {
8+
const { NumberField } = foundry.data.fields;
9+
return {
10+
base: new NumberField({ initial: 0, min: -1, max: 4, integer: true, nullable: false }),
11+
current: new NumberField({ initial: 0, min: -1, max: 4, integer: true, nullable: false }),
12+
bonus: new NumberField({ initial: 0, min: -5, max: 5, integer: true, nullable: false }),
13+
};
14+
}
15+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
/**
2+
* @param {number} number
3+
* @return {boolean}
4+
*/
5+
function isEven(number) {
6+
return number % 2 === 0;
7+
}
8+
9+
/**
10+
* @property {number} base
11+
* @property {number} current
12+
* @property {number} bonus
13+
*/
14+
export class AttributeDataModel extends foundry.abstract.DataModel {
15+
static defineSchema() {
16+
const { NumberField } = foundry.data.fields;
17+
return {
18+
base: new NumberField({ initial: 8, min: 6, max: 12, integer: true, nullable: false, validate: isEven }),
19+
current: new NumberField({ initial: 8, min: 6, max: 12, integer: true, nullable: false, validate: isEven }),
20+
bonus: new NumberField({ initial: 0, min: -6, max: 6, integer: true, nullable: false, validate: isEven }),
21+
};
22+
}
23+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import {AttributeDataModel} from './attribute-data-model.mjs';
2+
3+
/**
4+
* @property {AttributeDataModel} dex
5+
* @property {AttributeDataModel} ins
6+
* @property {AttributeDataModel} mig
7+
* @property {AttributeDataModel} wlp
8+
*/
9+
export class AttributesDataModel extends foundry.abstract.DataModel {
10+
static defineSchema() {
11+
const { EmbeddedDataField } = foundry.data.fields;
12+
return {
13+
dex: new EmbeddedDataField(AttributeDataModel, {}),
14+
ins: new EmbeddedDataField(AttributeDataModel, {}),
15+
mig: new EmbeddedDataField(AttributeDataModel, {}),
16+
wlp: new EmbeddedDataField(AttributeDataModel, {}),
17+
};
18+
}
19+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
/**
2+
* @property {string} name
3+
* @property {"Admiration", "Inferiority"} admInf
4+
* @property {"Loyalty", "Mistrust"} loyMis
5+
* @property {"Affection", "Hatred"} affHat
6+
* @property {number} strength
7+
*/
8+
export class BondDataModel extends foundry.abstract.DataModel {
9+
static defineSchema() {
10+
const { StringField, NumberField } = foundry.data.fields;
11+
return {
12+
name: new StringField({ initial: '' }),
13+
admInf: new StringField({ initial: '', blank: true, choices: ['Admiration', 'Inferiority'] }),
14+
loyMis: new StringField({ initial: '', blank: true, choices: ['Loyalty', 'Mistrust'] }),
15+
affHat: new StringField({ initial: '', blank: true, choices: ['Affection', 'Hatred'] }),
16+
strength: new NumberField({ initial: 0, min: 0, max: 4, integer: true, nullable: false }),
17+
};
18+
}
19+
}

0 commit comments

Comments
 (0)