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

@ -449,6 +449,19 @@
flex-direction: column; flex-direction: column;
} }
} }
.dotdungeon .actor--mob {
padding: 4px;
}
.dotdungeon .actor--mob input[type=text] {
font-size: 1.5em;
height: 1.5em;
width: 100%;
}
.dotdungeon .actor--mob textarea {
width: 100%;
resize: vertical;
}
.dotdungeon .actor--basic-sync { .dotdungeon .actor--basic-sync {
display: flex; display: flex;
justify-content: center; justify-content: center;
@ -519,4 +532,4 @@
resize: vertical; resize: vertical;
} }
/*# sourceMappingURL=data:application/json;charset=utf-8,%7B%22version%22:3,%22sourceRoot%22:%22%22,%22sources%22:%5B%22../styles/generic.scss%22,%22../styles/mixins/_foundry.scss%22,%22../styles/_vars.scss%22,%22../styles/mixins/_partials.scss%22,%22../styles/global/icons.scss%22,%22../styles/global/buttons.scss%22,%22../styles/sheets/partials/stat.scss%22,%22../styles/sheets/partials/skill.scss%22,%22../styles/sheets/partials/panel.scss%22,%22../styles/mixins/_breakpoints.scss%22,%22../styles/sheets/actor/mvp.scss%22,%22../styles/sheets/actor/sync/basic.scss%22,%22../styles/sheets/items/aspect.scss%22,%22../styles/sheets/items/spell.scss%22,%22../styles/sheets/items/pet.scss%22%5D,%22names%22:%5B%5D,%22mappings%22:%22AAIQ;AAKP;EACC;;AAED;EACC;;AAGD;ECfA;EACA;EACA;EDeC,aEhBW;EFiBX;;AAGD;EACC;;AAGD;ECzBA;EACA;EACA;EDyBC;EACA;;AAEA;EACC;;AAIF;AAAA;AAAA;EAGC;EGpCD;EACA;EACA;EACA;EACA;EACA,aDLW;;ACOX;AAAA;AAAA;AAAA;AAAA;EAEC;;AH+BD;EACC;;AAGD;EACC;;AAEA;EACC;;;AAMH;EACC;;AAEA;EACC;EACA,YEzDW;;AF2DX;EACC;EACA,aE/DS;EFgET;;;AIhEF;EACC;EACA;EACA;;AAIC;EACC;EACA;;AAFD;EACC;EACA;;AAFD;EACC;EACA;;AAFD;EACC;EACA;;AAFD;EACC;EACA;;AAFD;EACC;EACA;;AAFD;EACC;EACA;;;ACTH;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACC,YHXc;EGYd,OHXe;;AGYf;EACC;EACA,OHfa;EGgBb,cHhBa;;AGoBf;EACC,YHlBc;EGmBd,OHlBe;;AGmBf;EACC;EACA,OHtBa;EGuBb,cHvBa;;AG2Bf;EACC,YHzBa;EG0Bb,OHzBc;;AG0Bd;EACC;EACA,OH7BY;EG8BZ,cH9BY;;AGkCd;EACC;;AAID;EACC;;AACA;EACC;;;ACvDJ;EACC;EACA;EACA;;ACHD;EACC;EACA;EACA;EACA;EACA;EACA;;AAEA;EACC;EACA;EACA;EACA;;AAEA;EACC;EACA;EACA;EACA;;;ACdH;EACC;EACA;EAEA;;AAEA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EPlBD;EACA;EACA;EOkBE;EACA;EACA,aNrBU;EMsBV;;AAGD;EAEC,QADO;EAEP,OAFO;EAGP;;AAIF;EACC;;;AC7BD;EDkCA;IACC;IACA;;;AExCF;EACC;EACA,qBACC;EASD;EACA,oBACC;EAGD;EACA;;AAEA;EACC;EACA;EACA;EACA;;AAEA;EACC;;AAIA;EACC;;AAMF;EACC;;AACA;EACC;EACA;;AAGD;EACC;;AAGF;EACC;;AACA;EACC;EACA;EACA;EACA;EACA;EACA;;AAGF;EACC;;AAEA;EACC;EACA;EACA;EACA;;AAGF;EACC;;AAEA;EACC;EACA;EACA;;AAED;EACC;EACA;;AAED;EACC;;AAGD;EACC;EACA;EACA;;AAGD;AAAA;AAAA;EAGC;EACA;;AAGD;EACC;;AAGF;EACC;;AAEA;EACC;EACA;EACA;;AAGD;AAAA;EAEC;EACA;EACA;;AAEA;AAAA;EACC;;AAIF;EACC;EACA;;AAGF;EACC;;AACA;EACC;EACA;EACA;EACA;;AAEA;EACC;;AAKD;EACC;EACA;EACA;;AAEA;EACC;;AAKJ;EACC;;AAEA;EACC;EACA;EACA;EACA;;AAEA;EACC;EACA;EACA;EACA;;AAEA;EACC;;AAGF;EACC;EACA;EACA;;AAED;EACC;EACA;EACA;;AAED;EACC;EACA;EACA;EACA;;AAIH;EACC;;AACA;EACC;EACA;EACA;EACA;;AAEA;EACC;;AAIH;EACC;;AAEA;EACC;EACA;EACA;;AAEA;EACC;;AAIF;EACC;EACA;EACA;;AAGF;EACC;;AAED;EACC;;AAEA;EACC;EACA;EACA;;AAEA;EACC;;AAIH;EACC;;AAIF;EACC;EACA;EACA;EACA;;AAIA;EACC;;;AD9PF;ECsQC;IACC;IACA;IACA,qBACC;;EAkBC;IACC;;EAKD;IACC;IACA;;;AD9RL;ECwSC;IACC;IACA;IACA,qBACC;;EAeC;IACC;;;AChUL;EACC;EACA;EACA;EACA;EACA;;AAEA;EACC;EACA;EACA;;AAGD;EACC;EACA;;AAGD;EACC;EACA;;AAMA;EACC;EACA;;;AFlBH;EE4BG;IACC;IACA;;;ACzCL;EACC;;AAEA;EACC;EACA;EACA;;AAGD;EACC;EACA;;;ACXF;EACC;;AAEA;EACC;EACA;EACA;;AAGD;EACC;EACA;;;ACXF;EACC;;AAEA;EACC;EACA;EACA;;AAGD;EACC;EACA%22,%22file%22:%22root.css%22%7D */ /*# sourceMappingURL=data:application/json;charset=utf-8,%7B%22version%22:3,%22sourceRoot%22:%22%22,%22sources%22:%5B%22../styles/generic.scss%22,%22../styles/mixins/_foundry.scss%22,%22../styles/_vars.scss%22,%22../styles/mixins/_partials.scss%22,%22../styles/global/icons.scss%22,%22../styles/global/buttons.scss%22,%22../styles/sheets/partials/stat.scss%22,%22../styles/sheets/partials/skill.scss%22,%22../styles/sheets/partials/panel.scss%22,%22../styles/mixins/_breakpoints.scss%22,%22../styles/sheets/actor/mvp.scss%22,%22../styles/sheets/actor/mob.scss%22,%22../styles/sheets/actor/sync/basic.scss%22,%22../styles/sheets/items/aspect.scss%22,%22../styles/sheets/items/spell.scss%22,%22../styles/sheets/items/pet.scss%22%5D,%22names%22:%5B%5D,%22mappings%22:%22AAIQ;AAKP;EACC;;AAED;EACC;;AAGD;ECfA;EACA;EACA;EDeC,aEhBW;EFiBX;;AAGD;EACC;;AAGD;ECzBA;EACA;EACA;EDyBC;EACA;;AAEA;EACC;;AAIF;AAAA;AAAA;EAGC;EGpCD;EACA;EACA;EACA;EACA;EACA,aDLW;;ACOX;AAAA;AAAA;AAAA;AAAA;EAEC;;AH+BD;EACC;;AAGD;EACC;;AAEA;EACC;;;AAMH;EACC;;AAEA;EACC;EACA,YEzDW;;AF2DX;EACC;EACA,aE/DS;EFgET;;;AIhEF;EACC;EACA;EACA;;AAIC;EACC;EACA;;AAFD;EACC;EACA;;AAFD;EACC;EACA;;AAFD;EACC;EACA;;AAFD;EACC;EACA;;AAFD;EACC;EACA;;AAFD;EACC;EACA;;;ACTH;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACC,YHXc;EGYd,OHXe;;AGYf;EACC;EACA,OHfa;EGgBb,cHhBa;;AGoBf;EACC,YHlBc;EGmBd,OHlBe;;AGmBf;EACC;EACA,OHtBa;EGuBb,cHvBa;;AG2Bf;EACC,YHzBa;EG0Bb,OHzBc;;AG0Bd;EACC;EACA,OH7BY;EG8BZ,cH9BY;;AGkCd;EACC;;AAID;EACC;;AACA;EACC;;;ACvDJ;EACC;EACA;EACA;;ACHD;EACC;EACA;EACA;EACA;EACA;EACA;;AAEA;EACC;EACA;EACA;EACA;;AAEA;EACC;EACA;EACA;EACA;;;ACdH;EACC;EACA;EAEA;;AAEA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EPlBD;EACA;EACA;EOkBE;EACA;EACA,aNrBU;EMsBV;;AAGD;EAEC,QADO;EAEP,OAFO;EAGP;;AAIF;EACC;;;AC7BD;EDkCA;IACC;IACA;;;AExCF;EACC;EACA,qBACC;EASD;EACA,oBACC;EAGD;EACA;;AAEA;EACC;EACA;EACA;EACA;;AAEA;EACC;;AAIA;EACC;;AAMF;EACC;;AACA;EACC;EACA;;AAGD;EACC;;AAGF;EACC;;AACA;EACC;EACA;EACA;EACA;EACA;EACA;;AAGF;EACC;;AAEA;EACC;EACA;EACA;EACA;;AAGF;EACC;;AAEA;EACC;EACA;EACA;;AAED;EACC;EACA;;AAED;EACC;;AAGD;EACC;EACA;EACA;;AAGD;AAAA;AAAA;EAGC;EACA;;AAGD;EACC;;AAGF;EACC;;AAEA;EACC;EACA;EACA;;AAGD;AAAA;EAEC;EACA;EACA;;AAEA;AAAA;EACC;;AAIF;EACC;EACA;;AAGF;EACC;;AACA;EACC;EACA;EACA;EACA;;AAEA;EACC;;AAKD;EACC;EACA;EACA;;AAEA;EACC;;AAKJ;EACC;;AAEA;EACC;EACA;EACA;EACA;;AAEA;EACC;EACA;EACA;EACA;;AAEA;EACC;;AAGF;EACC;EACA;EACA;;AAED;EACC;EACA;EACA;;AAED;EACC;EACA;EACA;EACA;;AAIH;EACC;;AACA;EACC;EACA;EACA;EACA;;AAEA;EACC;;AAIH;EACC;;AAEA;EACC;EACA;EACA;;AAEA;EACC;;AAIF;EACC;EACA;EACA;;AAGF;EACC;;AAED;EACC;;AAEA;EACC;EACA;EACA;;AAEA;EACC;;AAIH;EACC;;AAIF;EACC;EACA;EACA;EACA;;AAIA;EACC;;;AD9PF;ECsQC;IACC;IACA;IACA,qBACC;;EAkBC;IACC;;EAKD;IACC;IACA;;;AD9RL;ECwSC;IACC;IACA;IACA,qBACC;;EAeC;IACC;;;ACjUN;EACC;;AAEA;EACC;EACA;EACA;;AAGD;EACC;EACA;;;ACVD;EACC;EACA;EACA;EACA;EACA;;AAEA;EACC;EACA;EACA;;AAGD;EACC;EACA;;AAGD;EACC;EACA;;AAMA;EACC;EACA;;;AHlBH;EG4BG;IACC;IACA;;;ACzCL;EACC;;AAEA;EACC;EACA;EACA;;AAGD;EACC;EACA;;;ACXF;EACC;;AAEA;EACC;EACA;EACA;;AAGD;EACC;EACA;;;ACXF;EACC;;AAEA;EACC;EACA;EACA;;AAGD;EACC;EACA%22,%22file%22:%22root.css%22%7D */

