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}})
+
+
+ You have no spells yet! +
+