From 783a49713a7dd82c4ecc4a3424c15053cafbbc76 Mon Sep 17 00:00:00 2001 From: Vlyan Date: Fri, 25 Mar 2022 09:44:48 +0100 Subject: [PATCH] Army sheet : Image and token now follow the commander's on drop. --- CHANGELOG.md | 2 ++ system/scripts/actors/army-sheet.js | 42 ++++++++++++++++++----------- 2 files changed, 28 insertions(+), 16 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f587bfb..4c5ac45 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,8 @@ - This is random by design, don't expect clan logic in values. - PC sheet : - Added collapsible skill group. +- Army sheet : + - Image and token now follow the commander's on drop. - PC/NPC sheet : - Added a volatile storage to keep collapsible (Skills/Inventory) in theirs state on sheet update. - Added the ability for technique with a skill set, to open the DicePicker with presets values. diff --git a/system/scripts/actors/army-sheet.js b/system/scripts/actors/army-sheet.js index be05909..c2b5962 100644 --- a/system/scripts/actors/army-sheet.js +++ b/system/scripts/actors/army-sheet.js @@ -34,7 +34,7 @@ export class ArmySheetL5r5e extends BaseSheetL5r5e { if (data.commander_actor_id) { const commander = game.actors.get(data.commander_actor_id); if (commander) { - this._updateLinkedActorData("commander", commander); + this._updateLinkedActorData("commander", commander, true); } else { this._removeLinkedActorData("commander"); } @@ -42,7 +42,7 @@ export class ArmySheetL5r5e extends BaseSheetL5r5e { if (data.warlord_actor_id) { const warlord = game.actors.get(data.warlord_actor_id); if (warlord) { - this._updateLinkedActorData("warlord", warlord); + this._updateLinkedActorData("warlord", warlord, true); } else { this._removeLinkedActorData("warlord"); } @@ -196,7 +196,7 @@ export class ArmySheetL5r5e extends BaseSheetL5r5e { } const droppedActor = await game.l5r5e.HelpersL5r5e.getDragnDropTargetObject(event); - return this._updateLinkedActorData(type, droppedActor); + return this._updateLinkedActorData(type, droppedActor, false); } /** @@ -219,39 +219,49 @@ export class ArmySheetL5r5e extends BaseSheetL5r5e { /** * Update actor datas for this army sheet - * @param {string} type commander|warlord - * @param {ActorL5r5e} actor actor object + * @param {string} type commander|warlord + * @param {ActorL5r5e} actor actor object + * @param {boolean} isInit If it's initialization process * @return {Promise} * @private */ - async _updateLinkedActorData(type, actor) { + async _updateLinkedActorData(type, actor, isInit = false) { if (!actor || actor.documentName !== "Actor" || !actor.isCharacter) { console.warn("L5R5E | Wrong actor type", actor?.data?.type, actor); return; } + const actorPath = `${CONFIG.l5r5e.paths.assets}icons/actors/`; const actorData = {}; switch (type) { case "commander": - actorData.commander = actor.data.name; - actorData.commander_actor_id = actor.data._id; - actorData.commander_standing = { - honor: actor.data.data.social.honor, - glory: actor.data.data.social.glory, - status: actor.data.data.social.status, - }; + actorData["data.commander"] = actor.data.name; + actorData["data.commander_actor_id"] = actor.data._id; + actorData["data.commander_standing.honor"] = actor.data.data.social.honor; + actorData["data.commander_standing.glory"] = actor.data.data.social.glory; + actorData["data.commander_standing.status"] = actor.data.data.social.status; + + // Replace the image by commander's image + if ( + !isInit && + this.actor.data.img !== actor.data.img && + ![`${actorPath}character.svg`, `${actorPath}npc.svg`].includes(actor.data.img) + ) { + actorData["img"] = actor.data.img; + actorData["token.img"] = actor.data.token.img; + } break; case "warlord": - actorData.warlord = actor.data.name; - actorData.warlord_actor_id = actor.data._id; + actorData["data.warlord"] = actor.data.name; + actorData["data.warlord_actor_id"] = actor.data._id; break; default: console.warn("L5R5E | Unknown type", type); return; } - return this.actor.update({ data: actorData }); + return this.actor.update(actorData); } /**