View file

@ -0,0 +1,14 @@
.dotdungeon .actor--mob {
padding: 4px;
}
.dotdungeon .actor--mob input[type=text] {
font-size: 1.5em;
height: 1.5em;
width: 100%;
}
.dotdungeon .actor--mob textarea {
width: 100%;
resize: vertical;
}
/*# sourceMappingURL=data:application/json;charset=utf-8,%7B%22version%22:3,%22sourceRoot%22:%22%22,%22sources%22:%5B%22../../../styles/sheets/actor/mob.scss%22%5D,%22names%22:%5B%5D,%22mappings%22:%22AAEA;EACC;;AAEA;EACC;EACA;EACA;;AAGD;EACC;EACA%22,%22file%22:%22mob.css%22%7D */

View file

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

View file

@ -12,6 +12,7 @@
@use "./sheets/partials/panel.scss"; @use "./sheets/partials/panel.scss";
@use "./sheets/actor/mvp.scss"; @use "./sheets/actor/mvp.scss";
@use "./sheets/actor/mob.scss";
@use "./sheets/actor/sync/basic.scss"; @use "./sheets/actor/sync/basic.scss";
@use "./sheets/items/aspect.scss"; @use "./sheets/items/aspect.scss";
@use "./sheets/items/spell.scss"; @use "./sheets/items/spell.scss";

