diff --git a/module/dialogs/DiceList.mjs b/module/dialogs/DiceList.mjs new file mode 100644 index 0000000..64d1091 --- /dev/null +++ b/module/dialogs/DiceList.mjs @@ -0,0 +1,44 @@ +import { GenericDialog } from "./GenericDialog.mjs"; + +export class DiceList extends GenericDialog { + constructor(mobActor) { + super({}, { title: `${mobActor.name}'s Dice List` }); + this.actor = mobActor; + this.dice = this.actor.system.dice.map((d) => ({ + ...d, + id: randomID(), + })); + }; + + static get defaultOptions() { + const opts = mergeObject({ + ...super.defaultOptions, + template: `systems/dotdungeon/templates/dialogs/diceList.hbs`, + width: 400, + height: 400, + submitOnClose: true, + }); + opts.classes.push(`dotdungeon`); + return opts; + }; + + async getData() { + const ctx = await super.getData(); + ctx.dice = this.dice; + return ctx; + }; + + async _updateObject(event, formData) { + console.log(event, formData); + }; + + addDie() { + this.dice.push({ + count: 1, + sides: 2, + repeat: 1, + id: randomID(), + }); + this.render(); + }; +}; diff --git a/module/dialogs/GenericDialog.mjs b/module/dialogs/GenericDialog.mjs new file mode 100644 index 0000000..b7fba3f --- /dev/null +++ b/module/dialogs/GenericDialog.mjs @@ -0,0 +1,45 @@ +import DOTDUNGEON from "../config.mjs"; + +export class GenericDialog extends FormApplication { + + #propogatedSettings = [ + `devMode`, + ]; + + async getData() { + const ctx = {}; + + // Send all of the settings that sheets need into their context + ctx.settings = {}; + for (const setting of this.#propogatedSettings) { + ctx.settings[setting] = game.settings.get(`dotdungeon`, setting); + }; + + ctx.isGM = game.users.current.hasRole(CONST.USER_ROLES.ASSISTANT); + + ctx.meta = { + expanded: this._expanded, + }; + + ctx.config = DOTDUNGEON; + ctx.icons = CONFIG.CACHE.icons; + + return ctx; + }; + + activateListeners(html) { + super.activateListeners(html); + + if (!this.isEditable) return; + console.debug(`.dungeon | Generic dialog adding listeners`); + + html.find(`[data-action]`) + .on(`click`, this._handleActionClick.bind(this)); + }; + + _handleActionClick($e) { + const data = $e.currentTarget.dataset; + if (!this[data.action]) return; + this[data.action].bind(this)($e); + }; +}; diff --git a/module/models/Actor/Mob.mjs b/module/models/Actor/Mob.mjs index 10c5850..c259bce 100644 --- a/module/models/Actor/Mob.mjs +++ b/module/models/Actor/Mob.mjs @@ -2,10 +2,6 @@ export class MobData extends foundry.abstract.TypeDataModel { static defineSchema() { const fields = foundry.data.fields; return { - dice: new fields.StringField({ - initial: ``, - blank: true, - }), bonus: new fields.NumberField({ initial: 0, nullable: false, @@ -42,6 +38,15 @@ export class MobData extends foundry.abstract.TypeDataModel { initial: ``, blank: true, }), + dice: new fields.ArrayField( + new fields.SchemaField({ + // {count}d{sides} x {repeat} + count: new fields.NumberField({ min: 1 }), + sides: new fields.NumberField({ min: 2 }), + repeat: new fields.NumberField({ min: 1 }), + }), + { initial: [] } + ), }; }; }; diff --git a/module/sheets/MobSheet.mjs b/module/sheets/MobSheet.mjs index e86cd5f..8e9bdfc 100644 --- a/module/sheets/MobSheet.mjs +++ b/module/sheets/MobSheet.mjs @@ -1,5 +1,6 @@ import { ActorHandler } from "../documents/Actor/Handler.mjs"; import { GenericActorSheet } from "./GenericActorSheet.mjs"; +import { DiceList } from "../dialogs/DiceList.mjs"; export class MobSheet extends GenericActorSheet { static get defaultOptions() { @@ -21,6 +22,12 @@ export class MobSheet extends GenericActorSheet { if (this.document.isEmbedded) return; if (!this.isEditable) return; console.debug(`.dungeon | Adding event listeners for Mob: ${this.id}`); + + html.find(`.edit-dice`) + .on(`click`, async () => { + let d = new DiceList(this.actor); + d.render(true); + }); }; async getData() { diff --git a/styles/dialog/DiceList.scss b/styles/dialog/DiceList.scss new file mode 100644 index 0000000..b7b66ab --- /dev/null +++ b/styles/dialog/DiceList.scss @@ -0,0 +1,3 @@ +.dotdungeon.dialog--dice-list { + padding: 4px; +} \ No newline at end of file diff --git a/templates/dialogs/diceList.hbs b/templates/dialogs/diceList.hbs new file mode 100644 index 0000000..2b1f4d9 --- /dev/null +++ b/templates/dialogs/diceList.hbs @@ -0,0 +1,37 @@ +
\ No newline at end of file