foundryvtt-beam-saber/module/actor-sheet.js

145 lines
3.8 KiB
JavaScript
Raw Normal View History

2020-04-17 21:23:57 +00:00
/**
* Extend the basic ActorSheet with some very simple modifications
* @extends {ActorSheet}
*/
2020-04-17 21:48:29 +00:00
export class BladesActorSheet extends ActorSheet {
2020-04-17 21:23:57 +00:00
/** @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",
2020-04-23 16:11:04 +00:00
width: 700,
height: 970
2020-04-17 21:23:57 +00:00
});
}
/* -------------------------------------------- */
/** @override */
getData() {
const data = super.getData();
2020-04-23 16:11:04 +00:00
// Calculate Load
let loadout = 0;
data.items.forEach(i => {loadout += (i.type === "item") ? parseInt(i.data.load) : 0});
data.data.loadout = loadout;
2020-04-17 21:23:57 +00:00
console.log("DATA");
console.log(data);
return data;
}
/* -------------------------------------------- */
/** @override */
activateListeners(html) {
super.activateListeners(html);
2020-04-21 16:06:33 +00:00
// // Activate tabs
// let tabs = html.find('.tabs');
// let initial = this._sheetTab;
// new Tabs(tabs, {
// initial: initial,
// callback: clicked => this._sheetTab = clicked.data("tab")
// });
2020-04-17 21:23:57 +00:00
// Everything below here is only needed if the sheet is editable
if (!this.options.editable) return;
// Update Inventory Item
2020-04-21 16:06:33 +00:00
html.find('.item-body').click(ev => {
const element = $(ev.currentTarget).parents(".item");
const item = this.actor.getOwnedItem(element.data("itemId"));
2020-04-17 21:23:57 +00:00
item.sheet.render(true);
});
// Delete Inventory Item
html.find('.item-delete').click(ev => {
2020-04-21 16:06:33 +00:00
const element = $(ev.currentTarget).parents(".item");
this.actor.deleteOwnedItem(element.data("itemId"));
2020-04-22 07:57:36 +00:00
element.slideUp(200, () => this.render(false));
2020-04-17 21:23:57 +00:00
});
}
/* -------------------------------------------- */
/** @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);
}
2020-04-17 21:48:29 +00:00
/** override */
2020-04-17 21:48:29 +00:00
_getFormData(form) {
const FD = BladesHelpers.getFormDataHelper(form, this.editors);
2020-04-17 21:48:29 +00:00
return FD;
}
2020-04-21 16:06:33 +00:00
/* -------------------------------------------- */
/** @override */
async _onDrop (event) {
event.preventDefault();
// Get dropped data
let data;
2020-04-22 07:57:36 +00:00
let item;
2020-04-21 16:06:33 +00:00
try {
data = JSON.parse(event.dataTransfer.getData('text/plain'));
} catch (err) {
return false;
}
2020-04-22 07:57:36 +00:00
// Add only Items.
2020-04-21 16:06:33 +00:00
if (data.type === "Item") {
2020-04-22 07:57:36 +00:00
// 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;
2020-04-21 16:06:33 +00:00
});
}
2020-04-22 07:57:36 +00:00
// 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);
2020-04-22 07:57:36 +00:00
}
// Call parent on drop logic
return super._onDrop(event);
2020-04-21 16:06:33 +00:00
}
}
/* -------------------------------------------- */
2020-04-17 21:23:57 +00:00
}