View file

@ -0,0 +1,16 @@
@use "../../vars" as *;
.dotdungeon .actor--mob {
padding: 4px;
input[type=text] {
font-size: 1.5em;
height: 1.5em;
width: 100%;
}
textarea {
width: 100%;
resize: vertical;
}
}

View file

@ -0,0 +1,77 @@
<form autocomplete="off" class="actor--mob">
<h2><input type="text" name="name" value="{{actor.name}}"></h2>
<table>
<tr>
<td><label for="{{meta.idp}}-dice">Dice</label></td>
<td>
<input
type="text"
id="{{meta.idp}}-dice"
name="system.dice"
value="{{system.dice}}"
>
</td>
</tr>
<tr>
<td><label for="{{meta.idp}}-bonus">Bonus</label></td>
<td>
<input
type="number"
id="{{meta.idp}}-bonus"
name="system.bonus"
value="{{system.bonus}}"
>
</td>
</tr>
<tr>
<td><label for="{{meta.idp}}-initiative">Initiative</label></td>
<td>
<input
type="number"
id="{{meta.idp}}-initiative"
name="system.initiative"
value="{{system.initiative}}"
>
</td>
</tr>
<tr>
<td><label for="{{meta.idp}}-bytes">Bytes</label></td>
<td>
<input
type="number"
id="{{meta.idp}}-bytes"
name="system.bytes"
value="{{system.bytes}}"
>
</td>
</tr>
<tr>
<td><label for="{{meta.idp}}-morale">Morale</label></td>
<td>
<input
type="number"
id="{{meta.idp}}-morale"
name="system.morale"
value="{{system.morale}}"
>
</td>
</tr>
<tr>
<td><label for="{{meta.idp}}-drops">Drops</label></td>
<td>
<input
type="text"
id="{{meta.idp}}-drops"
name="system.drops"
value="{{system.drops}}"
>
</td>
</tr>
</table>
<label for="{{meta.idp}}-stunts">Stunts</label>
<textarea
type="text"
id="{{meta.idp}}-stunts"
name="system.stunts"
>{{system.stunts}}</textarea>
</form>