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
|
|
|
|
2020-04-24 15:30:51 +00:00
|
|
|
/** override */
|
2020-04-17 21:48:29 +00:00
|
|
|
_getFormData(form) {
|
2020-04-24 15:30:51 +00:00
|
|
|
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) {
|
2020-04-24 15:30:51 +00:00
|
|
|
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
|
|
|
}
|