Implement Mob Sheet

This commit is contained in:
Oliver-Akins 2024-01-28 16:00:14 -07:00
parent c257e4e5ee
commit 028b8629fe
10 changed files with 202 additions and 1 deletions

View file

@ -1,9 +1,11 @@
import PlayerActor from "./Player.mjs";
import MobActor from "./Mob.mjs";
/** @extends {Actor} */
export class ActorHandler extends Actor {
proxyTargets = {
player: PlayerActor,
mob: MobActor,
};
constructor(data, ctx) {

View file

View file

@ -4,6 +4,7 @@ import { SpellItemData } from "./models/Item/Spell.mjs";
import { PlayerData } from "./models/Actor/Player.mjs";
import { PetItemData } from "./models/Item/Pet.mjs";
import { SyncData } from "./models/Actor/Sync.mjs";
import { MobData } from "./models/Actor/Mob.mjs";
// Main Documents
import { ActorHandler } from "./documents/Actor/Handler.mjs";
@ -14,6 +15,7 @@ import { SpellSheet } from "./sheets/SpellSheet.mjs";
import { AspectSheet } from "./sheets/AspectSheet.mjs";
import { PlayerSheet } from "./sheets/PlayerSheet.mjs";
import { BasicSyncSheet } from "./sheets/SyncVariations/BasicSyncSheet.mjs";
import { MobSheet } from "./sheets/MobSheet.mjs";
import { PetSheet } from "./sheets/PetSheet.mjs";
// Utility imports
@ -34,6 +36,7 @@ Hooks.once(`init`, () => {
CONFIG.Actor.dataModels.player = PlayerData;
CONFIG.Actor.dataModels.sync = SyncData;
CONFIG.Actor.dataModels.mob = MobData;
CONFIG.Item.dataModels.aspect = AspectItemData;
CONFIG.Item.dataModels.spell = SpellItemData;
CONFIG.Item.dataModels.pet = PetItemData;
@ -48,6 +51,11 @@ Hooks.once(`init`, () => {
types: ["player"],
label: "dotdungeon.sheet-names.PlayerSheet"
});
Actors.registerSheet("dotdungeon", MobSheet, {
makeDefault: true,
types: ["mob"],
label: "dotdungeon.sheet-names.MobSheet"
});
Actors.registerSheet("dotdungeon", BasicSyncSheet, {
makeDefault: true,
types: ["sync"],

View file

@ -0,0 +1,30 @@
export class MobData extends foundry.abstract.TypeDataModel {
static defineSchema() {
const fields = foundry.data.fields;
return {
dice: new fields.StringField({
initial: ``,
}),
bonus: new fields.NumberField({
initial: 0,
nullable: false,
}),
initiative: new fields.NumberField({
initial: null,
nullable: true,
}),
morale: new fields.NumberField({
initial: null,
nullable: true,
}),
drops: new fields.StringField({
initial: ``,
blank: true,
}),
stunts: new fields.StringField({
initial: ``,
blank: true,
}),
};
};
};

View file

@ -0,0 +1,40 @@
import { ActorHandler } from "../documents/Actor/Handler.mjs";
import { GenericActorSheet } from "./GenericActorSheet.mjs";
export class MobSheet extends GenericActorSheet {
static get defaultOptions() {
let opts = mergeObject(
super.defaultOptions,
{
template: `systems/dotdungeon/templates/actors/mobs/main.hbs`,
width: 300,
height: 360,
}
);
opts.classes.push(`dotdungeon`);
return opts;
};
activateListeners(html) {
super.activateListeners(html);
if (this.document.isEmbedded) return;
if (!this.isEditable) return;
console.debug(`.dungeon | Adding event listeners for Mob: ${this.id}`);
};
async getData() {
const ctx = await super.getData();
/** @type {ActorHandler} */
const actor = this.actor;
ctx.system = actor.system;
ctx.flags = actor.flags;
ctx.items = this.actor.itemTypes;
ctx.computed = {};
console.log(actor.uuid, `context:`, ctx)
return ctx;
};
};