diff --git a/dotdungeon.mjs b/dotdungeon.mjs index 1344971..0697ca7 100644 --- a/dotdungeon.mjs +++ b/dotdungeon.mjs @@ -4,8 +4,7 @@ import { PlayerData } from "./module/models/PlayerData.mjs"; import { SyncData } from "./module/models/SyncData.mjs"; // Main Documents -import { PlayerActor } from "./module/documents/PlayerActor.mjs"; -import { AspectItem } from "./module/documents/AspectItem.mjs"; +import { ActorHandler } from "./module/documents/Actor/Handler.mjs"; // Character Sheets import { AspectSheet } from "./module/sheets/AspectSheet.mjs"; @@ -27,13 +26,10 @@ Hooks.once(`init`, () => { loadSettings(); - game.boilerplate = { - PlayerActor, - AspectItem, - }; CONFIG.Actor.dataModels.player = PlayerData; CONFIG.Actor.dataModels.sync = SyncData; CONFIG.Item.dataModels.aspect = AspectItemData; + CONFIG.Actor.documentClass = ActorHandler; Actors.unregisterSheet("core", ActorSheet); Actors.registerSheet("dotdungeon", PlayerSheet, { diff --git a/module/documents/Actor/Handler.mjs b/module/documents/Actor/Handler.mjs new file mode 100644 index 0000000..b6d4816 --- /dev/null +++ b/module/documents/Actor/Handler.mjs @@ -0,0 +1,22 @@ +import { PlayerActor } from "./Player.mjs"; + +export class ActorHandler extends Actor { + actorTypes = { + player: PlayerActor, + }; + + constructor(data, ctx) { + super(data, ctx); + }; + + /** @type {class|undefined} */ + get fn() { + return this.actorTypes[this.type]; + }; + + createCustomSpell() { + if (!this.fn?.createCustomSpell) return; + this.fn.createCustomSpell.bind(this)(); + this.sheet.render(true); + }; +}; diff --git a/module/documents/Actor/Player.mjs b/module/documents/Actor/Player.mjs new file mode 100644 index 0000000..22f7b88 --- /dev/null +++ b/module/documents/Actor/Player.mjs @@ -0,0 +1,10 @@ +export class PlayerActor { + static createCustomSpell() { + let customUUID = `Spell.Custom.${randomID()}`; + this.system.spells[customUUID] = { + name: ``, + cost: ``, + description: ``, + }; + }; +}; diff --git a/module/models/PlayerData.mjs b/module/models/PlayerData.mjs index d07d907..a9db6f7 100644 --- a/module/models/PlayerData.mjs +++ b/module/models/PlayerData.mjs @@ -135,11 +135,11 @@ export class PlayerData extends foundry.abstract.DataModel { upkeep: new fields.NumberField({ min: 0, integer: true }), info: new fields.StringField(), }), - spells: new fields.ArrayField( + spells: new MappingField( new fields.SchemaField({ - name: new fields.StringField(), - cost: new fields.NumberField(), - info: new fields.StringField(), + name: new fields.StringField({ initial: ``, blank: true, trim: true }), + cost: new fields.NumberField({ initial: 0, min: 0 }), + info: new fields.StringField({ initial: ``, blank: true, trim: true }), }) ), respawns: new fields.SchemaField({ diff --git a/module/sheets/PlayerSheet.mjs b/module/sheets/PlayerSheet.mjs index 63e4d30..fc7c1e9 100644 --- a/module/sheets/PlayerSheet.mjs +++ b/module/sheets/PlayerSheet.mjs @@ -19,17 +19,7 @@ export class PlayerSheet extends GenericActorSheet { if (!this.isEditable) return; console.debug(`.dungeon | Adding event listeners for Actor: ${this.id}`); - /* - Toggles the expanded state for the detail elements in the sheet. - */ - }; - - #syncValue() { - let delta = 0; - for (const actor of game.actors) { - delta += actor.system.syncDelta ?? 0; - }; - return 100 + delta; + html.find(`.add-spell`).on(`click`, this.actor.createCustomSpell.bind(this.actor)); }; getData() { @@ -40,7 +30,6 @@ export class PlayerSheet extends GenericActorSheet { ctx.flags = actor.flags; ctx.computed = { - syncTotal: this.#syncValue(), canChangeGroup: ctx.settings.playersCanChangeGroup || ctx.isGM, }; @@ -50,6 +39,4 @@ export class PlayerSheet extends GenericActorSheet { console.groupEnd(); return ctx; }; - - }; \ No newline at end of file diff --git a/templates/actors/char-sheet-mvp/panels/spells.pc.hbs b/templates/actors/char-sheet-mvp/panels/spells.pc.hbs index 2ef7ea6..e788b1a 100644 --- a/templates/actors/char-sheet-mvp/panels/spells.pc.hbs +++ b/templates/actors/char-sheet-mvp/panels/spells.pc.hbs @@ -1,3 +1,51 @@ {{#> dotdungeon.panel class="spells" title="dotdungeon.actor.pc.panel.spells"}} - Spells + {{#each system.spells as | spell |}} +
+ + {{spell.name}} (Cost: {{spell.cost}}) + +
+
+ + +
+
+ + +
+
+ {{spell.description}} +
+
+ +
+
+
+ {{else}} +

+ You have no spells yet! +

+
+ {{dd-stringify system.spells}} +
+ {{/each}} +
+ +
{{/ dotdungeon.panel}} \ No newline at end of file