working on some parts of Sheets

This commit is contained in:
Vlyan
2020-12-15 19:30:01 +01:00
parent 971c33321e
commit bee3be183e
28 changed files with 546 additions and 334 deletions

View File

@@ -1,6 +1,10 @@
import { BaseSheetL5r5e } from "./base-sheet.js";
import { TwentyQuestionsDialog } from "./twenty-questions-dialog.js";
export class ActorSheetL5r5e extends ActorSheet {
/**
* Actor / Character Sheet
*/
export class ActorSheetL5r5e extends BaseSheetL5r5e {
static get defaultOptions() {
return mergeObject(super.defaultOptions, {
classes: ["l5r5e", "sheet", "actor"],
@@ -20,7 +24,7 @@ export class ActorSheetL5r5e extends ActorSheet {
let buttons = super._getHeaderButtons();
buttons.unshift({
label: "20Q", // TODO localization
label: game.i18n.localize("l5r5e.twenty_questions.bt_abrev"),
class: "twenty-questions",
icon: "fas fa-graduation-cap",
onclick: async () => {
@@ -30,139 +34,4 @@ export class ActorSheetL5r5e extends ActorSheet {
return buttons;
}
getData() {
const sheetData = super.getData();
this._prepareItems(sheetData);
const feats = sheetData.items.filter((item) => item.type === "feat");
sheetData.data.feats = feats;
return sheetData;
}
/**
* Update the actor.
* @param event
* @param formData
*/
_updateObject(event, formData) {
return this.object.update(formData);
}
/**
* Prepare item data to be displayed in the actor sheet.
* @param sheetData Data of the actor been displayed in the sheet.
*/
_prepareItems(sheetData) {
for (let item of sheetData.items) {
switch (item.type) {
case "weapon":
item.isWeapon = true;
item.isEquipment = true;
break;
case "armor":
item.isArmor = true;
item.isEquipment = true;
break;
case "feat":
item.isFeat = true;
break;
default:
item.isEquipment = true;
break;
}
}
}
_prepareFeats() {}
/**
* Subscribe to events from the sheet.
* @param html HTML content of the sheet.
*/
activateListeners(html) {
super.activateListeners(html);
// Everything below here is only needed if the sheet is editable
if (!this.options.editable) return;
// Update Inventory Item
html.find(".item-edit").on("click", (ev) => {
const li = $(ev.currentTarget).parents(".item");
const itemId = li.data("itemId");
const item = this.actor.getOwnedItem(itemId);
item.sheet.render(true);
});
// Delete Inventory Item
html.find(".item-delete").on("click", (ev) => {
const li = $(ev.currentTarget).parents(".item");
const itemId = li.data("itemId");
this.actor.deleteOwnedItem(itemId);
});
html.find(".feat-add").on("click", (ev) => {
this._createFeat();
});
html.find(".feat-delete").on("click", (ev) => {
const li = $(ev.currentTarget).parents(".feat");
const featId = li.data("featId");
console.log("Remove feat" + featId + " clicked");
this.actor.deleteOwnedItem(featId);
});
html.find(".feat-edit").on("click", (ev) => {
const li = $(ev.currentTarget).parents(".feat");
const featId = li.data("featId");
const feat = this.actor.getOwnedItem(featId);
feat.sheet.render(true);
});
html.find(".skill-name").on("click", (ev) => {
const li = $(ev.currentTarget).parents(".skill");
const skillId = li.data("skill");
this._onSkillClicked(skillId);
});
html.find(".acquisition-add").on("click", (ev) => {
this._createFeat();
});
}
/**
* Creates a new feat for the character and shows a window to edit it.
*/
async _createFeat() {
const data = {
name: game.i18n.localize("l5r5e.featplaceholdername"),
type: "feat",
};
const created = await this.actor.createEmbeddedEntity("OwnedItem", data);
const feat = this.actor.getOwnedItem(created._id);
// Default values
//feat.rank = 1;
//feat.xp_used = 0;
feat.sheet.render(true);
return feat;
}
/**
* React to a skill from the skills list been clicked.
* @param {string} skillId Unique ID of the skill been clicked.
*/
async _onSkillClicked(skillId) {
new game.l5r5e.DicePickerDialog({ skillId: skillId, actor: this.actor }).render(true);
}
}

View File

@@ -0,0 +1,153 @@
/**
* Base Sheet for Actor and Npc
*/
export class BaseSheetL5r5e extends ActorSheet {
/**
* Commons datas
*/
getData() {
const sheetData = super.getData();
this._prepareItems(sheetData);
const feats = sheetData.items.filter((item) => item.type === "feat");
sheetData.data.feats = feats;
sheetData.data.stances = CONFIG.L5r5e.stances;
return sheetData;
}
/**
* Update the actor.
* @param event
* @param formData
*/
_updateObject(event, formData) {
return this.object.update(formData);
}
/**
* Prepare item data to be displayed in the actor sheet.
* @param sheetData Data of the actor been displayed in the sheet.
*/
_prepareItems(sheetData) {
for (let item of sheetData.items) {
switch (item.type) {
case "weapon":
item.isWeapon = true;
item.isEquipment = true;
break;
case "armor":
item.isArmor = true;
item.isEquipment = true;
break;
case "feat":
item.isFeat = true;
break;
case "quality":
item.isQuality = true;
break;
case "xp-advancement":
item.isXpAdvancement = true;
break;
default:
item.isEquipment = true;
break;
}
}
}
/**
* TODO
*/
_prepareFeats() {}
/**
* Subscribe to events from the sheet.
* @param html HTML content of the sheet.
*/
activateListeners(html) {
super.activateListeners(html);
// Everything below here is only needed if the sheet is editable
if (!this.options.editable) {
return;
}
// Update Inventory Item
html.find(".item-edit").on("click", (ev) => {
const li = $(ev.currentTarget).parents(".item");
const itemId = li.data("itemId");
const item = this.actor.getOwnedItem(itemId);
item.sheet.render(true);
});
// Delete Inventory Item
html.find(".item-delete").on("click", (ev) => {
const li = $(ev.currentTarget).parents(".item");
this.actor.deleteOwnedItem(li.data("itemId"));
});
html.find(".feat-add").on("click", (ev) => {
this._createFeat();
});
html.find(".feat-delete").on("click", (ev) => {
const li = $(ev.currentTarget).parents(".feat");
const featId = li.data("featId");
console.log("Remove feat" + featId + " clicked");
this.actor.deleteOwnedItem(featId);
});
html.find(".feat-edit").on("click", (ev) => {
const li = $(ev.currentTarget).parents(".feat");
const featId = li.data("featId");
const feat = this.actor.getOwnedItem(featId);
feat.sheet.render(true);
});
html.find(".skill-name").on("click", (ev) => {
const li = $(ev.currentTarget).parents(".skill");
this._onSkillClicked(li.data("skill"));
});
html.find(".acquisition-add").on("click", (ev) => {
this._createFeat();
});
}
/**
* Creates a new feat for the character and shows a window to edit it.
*/
async _createFeat() {
const data = {
name: game.i18n.localize("l5r5e.featplaceholdername"),
type: "feat",
};
const created = await this.actor.createEmbeddedEntity("OwnedItem", data);
const feat = this.actor.getOwnedItem(created._id);
// Default values
//feat.rank = 1;
//feat.xp_used = 0;
feat.sheet.render(true);
return feat;
}
/**
* React to a skill from the skills list been clicked.
* @param {string} skillId Unique ID of the skill been clicked.
*/
async _onSkillClicked(skillId) {
new game.l5r5e.DicePickerDialog({ skillId: skillId, actor: this.actor }).render(true);
}
}

View File

@@ -1,5 +1,9 @@
// TODO extend ActorSheetL5r5e ?
export class NpcSheetL5r5e extends ActorSheet {
import { BaseSheetL5r5e } from "./base-sheet.js";
/**
* NPC Sheet
*/
export class NpcSheetL5r5e extends BaseSheetL5r5e {
static types = ["minion", "adversary"];
static get defaultOptions() {
@@ -18,133 +22,8 @@ export class NpcSheetL5r5e extends ActorSheet {
this._prepareItems(sheetData);
sheetData.data.feats = sheetData.items.filter((item) => item.type === "feat");
sheetData.data.types = NpcSheetL5r5e.types;
sheetData.data.stances = CONFIG.L5r5e.stances;
return sheetData;
}
/**
* Update the actor.
* @param event
* @param formData
*/
_updateObject(event, formData) {
return this.object.update(formData);
}
/**
* Prepare item data to be displayed in the actor sheet.
* @param sheetData Data of the actor been displayed in the sheet.
*/
_prepareItems(sheetData) {
for (let item of sheetData.items) {
switch (item.type) {
case "weapon":
item.isWeapon = true;
item.isEquipment = true;
break;
case "armor":
item.isArmor = true;
item.isEquipment = true;
break;
case "feat":
item.isFeat = true;
break;
default:
item.isEquipment = true;
break;
}
}
}
_prepareFeats() {}
/**
* Subscribe to events from the sheet.
* @param html HTML content of the sheet.
*/
activateListeners(html) {
super.activateListeners(html);
// Everything below here is only needed if the sheet is editable
if (!this.options.editable) return;
// Update Inventory Item
html.find(".item-edit").on("click", (ev) => {
const li = $(ev.currentTarget).parents(".item");
const itemId = li.data("itemId");
const item = this.actor.getOwnedItem(itemId);
item.sheet.render(true);
});
// Delete Inventory Item
html.find(".item-delete").on("click", (ev) => {
const li = $(ev.currentTarget).parents(".item");
const itemId = li.data("itemId");
this.actor.deleteOwnedItem(itemId);
});
html.find(".feat-add").on("click", (ev) => {
this._createFeat();
});
html.find(".feat-delete").on("click", (ev) => {
const li = $(ev.currentTarget).parents(".feat");
const featId = li.data("featId");
console.log("Remove feat" + featId + " clicked");
this.actor.deleteOwnedItem(featId);
});
html.find(".feat-edit").on("click", (ev) => {
const li = $(ev.currentTarget).parents(".feat");
const featId = li.data("featId");
const feat = this.actor.getOwnedItem(featId);
feat.sheet.render(true);
});
html.find(".skill-name").on("click", (ev) => {
const li = $(ev.currentTarget).parents(".skill");
const skillId = li.data("skill");
this._onSkillClicked(skillId);
});
html.find(".acquisition-add").on("click", (ev) => {
this._createFeat();
});
}
/**
* Creates a new feat for the character and shows a window to edit it.
*/
async _createFeat() {
const data = {
name: game.i18n.localize("l5r5e.featplaceholdername"),
type: "feat",
};
const created = await this.actor.createEmbeddedEntity("OwnedItem", data);
const feat = this.actor.getOwnedItem(created._id);
// Default values
//feat.rank = 1;
//feat.xp_used = 0;
feat.sheet.render(true);
return feat;
}
/**
* React to a skill from the skills list been clicked.
* @param {string} skillId Unique ID of the skill been clicked.
*/
async _onSkillClicked(skillId) {
new game.l5r5e.DicePickerDialog({ skillId: skillId, actor: this.actor }).render(true);
}
}

View File

@@ -44,6 +44,7 @@ export class TwentyQuestionsDialog extends FormApplication {
...super.getData(options),
elementsList: this._getElements(),
skillsList: this._getSkills(),
featsList: CONFIG.L5r5e.feats,
actor: this.actor.data.data,
};
}
@@ -96,13 +97,13 @@ export class TwentyQuestionsDialog extends FormApplication {
actorTmp.social.glory = formData.step2_social_glory;
actorTmp.identity.school = formData.step3_school;
actorTmp.identity.roles = formData.step3_roles;
// actorTmp = formData.step3_tech_kata;
// actorTmp = formData.step3_tech_kiho;
// actorTmp = formData.step3_tech_invocations;
// actorTmp = formData.step3_tech_rituals;
// actorTmp = formData.step3_tech_shuji;
// actorTmp = formData.step3_tech_maho;
// actorTmp = formData.step3_tech_ninjutsu;
// actorTmp = formData.step3_feat_kata;
// actorTmp = formData.step3_feat_kiho;
// actorTmp = formData.step3_feat_invocations;
// actorTmp = formData.step3_feat_rituals;
// actorTmp = formData.step3_feat_shuji;
// actorTmp = formData.step3_feat_maho;
// actorTmp = formData.step3_feat_ninjutsu;
// actorTmp = formData.step3_feats;
// actorTmp = formData.step3_school_ability;
// actorTmp = formData.step3_equipment;