Function for combat phase as character info

This commit is contained in:
Ender 2024-05-22 18:59:51 +02:00
parent 976cd83a04
commit 64fd95c814
5 changed files with 48 additions and 24 deletions

View File

@ -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,14 +143,7 @@ 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", () => {
@ -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();
}
}

View File

@ -170,6 +170,7 @@ export interface M5CharacterCalculatedData {
reason: string;
};
group: string;
combatPhase: number;
movement: number;
attributes: {
st: M5AttributeCalculated;

View File

@ -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],

View File

@ -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;
}

View File

@ -1,6 +1,6 @@
<h3>{{localize "midgard5.combatPhases"}}</h3>
<div class="flexbox">
<div class="flexcolumn-2 flexpart">
<div class="flexbox flexpart">
<div class="flexcolumn-2 flexpart" style="flex: 1 1 200px;">
<div class="flexpart-header"><img src="icons/magic/time/arrows-circling-pink.webp" class="flexpart-icon">{{localize "midgard5.initiative"}}</div>
<br>
<div class="flexrow">
@ -68,7 +68,7 @@
</div>
</div>
<div class="flexcolumn-2 flexpart">
<div class="flexcolumn-2 flexpart" style="flex: 1 1 200px;">
<div class="flexpart-header"><img src="icons/magic/time/arrows-circling-pink.webp" class="flexpart-icon">{{localize "midgard5.phase-action"}}</div>
<br>
<div class="flexrow">