Skip to content

Commit

Permalink
Actors refactored somewhat
Browse files Browse the repository at this point in the history
  • Loading branch information
constant-null committed Apr 4, 2024
1 parent 2925d99 commit 64a6611
Show file tree
Hide file tree
Showing 10 changed files with 291 additions and 315 deletions.
8 changes: 8 additions & 0 deletions efs.js
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ Hooks.once("init", function () {
Items.unregisterSheet("core", ItemSheet);
Items.registerSheet("efs", EFSItemSheet, { makeDefault: true, label: "EFS.Sheets.Item" })
registerHandlebarsHelpers();
preloadTemplates();
});

Hooks.on("renderCameraViews", function (app, html, data){
Expand All @@ -40,4 +41,11 @@ function registerHandlebarsHelpers() {
Handlebars.registerHelper("lt", (v1, v2) => {
return v1 < v2;
});
}

async function preloadTemplates() {
return loadTemplates([
"systems/efs/templates/parts/core-info.html",
"systems/efs/templates/parts/items.html",
]);
}
106 changes: 106 additions & 0 deletions module/sheets/efs-base-actor-sheet.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
import EFSCharacterExtraSheet from "./efs-character-extra-sheet.js";

export default class EFSBaseActorSheet extends ActorSheet {
heroic = false;

activateListeners(html) {
super.activateListeners(html)

html.find(".clickable.approach").click(this._approachClicked.bind(this));
html.find(".clickable#extra").click(this._showExtra.bind(this));
html.find(".dp").change(this._dpClick.bind(this))

html.find(".edit-item").click(this._onEditItem.bind(this))
html.find(".delete-item").click(this._onDeleteItem.bind(this))
html.find(".add-item").click(this._onAddItem.bind(this))
html.find(".item").click(this._onClickItem.bind(this))
}


async _onClickItem(event) {
event.preventDefault();
const itemId = event.target.dataset.id;
const item = this.actor.getEmbeddedDocument("Item", itemId);

let r = await new Roll(`1d`+item._system.dice).evaluate({async: true});
let message = "<b>"+game.i18n.localize("EFS.Message.ItemUsed").replace("{item}", item.name)+"</b>"

await r.toMessage({
flavor: message,
speaker: ChatMessage.getSpeaker({actor: this.actor})
});
}

_onEditItem(event) {
event.preventDefault();

const item = this.actor.getEmbeddedDocument("Item", event.target.dataset.id);
if (!item) {
return;
}
item.sheet.render(true);
}

async _onDeleteItem(event) {
event.preventDefault();
const itemId = event.target.dataset.id;
const item = this.actor.getEmbeddedDocument("Item", itemId);

new Dialog({
title: game.i18n.localize("EFS.Dialog.ActionConfirm"),
content: game.i18n.localize("EFS.Dialog.ConfirmDeletion")+"<b>"+item.name+"</b>?",
buttons: {
yes: {
label: game.i18n.localize("EFS.Dialog.Yes"),
callback: () => {this.actor.deleteEmbeddedDocuments("Item", [event.target.dataset.id])},
},
no: {
label: game.i18n.localize("EFS.Dialog.No"),
callback: () => {}
}
}
}).render(true);
}

async _onAddItem(event) {
event.preventDefault();
const items = await this.actor.createEmbeddedDocuments("Item", [{name:game.i18n.localize("EFS.Item.DefaultName"), type:"item"}])
await items[0].sheet.render(true);
}

async _showExtra(event) {
new EFSCharacterExtraSheet(this.actor).render(true);
}


async _dpClick(event) {
let set = event.target.checked;
let dp = !set ? +event.target.dataset.num : +event.target.dataset.num+1;

await this.actor.update({"system.dp.value": this.actor.system.dp.max - dp})
}

async _approachClicked(event) {
event.preventDefault();

const diceSteps = ["6", "8", "10", "12", "20"];

const id = event.currentTarget.id;
let diceSize = this.actor._system.approaches[id];
if (this.heroic) {
diceSize = diceSteps[diceSteps.indexOf(diceSize) + 1]
}
let r = await new Roll("1d" + diceSize).evaluate({async: true});

let heroMessage = game.i18n.localize("EFS.Message.Uses") + " <b>" + game.i18n.localize("EFS.Approaches." + id.charAt(0).toUpperCase() + id.slice(1)) + "</b> " + game.i18n.localize("EFS.Approaches.Singular").toLowerCase()
if (this.heroic) {
heroMessage = game.i18n.localize("EFS.Message.InHeroicMoment") + "<br/>" + heroMessage;
}

await r.toMessage({
flavor: heroMessage,
speaker: ChatMessage.getSpeaker({actor: this.actor})
});
}

}
45 changes: 0 additions & 45 deletions module/sheets/efs-character-extra-sheet.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,55 +7,10 @@ export default class EFSCharacterExtraSheet extends ActorSheet {
})
}

