Factoring

This commit is contained in:
Vlyan
2021-07-02 09:56:16 +02:00
parent de449ab58e
commit 043d7442e9
3 changed files with 115 additions and 129 deletions

View File

@@ -171,7 +171,28 @@ export class BaseSheetL5r5e extends ActorSheet {
// Check item type and subtype // Check item type and subtype
const item = await game.l5r5e.HelpersL5r5e.getDragnDropTargetObject(event); const item = await game.l5r5e.HelpersL5r5e.getDragnDropTargetObject(event);
if (!item || item.documentName !== "Item" || item.data.type === "property") { if (!item || !["Item", "JournalEntry"].includes(item.documentName) || item.data.type === "property") {
return;
}
// Specific curriculum journal drop
if (item.documentName === "JournalEntry") {
// npc does not have this
if (!this.actor.data.data.identity?.school_curriculum_journal) {
return;
}
this.actor.data.data.identity.school_curriculum_journal = {
id: item.data._id,
name: item.data.name,
pack: item.pack || null,
};
await this.actor.update({
data: {
identity: {
school_curriculum_journal: this.actor.data.data.identity.school_curriculum_journal,
},
},
});
return; return;
} }
@@ -513,6 +534,9 @@ export class BaseSheetL5r5e extends ActorSheet {
* @private * @private
*/ */
_switchSubItemCurriculum(event) { _switchSubItemCurriculum(event) {
event.preventDefault();
event.stopPropagation();
const itemId = $(event.currentTarget).data("item-id"); const itemId = $(event.currentTarget).data("item-id");
const item = this.actor.items.get(itemId); const item = this.actor.items.get(itemId);
if (item.type !== "item") { if (item.type !== "item") {

View File

@@ -40,8 +40,8 @@ export class CharacterSheetL5r5e extends BaseSheetL5r5e {
/** /**
* Commons datas * Commons datas
*/ */
getData() { getData(options = {}) {
const sheetData = super.getData(); const sheetData = super.getData(options);
// Min rank = 1 // Min rank = 1
this.actor.data.data.identity.school_rank = Math.max(1, this.actor.data.data.identity.school_rank); this.actor.data.data.identity.school_rank = Math.max(1, this.actor.data.data.identity.school_rank);
@@ -75,25 +75,12 @@ export class CharacterSheetL5r5e extends BaseSheetL5r5e {
return; return;
} }
// *** Items : curriculum management *** // Open linked school curriculum journal
html.find(`.item-curriculum`).on("click", (event) => { html.find(".school-journal-link").on("click", this._openLinkedJournal.bind(this));
event.preventDefault();
event.stopPropagation(); // Curriculum management
this._switchSubItemCurriculum(event); html.find(".item-curriculum").on("click", this._switchSubItemCurriculum.bind(this));
}); html.find("button[name=validate-curriculum]").on("click", this._actorAddOneToRank.bind(this));
html.find(`button[name=validate-curriculum]`).on("click", (event) => {
event.preventDefault();
event.stopPropagation();
this.actor.data.data.identity.school_rank = this.actor.data.data.identity.school_rank + 1;
this.actor.update({
data: {
identity: {
school_rank: this.actor.data.data.identity.school_rank,
},
},
});
this.render(false);
});
// Money +/- // Money +/-
html.find(".money-control").on("click", this._modifyMoney.bind(this)); html.find(".money-control").on("click", this._modifyMoney.bind(this));
@@ -103,81 +90,6 @@ export class CharacterSheetL5r5e extends BaseSheetL5r5e {
this._tabs this._tabs
.find((e) => e._navSelector === ".advancements-tabs") .find((e) => e._navSelector === ".advancements-tabs")
.activate("advancement_rank_" + (this.actor.data.data.identity.school_rank || 0)); .activate("advancement_rank_" + (this.actor.data.data.identity.school_rank || 0));
// Open linked school curriculum journal
html.find(`.school-journal-link`).on("click", async (event) => {
event.preventDefault();
event.stopPropagation();
const actorJournal = this.actor.data.data.identity.school_curriculum_journal;
const journal = await this._getJournal(actorJournal.id, actorJournal.pack);
if (journal) {
journal.sheet.render(true);
}
});
}
/**
* Handle dropped data on the Actor sheet
* @param {DragEvent} event
*/
async _onDrop(event) {
// *** Everything below here is only needed if the sheet is editable ***
if (!this.options.editable) {
return;
}
// Curriculum Journal
const json = event.dataTransfer.getData("text/plain");
if (!json) {
return;
}
const data = JSON.parse(json);
if (data.type !== "JournalEntry") {
return super._onDrop(event);
}
const journal = await this._getJournal(data.id, data.pack);
if (!journal) {
return;
}
this.actor.data.data.identity.school_curriculum_journal = {
id: journal.data._id,
name: journal.data.name,
pack: data.pack || null,
};
await this.actor.update({
data: {
identity: {
school_curriculum_journal: this.actor.data.data.identity.school_curriculum_journal,
},
},
});
}
/**
* Return the Journal in Pack or in World
* @param id
* @param pack
* @return {Promise<game.l5r5e.JournalL5r5e>}
* @private
*/
async _getJournal(id, pack = null) {
let journal;
if (pack) {
// Compendium
journal = await game.packs.get(pack)?.getDocument(id);
} else {
// World
journal = game.journal.get(id);
}
if (!journal || !(journal instanceof game.l5r5e.JournalL5r5e) || !journal.data?._id) {
return;
}
return journal;
} }
/** /**
@@ -319,4 +231,48 @@ export class CharacterSheetL5r5e extends BaseSheetL5r5e {
}); });
this.render(false); this.render(false);
} }
/**
* Add +1 to actor school rank
* @param {Event} event
* @private
*/
async _actorAddOneToRank(event) {
event.preventDefault();
event.stopPropagation();
this.actor.data.data.identity.school_rank = this.actor.data.data.identity.school_rank + 1;
await this.actor.update({
data: {
identity: {
school_rank: this.actor.data.data.identity.school_rank,
},
},
});
this.render(false);
}
/**
* Open the linked school curriculum journal
* @param {Event} event
* @private
*/
async _openLinkedJournal(event) {
event.preventDefault();
event.stopPropagation();
const actorJournal = this.actor.data.data.identity.school_curriculum_journal;
if (!actorJournal.id) {
return;
}
const journal = await game.l5r5e.HelpersL5r5e.getObjectGameOrPack({
id: actorJournal.id,
pack: actorJournal.pack,
type: "JournalEntry",
});
if (journal) {
journal.sheet.render(true);
}
}
} }

View File

@@ -1,5 +1,3 @@
import { ItemL5r5e } from "./item.js";
/** /**
* Extends the actor to process special things from L5R. * Extends the actor to process special things from L5R.
*/ */
@@ -94,7 +92,7 @@ export class HelpersL5r5e {
try { try {
// Direct Object // Direct Object
if (data?._id) { if (data?._id) {
document = HelpersL5r5e.createItemFromCompendium(data); document = HelpersL5r5e.createDocumentFromCompendium({ type, data });
} else if (!id || !type) { } else if (!id || !type) {
return null; return null;
} }
@@ -109,7 +107,7 @@ export class HelpersL5r5e {
if (pack) { if (pack) {
const data = await game.packs.get(pack).getDocument(id); const data = await game.packs.get(pack).getDocument(id);
if (data) { if (data) {
document = HelpersL5r5e.createItemFromCompendium(data); document = HelpersL5r5e.createDocumentFromCompendium({ type, data });
} }
} }
} }
@@ -130,7 +128,7 @@ export class HelpersL5r5e {
const data = await comp.getDocument(id); const data = await comp.getDocument(id);
if (data) { if (data) {
document = HelpersL5r5e.createItemFromCompendium(data); document = HelpersL5r5e.createDocumentFromCompendium({ type, data });
} }
} }
} }
@@ -153,35 +151,35 @@ export class HelpersL5r5e {
/** /**
* Make a temporary item for compendium drag n drop * Make a temporary item for compendium drag n drop
* @param {ItemL5r5e|any[]} data * @param {string} type
* @param {ItemL5r5e|JournalL5r5e|any[]} data
* @return {ItemL5r5e} * @return {ItemL5r5e}
*/ */
static createItemFromCompendium(data) { static createDocumentFromCompendium({ type, data }) {
if ( let document = null;
![
"item",
"armor",
"weapon",
"technique",
"property",
"peculiarity",
"advancement",
"title",
"bond",
"signature_scroll",
"item_pattern",
].includes(data.type)
) {
return data;
}
let document; switch (type) {
if (data instanceof ItemL5r5e) { case "Item":
if (data instanceof game.l5r5e.ItemL5r5e) {
document = data; document = data;
} else { } else {
// Quick object document = new game.l5r5e.ItemL5r5e(data);
document = new ItemL5r5e(data);
} }
break;
case "JournalEntry":
if (data instanceof game.l5r5e.JournalL5r5e) {
document = data;
} else {
document = new game.l5r5e.JournalL5r5e(data);
}
break;
default:
console.log(`L5R5E | createObjectFromCompendium - Unmanaged type ${type}`);
break;
} // swi
return document; return document;
} }
@@ -191,7 +189,7 @@ export class HelpersL5r5e {
* @return {Promise<void>} * @return {Promise<void>}
*/ */
static async refreshItemProperties(document) { static async refreshItemProperties(document) {
if (document.data.data.properties && typeof Babele !== "undefined") { if (document.data?.data?.properties && typeof Babele !== "undefined") {
document.data.data.properties = await Promise.all( document.data.data.properties = await Promise.all(
document.data.data.properties.map(async (property) => { document.data.data.properties.map(async (property) => {
const gameProp = await HelpersL5r5e.getObjectGameOrPack({ id: property.id, type: "Item" }); const gameProp = await HelpersL5r5e.getObjectGameOrPack({ id: property.id, type: "Item" });
@@ -243,6 +241,8 @@ export class HelpersL5r5e {
*/ */
static getPackNameForCoreItem(documentId) { static getPackNameForCoreItem(documentId) {
const core = new Map(); const core = new Map();
// Items
core.set("Pro", "l5r5e.core-properties"); core.set("Pro", "l5r5e.core-properties");
core.set("Kat", "l5r5e.core-techniques-kata"); core.set("Kat", "l5r5e.core-techniques-kata");
core.set("Kih", "l5r5e.core-techniques-kiho"); core.set("Kih", "l5r5e.core-techniques-kiho");
@@ -265,6 +265,12 @@ export class HelpersL5r5e {
core.set("Pas", "l5r5e.core-peculiarities-passions"); core.set("Pas", "l5r5e.core-peculiarities-passions");
core.set("Adv", "l5r5e.core-peculiarities-adversities"); core.set("Adv", "l5r5e.core-peculiarities-adversities");
core.set("Anx", "l5r5e.core-peculiarities-anxieties"); core.set("Anx", "l5r5e.core-peculiarities-anxieties");
// Journal
core.set("Csc", "l5r5e.core-journal-school-curriculum");
core.set("Con", "l5r5e.core-journal-conditions");
core.set("Ter", "l5r5e.core-journal-terrain-qualities");
return core.get(documentId.replace(/L5RCore(\w{3})\d+/gi, "$1")); return core.get(documentId.replace(/L5RCore(\w{3})\d+/gi, "$1"));
} }