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
|
|
@ -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, {
|
||||
|
|
|
|||
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;
|
||||
};
|
||||
|
||||
|
||||
};
|
||||
|
|
@ -1,3 +1,51 @@
|
|||
{{#> dotdungeon.panel class="spells" title="dotdungeon.actor.pc.panel.spells"}}
|
||||
Spells
|
||||
{{#each system.spells as | spell |}}
|
||||
<details {{dd-expanded ../meta.expanded @key}}>
|
||||
<summary data-collapse-id="{{@key}}">
|
||||
{{spell.name}} (Cost: {{spell.cost}})
|
||||
</summary>
|
||||
<div class="spell">
|
||||
<div class="spell__name">
|
||||
<label for="{{meta.idp}}-{{@key}}-name">Name</label>
|
||||
<input
|
||||
type="text"
|
||||
id="{{meta.idp}}-{{@key}}-name"
|
||||
name="system.spells.{{@key}}.name"
|
||||
value="{{spell.name}}"
|
||||
>
|
||||
</div>
|
||||
<div class="spell__cost">
|
||||
<label for="{{meta.idp}}-{{@key}}-cost"></label>
|
||||
<input
|
||||
type="text"
|
||||
id="{{meta.idp}}-{{@key}}-cost"
|
||||
name="system.spells.{{@key}}.cost"
|
||||
value="{{spell.cost}}"
|
||||
>
|
||||
</div>
|
||||
<div class="spell__description">
|
||||
{{spell.description}}
|
||||
</div>
|
||||
<div class="flex-row flex-end">
|
||||
<button>
|
||||
Delete
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</details>
|
||||
{{else}}
|
||||
<p>
|
||||
You have no spells yet!
|
||||
</p>
|
||||
<div class="debug-data">
|
||||
{{dd-stringify system.spells}}
|
||||
</div>
|
||||
{{/each}}
|
||||
<div class="flex-row">
|
||||
<button
|
||||
class="primary add-spell"
|
||||
>
|
||||
Add New Spell
|
||||
</button>
|
||||
</div>
|
||||
{{/ dotdungeon.panel}}
|
||||
Loading…
Add table
Add a link
Reference in a new issue