activateListeners(html) {
super.activateListeners(html);

html.find(".edit-item").click(this._onEditItem.bind(this))
html.find(".delete-item").click(this._onDeleteItem.bind(this))
html.find(".add-item").click(this._onAddItem.bind(this))
}

_onEditItem(event) {
event.preventDefault();

const item = this.actor.getEmbeddedDocument("Item", event.target.dataset.id);
if (!item) {
return;
}
item.sheet.render(true);
}

async _onDeleteItem(event) {
event.preventDefault();
const itemId = event.target.dataset.id;
const item = this.actor.getEmbeddedDocument("Item", itemId);

new Dialog({
title: game.i18n.localize("EFS.Dialog.ActionConfirm"),
content: game.i18n.localize("EFS.Dialog.ConfirmDeletion")+"<b>"+item.name+"</b>?",
buttons: {
yes: {
label: game.i18n.localize("EFS.Dialog.Yes"),
callback: () => {this.actor.deleteEmbeddedDocuments("Item", [event.target.dataset.id])},
},
no: {
label: game.i18n.localize("EFS.Dialog.No"),
callback: () => {}
}
}
}).render(true);
}

async _onAddItem(event) {
event.preventDefault();
const items = await this.actor.createEmbeddedDocuments("Item", [{name:game.i18n.localize("EFS.Item.DefaultName"), type:"item"}])
await items[0].sheet.render(true);
}

getData(options) {
const context = super.getData(options);
context.data = this.actor._system;
context.items = this.actor.items;
return context;
}
}
101 changes: 3 additions & 98 deletions module/sheets/efs-character-sheet.js
Original file line number Diff line number Diff line change
@@ -1,33 +1,23 @@
import EFSCharacterExtraSheet from "./efs-character-extra-sheet.js";
import EFSBaseActorSheet from "./efs-base-actor-sheet.js";

