Begin working on making there be per-subtype classes for class methods
This commit is contained in:
parent
b4dcad9eee
commit
07bebdba4d
6 changed files with 88 additions and 25 deletions
22
module/documents/Actor/Handler.mjs
Normal file
22
module/documents/Actor/Handler.mjs
Normal file
|
|
@ -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);
|
||||
};
|
||||
};
|
||||
10
module/documents/Actor/Player.mjs
Normal file
10
module/documents/Actor/Player.mjs
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
export class PlayerActor {
|
||||
static createCustomSpell() {
|
||||
let customUUID = `Spell.Custom.${randomID()}`;
|
||||
this.system.spells[customUUID] = {
|
||||
name: ``,
|
||||
cost: ``,
|
||||
description: ``,
|
||||
};
|
||||
};
|
||||
};
|
||||
|
|
@ -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({
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
};
|
||||
|
||||
|
||||
};
|
||||
Loading…
Add table
Add a link
Reference in a new issue