From 64fd95c814653b428d8e7b8400ac7a3b56b45a8a Mon Sep 17 00:00:00 2001 From: Ender Date: Wed, 22 May 2024 18:59:51 +0200 Subject: [PATCH] Function for combat phase as character info --- source/index.ts | 41 ++++++++++++++++++--------- source/module/M5Base.ts | 1 + source/module/actors/M5Character.ts | 11 ++++++- source/style/Character-sheet.less | 13 ++++----- templates/sheets/character/combat.hbs | 6 ++-- 5 files changed, 48 insertions(+), 24 deletions(-) diff --git a/source/index.ts b/source/index.ts index 1f03f69..dcb564a 100644 --- a/source/index.ts +++ b/source/index.ts @@ -95,10 +95,7 @@ Hooks.on("getChatLogEntryContext", function (html, options) { ); }); -Hooks.on("createCombatant", async function () { - const test="Dritter Test"; - console.log("Test: ", test); - await (game as Game).combat.setFlag('world', 'Test', test); +Hooks.on("createCombatant", function () { }); Hooks.on("updateCombat", function (combat: Combat, updateData: { round: number; turn: number }, updateOptions: { advanceTime: number; direction: number }) { @@ -146,15 +143,8 @@ Hooks.on("updateCombat", function (combat: Combat, updateData: { round: number; }); Hooks.on("renderCombatTracker", (combatTracker, html, context) => { - if (context.combat === null) { - html.find("h3.encounter-title")[0].innerHTML = game["i18n"].localize("midgard5.no-encounter"); - } else if (Math.ceil(context.round / 2) === 0) { - html.find("h3.encounter-title")[0].innerHTML = game["i18n"].localize("midgard5.encounter-not-started"); - } else { - html.find("h3.encounter-title")[0].innerHTML = - (context.round % 2 == 1 ? game["i18n"].localize("midgard5.phase-movement") : game["i18n"].localize("midgard5.phase-action")) + " " + Math.ceil(context.round / 2); - } -}); + handleRenderCombatTracker(combatTracker, html, context); + }); Hooks.once("ready", () => { Logger.ok("Template module is now ready."); @@ -207,3 +197,28 @@ function limitHeal(heal: number, current: number, max: number): number { } return heal; } + +function handleRenderCombatTracker(combatTracker, html, context) { + let combatPhase = -1; + if (context.combat === null) { + combatPhase = 0; + html.find("h3.encounter-title")[0].innerHTML = game["i18n"].localize("midgard5.no-encounter"); + } else if (Math.ceil(context.round / 2) === 0) { + combatPhase = 1; + html.find("h3.encounter-title")[0].innerHTML = game["i18n"].localize("midgard5.encounter-not-started"); + } else if (context.round % 2 == 1) { + combatPhase = 2; + html.find("h3.encounter-title")[0].innerHTML = game["i18n"].localize("midgard5.phase-movement"); + } else { + combatPhase = 3; + html.find("h3.encounter-title")[0].innerHTML = game["i18n"].localize("midgard5.phase-action") + " " + Math.ceil(context.round / 2); + } + console.log("Combat Phase: ", combatPhase); + context.combat?.setFlag('world', 'combatPhase', combatPhase); + + for (const key in context.combat?.combatants.contents) { + let actorId = context.combat?.combatants.contents[key].actorId; + let actor = (game as Game).actors.get(actorId); + actor.render(); + } + } \ No newline at end of file diff --git a/source/module/M5Base.ts b/source/module/M5Base.ts index 385d793..6774503 100644 --- a/source/module/M5Base.ts +++ b/source/module/M5Base.ts @@ -170,6 +170,7 @@ export interface M5CharacterCalculatedData { reason: string; }; group: string; + combatPhase: number; movement: number; attributes: { st: M5AttributeCalculated; diff --git a/source/module/actors/M5Character.ts b/source/module/actors/M5Character.ts index afc7df0..a1b3f0e 100644 --- a/source/module/actors/M5Character.ts +++ b/source/module/actors/M5Character.ts @@ -156,6 +156,7 @@ export class M5Character extends Actor { ret.initiative = M5Character.initiativeFromAnfuehren(data.calc.skills?.general, (game as Game).i18n.localize("midgard5.anfuehren"), data.skills.general.anfuehren.fw); ret.unableToAct = M5Character.unableToActFromEffect(data.calc.gear?.effects); ret.group = M5Character.groupFromDisposition(this); + ret.combatPhase = M5Character.combatPhaseFromEncounter(this); ret.attributes.st.value = M5Character.attributeMinMax(data.attributes.st); // TODO item effects ret.attributes.gs.value = M5Character.attributeMinMax(data.attributes.gs); @@ -635,7 +636,7 @@ export class M5Character extends Actor { } static groupFromDisposition(actor: any): string { - console.log("Group:", actor); + // console.log("Group:", actor); let disposition:number = 0; if (actor.isToken) { disposition = actor.token.disposition; @@ -651,6 +652,14 @@ export class M5Character extends Actor { } } + static combatPhaseFromEncounter(actor: any): any { + if (actor.inCombat) { + let combatPhase = (game as Game).combat.getFlag('world', 'combatPhase'); + return combatPhase ? combatPhase : -1; + } + return -1; + } + static readonly defenseThreshold: Array<[number, number]> = [ [30, 18], [25, 17], diff --git a/source/style/Character-sheet.less b/source/style/Character-sheet.less index df3343f..4f37d0e 100644 --- a/source/style/Character-sheet.less +++ b/source/style/Character-sheet.less @@ -5,8 +5,8 @@ .midgard5 { .flexbox { display: flex; - flex-direction: row; align-items: stretch; + flex-direction: row; flex-wrap: wrap; } @@ -16,31 +16,31 @@ } .flexcolumn-1 { - flex-basis: 99%; + flex-basis: 100%; flex-wrap: wrap; flex-direction: column; } .flexcolumn-2 { - flex-basis: 49%; + flex-basis: 50%; flex-wrap: wrap; flex-direction: column; } .flexcolumn-3 { - flex-basis: 32%; + flex-basis: 33%; flex-wrap: wrap; flex-direction: column; } .flexcolumn-4 { - flex-basis: 24%; + flex-basis: 25%; flex-wrap: wrap; flex-direction: column; } .flexcolumn-5 { - flex-basis: 19%; + flex-basis: 20%; flex-wrap: wrap; flex-direction: column; } @@ -69,7 +69,6 @@ } .flexrow { - align-items: center; flex-direction: row; } diff --git a/templates/sheets/character/combat.hbs b/templates/sheets/character/combat.hbs index 6c0450a..12ef062 100644 --- a/templates/sheets/character/combat.hbs +++ b/templates/sheets/character/combat.hbs @@ -1,6 +1,6 @@

{{localize "midgard5.combatPhases"}}

-
-
+
+
{{localize "midgard5.initiative"}}

@@ -68,7 +68,7 @@
-
+
{{localize "midgard5.phase-action"}}