export default class EFSCharacterSheet extends ActorSheet {
export default class EFSCharacterSheet extends EFSBaseActorSheet {
heroic = false;

static get defaultOptions() {
return mergeObject(super.defaultOptions, {
template: "systems/efs/templates/sheets/efs-character-sheet.html",
height: 500,
height: 830,
width: 750,
})
}

activateListeners(html) {
super.activateListeners(html)

html.find(".clickable.approach").click(this._approachClicked.bind(this));
html.find(".heroic-mode").click(this._heroicModeClicked.bind(this));
html.find(".clickable#extra").click(this._showExtra.bind(this));
html.find(".dp").change(this._dpClick.bind(this))

html.find(".skill-4").click(this._skill4Click.bind(this));
html.find(".skill-8").click(this._skill8Click.bind(this));
html.find(".skill-12").click(this._skill12Click.bind(this));
html.find(".skill-16").click(this._skill16Click.bind(this));

html.find(".edit-item").click(this._onEditItem.bind(this))
html.find(".delete-item").click(this._onDeleteItem.bind(this))
html.find(".add-item").click(this._onAddItem.bind(this))
html.find(".item").click(this._onClickItem.bind(this))
}

async _skill4Click(event) {
Expand Down Expand Up @@ -62,98 +52,13 @@ export default class EFSCharacterSheet extends ActorSheet {
});
}

async _onClickItem(event) {
event.preventDefault();
const itemId = event.target.dataset.id;
const item = this.actor.getEmbeddedDocument("Item", itemId);

let r = await new Roll(`1d`+item._system.dice).evaluate({async: true});
let message = "<b>"+game.i18n.localize("EFS.Message.ItemUsed").replace("{item}", item.name)+"</b>"

await r.toMessage({
flavor: message,
speaker: ChatMessage.getSpeaker({actor: this.actor})
});
}

_onEditItem(event) {
event.preventDefault();

const item = this.actor.getEmbeddedDocument("Item", event.target.dataset.id);
if (!item) {
return;
}
item.sheet.render(true);
}

async _onDeleteItem(event) {
event.preventDefault();
const itemId = event.target.dataset.id;
const item = this.actor.getEmbeddedDocument("Item", itemId);

new Dialog({
title: game.i18n.localize("EFS.Dialog.ActionConfirm"),
content: game.i18n.localize("EFS.Dialog.ConfirmDeletion")+"<b>"+item.name+"</b>?",
buttons: {
yes: {
label: game.i18n.localize("EFS.Dialog.Yes"),
callback: () => {this.actor.deleteEmbeddedDocuments("Item", [event.target.dataset.id])},
},
no: {
label: game.i18n.localize("EFS.Dialog.No"),
callback: () => {}
}
}
}).render(true);
}

async _onAddItem(event) {
event.preventDefault();
const items = await this.actor.createEmbeddedDocuments("Item", [{name:game.i18n.localize("EFS.Item.DefaultName"), type:"item"}])
await items[0].sheet.render(true);
}

async _showExtra(event) {
new EFSCharacterExtraSheet(this.actor).render(true);
}

_heroicModeClicked(event) {
event.preventDefault();

this.heroic = !this.heroic;
this.render(true);
}

async _dpClick(event) {
let set = event.target.checked;
let dp = !set ? +event.target.dataset.num : +event.target.dataset.num+1;

await this.actor.update({"system.dp.value": this.actor.system.dp.max - dp})
}

async _approachClicked(event) {
event.preventDefault();

const diceSteps = ["6", "8", "10", "12", "20"];

const id = event.currentTarget.id;
let diceSize = this.actor._system.approaches[id];
if (this.heroic) {
diceSize = diceSteps[diceSteps.indexOf(diceSize) + 1]
}
let r = await new Roll("1d" + diceSize).evaluate({async: true});

let heroMessage = game.i18n.localize("EFS.Message.Uses") + " <b>" + game.i18n.localize("EFS.Approaches." + id.charAt(0).toUpperCase() + id.slice(1)) + "</b> " + game.i18n.localize("EFS.Approaches.Singular").toLowerCase()
if (this.heroic) {
heroMessage = game.i18n.localize("EFS.Message.InHeroicMoment") + "<br/>" + heroMessage;
}

await r.toMessage({
flavor: heroMessage,
speaker: ChatMessage.getSpeaker({actor: this.actor})
});
}

getData(options) {
const context = super.getData(options);
context.actor = this.actor;
Expand Down
41 changes: 4 additions & 37 deletions module/sheets/efs-npc-sheet.js
Original file line number Diff line number Diff line change
@@ -1,49 +1,16 @@
import EFSCharacterExtraSheet from "./efs-character-extra-sheet.js";
import EFSBaseActorSheet from "./efs-base-actor-sheet.js";

export default class EFSNPCSheet extends ActorSheet {
export default class EFSNPCSheet extends EFSBaseActorSheet {
static get defaultOptions() {
return mergeObject(super.defaultOptions, {
template: "systems/efs/templates/sheets/efs-npc-sheet.html",
height: 230,
width: 435,
height: 830,
width: 750,
})
}

activateListeners(html) {
super.activateListeners(html)

html.find(".clickable.approach").click(this._approachClicked.bind(this));
html.find(".clickable#extra").click(this._showExtra.bind(this));
}

async _showExtra(event) {
new EFSCharacterExtraSheet(this.actor).render(true);
}

async _onSubmit(event, options) {
const formData = this._getSubmitData({});

formData["data.dp.value"] = formData["data.dp.max"] - formData["data.defeatPoints"]

options = options || {};
options.updateData = formData;
await super._onSubmit(event, options);
}

async _approachClicked(event) {
event.preventDefault();

const id = event.currentTarget.id;
const diceSize = this.actor._system.approaches[id];
let r = new Roll("1d" + diceSize);

await r.evaluate({async: true});

const heroMessage = game.i18n.localize("EFS.Message.Uses") + " <b>" + game.i18n.localize("EFS.Approaches.Action").toLowerCase()
await r.toMessage({
flavor: heroMessage,
speaker: ChatMessage.getSpeaker({actor: this.actor})
});
}

getData(options) {
Expand Down
3 changes: 3 additions & 0 deletions template.json
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,9 @@
"sixteen": ""
},
"extra": {
"attitude": "",
"opinion": "0",
"opinion_on_situation": "0",
"description": ""
}
}
Expand Down

0 comments on commit 64a6611

Please sign in to comment.