foundryvtt-beam-saber/module/actor-sheet.js
Peter Varaksin 88779566d7 Changes
- Adds Turfs
- Adds TODO
- Adds BladesHelpers static class with helpers
2020-04-24 18:30:51 +03:00

145 lines
3.8 KiB
JavaScript

/**
* Extend the basic ActorSheet with some very simple modifications
* @extends {ActorSheet}
*/
export class BladesActorSheet extends ActorSheet {
/** @override */
static get defaultOptions() {
return mergeObject(super.defaultOptions, {
classes: ["blades-in-the-dark", "sheet", "actor"],
template: "systems/blades-in-the-dark/templates/actor-sheet.html",
width: 700,
height: 970
});
}
/* -------------------------------------------- */
/** @override */
getData() {
const data = super.getData();
// Calculate Load
let loadout = 0;
data.items.forEach(i => {loadout += (i.type === "item") ? parseInt(i.data.load) : 0});
data.data.loadout = loadout;
console.log("DATA");
console.log(data);
return data;
}
/* -------------------------------------------- */
/** @override */
activateListeners(html) {
super.activateListeners(html);
// // Activate tabs
// let tabs = html.find('.tabs');
// let initial = this._sheetTab;
// new Tabs(tabs, {
// initial: initial,
// callback: clicked => this._sheetTab = clicked.data("tab")
// });
// Everything below here is only needed if the sheet is editable
if (!this.options.editable) return;
// Update Inventory Item
html.find('.item-body').click(ev => {
const element = $(ev.currentTarget).parents(".item");
const item = this.actor.getOwnedItem(element.data("itemId"));
item.sheet.render(true);
});
// Delete Inventory Item
html.find('.item-delete').click(ev => {
const element = $(ev.currentTarget).parents(".item");
this.actor.deleteOwnedItem(element.data("itemId"));
element.slideUp(200, () => this.render(false));
});
}
/* -------------------------------------------- */
/** @override */
_updateObject(event, formData) {
// Handle the free-form attributes list
// const formAttrs = expandObject(formData).data.attributes || {};
// const attributes = Object.values(formAttrs).reduce((obj, v) => {
// let k = v["key"].trim();
// if ( /[\s\.]/.test(k) ) return ui.notifications.error("Attribute keys may not contain spaces or periods");
// delete v["key"];
// obj[k] = v;
// return obj;
// }, {});
// // Remove attributes which are no longer used
// for ( let k of Object.keys(this.object.data.data.attributes) ) {
// if ( !attributes.hasOwnProperty(k) ) attributes[`-=${k}`] = null;
// }
// // Re-combine formData
// formData = Object.entries(formData).filter(e => !e[0].startsWith("data.attributes")).reduce((obj, e) => {
// obj[e[0]] = e[1];
// return obj;
// }, {_id: this.object._id, "data.attributes": attributes});
// Update the Actor
return this.object.update(formData);
}
/** override */
_getFormData(form) {
const FD = BladesHelpers.getFormDataHelper(form, this.editors);
return FD;
}
/* -------------------------------------------- */
/** @override */
async _onDrop (event) {
event.preventDefault();
// Get dropped data
let data;
let item;
try {
data = JSON.parse(event.dataTransfer.getData('text/plain'));
} catch (err) {
return false;
}
// Add only Items.
if (data.type === "Item") {
// Import from Compendium
if (data.pack) {
const pack = game.packs.find(p => p.collection === data.pack);
await pack.getEntity(data.id).then(ent => {
item = ent;
});
}
// Get from Items list.
else {
// Class must be distinct.
item = game.items.get(data.id);
}
if (item) {
const actor = this.actor;
BladesHelpers.removeDuplicatedItemType(item.data.type, actor);
}
// Call parent on drop logic
return super._onDrop(event);
}
}
/* -------------------------------------------- */
}