Skip to content

Commit 157ffad

Browse files
authored
Merge pull request #50 from Shourn/migrate-data-model
Migrate to DataModel
2 parents d52eada + 24dc6a0 commit 157ffad

File tree

80 files changed

+6471
-456
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

80 files changed

+6471
-456
lines changed
Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -417,9 +417,9 @@ export class FUActor extends Actor {
417417
this.usedSkills.magicCheck = this.calcUsedSkillsFromExtraMagic(systemData);
418418
this.usedSkills.absorption = this.calcUsedSkillsFromAbsorbs(systemData);
419419
const [immunities, remainingFromAbsorb] = this.calcUsedSkillsFromImmunities(systemData, this.usedSkills.absorption);
420-
this.usedSkills.immunities = immunities
420+
this.usedSkills.immunities = immunities;
421421
this.usedSkills.resistances = this.calcUsedSkillsFromResistances(systemData, remainingFromAbsorb);
422-
422+
423423
this.usedSkills.specialRules = this.calcUsedSkillsFromSpecial(actorData);
424424
this.usedSkills.equipment = this.calcUsedSkillsFromEquipment(actorData);
425425
this.spUsed = Object.values(this.usedSkills).reduce((total, value) => total + value, 0);
@@ -526,18 +526,18 @@ export class FUActor extends Actor {
526526
}
527527
let sum = systemData.bonuses.accuracy.accuracyCheck;
528528
return Math.floor((sum - 1) / 3) + 1;
529-
},
529+
},
530530

531-
calcUsedSkillsFromExtraMagic (systemData) {
531+
calcUsedSkillsFromExtraMagic(systemData) {
532532
if (!systemData.bonuses.accuracy.magicCheck) {
533533
return 0;
534534
}
535535
let sum = systemData.bonuses.accuracy.magicCheck;
536536
return Math.floor((sum - 1) / 3) + 1;
537537
},
538538

539-
calcUsedSkillsFromResistances(systemData,fromAbsorb) {
540-
let sum = fromAbsorb*0.5;
539+
calcUsedSkillsFromResistances(systemData, fromAbsorb) {
540+
let sum = fromAbsorb * 0.5;
541541

542542
Object.entries(systemData.affinities).forEach((el) => {
543543
const isConstructWithEarth = systemData.species.value === 'construct' && el[0] === 'earth';
@@ -579,9 +579,9 @@ export class FUActor extends Actor {
579579
}
580580

581581
if (sum < 0) {
582-
return[0,Math.max(0,fromAbsorb+sum)]
582+
return [0, Math.max(0, fromAbsorb + sum)];
583583
}
584-
return [sum,fromAbsorb];
584+
return [sum, fromAbsorb];
585585
},
586586

587587
calcUsedSkillsFromAbsorbs(systemData) {
@@ -594,8 +594,6 @@ export class FUActor extends Actor {
594594
return sum;
595595
},
596596

597-
598-
599597
calcUsedSkillsFromSpecial(actorData) {
600598
const miscAbility = actorData.items.filter((item) => item.type === 'miscAbility');
601599
return miscAbility.length || 0;
@@ -732,7 +730,7 @@ export class FUActor extends Actor {
732730
* Prepare character roll data.
733731
*/
734732
_getCharacterRollData(data) {
735-
if (this.type !== 'character') return;
733+
if (this.type !== 'character') {}
736734

737735
// Copy the ability scores to the top level, so that rolls can use
738736
// formulas like `@str.mod + 4`.
@@ -752,7 +750,7 @@ export class FUActor extends Actor {
752750
* Prepare NPC roll data.
753751
*/
754752
_getNpcRollData(data) {
755-
if (this.type !== 'npc') return;
753+
if (this.type !== 'npc') {}
756754

757755
// Process additional NPC data here.
758756
}
Lines changed: 179 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,179 @@
1+
import {CharacterMigrations} from './character-migrations.mjs';
2+
3+
export class CharacterDataModel extends foundry.abstract.TypeDataModel {
4+
static defineSchema() {
5+
const { SchemaField, NumberField, StringField, ArrayField } = foundry.data.fields;
6+
return {
7+
level: new SchemaField({ value: new NumberField({ min: 5, max: 60, initial: 5, integer: true }) }),
8+
resources: new SchemaField({
9+
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 }),
14+
}),
15+
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 }),
20+
}),
21+
rp1: new SchemaField({
22+
name: new StringField({ initial: '' }),
23+
value: new NumberField({ min: 0, initial: 0, integer: true }),
24+
}),
25+
rp2: new SchemaField({
26+
name: new StringField({ initial: '' }),
27+
value: new NumberField({ min: 0, initial: 0, integer: true }),
28+
}),
29+
rp3: new SchemaField({
30+
name: new StringField({ initial: '' }),
31+
value: new NumberField({ min: 0, initial: 0, integer: true }),
32+
}),
33+
zenit: new SchemaField({ value: new NumberField({ min: 0, initial: 0, integer: true }) }),
34+
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 }) }),
51+
identity: new SchemaField({ name: new StringField() }),
52+
pronouns: new SchemaField({ name: new StringField() }),
53+
theme: new SchemaField({ name: new StringField() }),
54+
origin: new SchemaField({ name: new StringField() }),
55+
}),
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+
}),
125+
derived: new SchemaField({
126+
init: new SchemaField({
127+
value: new NumberField({ min: 0, initial: 0, integer: true }),
128+
bonus: new NumberField({ initial: 0, integer: true }),
129+
}),
130+
def: new SchemaField({
131+
value: new NumberField({ min: 0, initial: 0, integer: true }),
132+
bonus: new NumberField({ initial: 0, integer: true }),
133+
}),
134+
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 }),
169+
}),
170+
}),
171+
};
172+
}
173+
174+
static migrateData(source) {
175+
CharacterMigrations.run(source);
176+
177+
return source;
178+
}
179+
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
function migrateLegacyBonds(source) {
2+
for (const bond of ['bond1', 'bond2', 'bond3', 'bond4', 'bond5', 'bond6']) {
3+
if (bond in source.resources) {
4+
const { name, admInf, loyMis, affHat } = source.resources[bond];
5+
6+
if (name || admInf || loyMis || affHat) {
7+
const bonds = (source.resources.bonds ??= []);
8+
bonds.push({
9+
name,
10+
admInf,
11+
loyMis,
12+
affHat,
13+
strength: [admInf, loyMis, affHat].reduce((prev, curr) => prev + (curr.length ? 1 : 0), 0),
14+
});
15+
}
16+
delete source.resources[bond];
17+
}
18+
}
19+
}
20+
21+
function migrateLegacyFabulaPoints(source) {
22+
if ('fp' in source) {
23+
const fp = (source.resources.fp ??= {});
24+
fp.value = source.fp.value ?? 0;
25+
delete source.fp;
26+
}
27+
}
28+
29+
export class CharacterMigrations {
30+
static run(source) {
31+
migrateLegacyBonds(source);
32+
33+
migrateLegacyFabulaPoints(source);
34+
}
35+
}

0 commit comments

Comments
 (0)