const { HTMLField, SchemaField, NumberField, StringField, BooleanField, FilePathField, ArrayField } = foundry.data.fields;
import { nullPlaybookKey, playbookKeys, lookupPlaybook } from './playbooks.mjs';
const textField = () => new StringField({ required: true, blank: true });
const promptField = () => new SchemaField({
question: textField(),
answer: textField()
});
const harmField = () => new SchemaField({
marked: new BooleanField({ required: true }),
description: textField(),
});
export class HenchDataModel extends foundry.abstract.TypeDataModel {
static defineSchema() {
return {
name: textField(),
look: textField(),
detailAnswers: new SchemaField({
one: textField(),
two: textField(),
}),
customInclination: textField(),
harm: new SchemaField({
levelOne: new SchemaField({
one: harmField(),
two: harmField(),
}),
levelTwo: new SchemaField({
one: harmField(),
two: harmField(),
}),
levelThree: new SchemaField({
one: harmField(),
}),
levelFour: new SchemaField({
one: harmField(),
}),
}),
stress: new NumberField({ required: true, integer: true, min: 0, initial: 0, max: 12 }),
experience: new NumberField({ required: true, integer: true, min: 0, initial: 0, max: 5 }),
playbook: new StringField({ required: true, blank: false, initial: nullPlaybookKey, options: playbookKeys }),
};
}
static migrateData(source) {
// No migrations yet - base case.
return super.migrateData(source);
}
get dead() {
return !!this.harm.levelFour.marked;
}
get playbookDetails() {
return lookupPlaybook(this.playbook);
}
// TODO IMPLEMENT advancements
get gearLimit() {
return 3;
}
get hasPlaybookSelected() {
return this.playbook !== nullPlaybookKey;
}
get detailQuestions() {
return this.playbookDetails?.detailQuestions;
}
get inclinations() {
const base = this.playbookDetails?.inclinations ?? {};
return {
...base,
custom: this.customInclination
};
}
get missionPlanningQuestions() {
return this.playbookDetails?.missionPlanningQuestions;
}
get expTriggers() {
const fromPlaybook = this.playbookDetails?.expTrigger;
let triggers = {
one: "You acted on your inclinations.",
two: "You made the boss proud.",
three: "Your home life interfered with the mission."
};
if(fromPlaybook) {
triggers.four = fromPlaybook;
}
return triggers;
}
}