diff --git a/src/module/combat.js b/src/module/combat.js index 172b633..30f7d94 100644 --- a/src/module/combat.js +++ b/src/module/combat.js @@ -4,40 +4,58 @@ export class OseCombat { data.combatants = []; let groups = {}; combat.data.combatants.forEach((cbt) => { - groups[cbt.flags.ose.group] = {present: true}; + groups[cbt.flags.ose.group] = { present: true }; data.combatants.push(cbt); }); - + // Roll init Object.keys(groups).forEach((group) => { - let roll = new Roll("1d6").roll(); - roll.toMessage({flavor: `${CONFIG.OSE.colors[group]} group rolls initiative`}); - groups[group].initiative = roll.total; - }) - + let roll = new Roll("1d6").roll(); + roll.toMessage({ + flavor: `${CONFIG.OSE.colors[group]} group rolls initiative`, + }); + groups[group].initiative = roll.total; + }); + // Set init for (let i = 0; i < data.combatants.length; ++i) { - if (data.combatants[i].actor.data.data.isSlow) { - data.combatants[i].initiative = -789; - } else { - data.combatants[i].initiative = groups[data.combatants[i].flags.ose.group].initiative; - } + if (data.combatants[i].actor.data.data.isSlow) { + data.combatants[i].initiative = -789; + } else { + data.combatants[i].initiative = + groups[data.combatants[i].flags.ose.group].initiative; + } } } static individualInitiative(combat, data) { let ids = []; - combat.data.combatants.forEach(cbt => { + combat.data.combatants.forEach((cbt) => { ids.push(cbt._id); - }) + }); combat.rollInitiative(ids); } static format(object, html, user) { + html.find(".initiative").each((_, span) => { + span.innerHTML = + span.innerHTML == "-789.00" + ? '' + : span.innerHTML; + }); + let init = game.settings.get("ose", "individualInit"); + if (init) { + return; + } + html.find('.combat-control[data-control="rollNPC"]').remove(); html.find('.combat-control[data-control="rollAll"]').remove(); - let trash = html.find('.encounters .combat-control[data-control="endCombat"]'); - $('').insertBefore(trash); + let trash = html.find( + '.encounters .combat-control[data-control="endCombat"]' + ); + $( + '' + ).insertBefore(trash); html.find(".combatant").each((_, ct) => { // Can't roll individual inits @@ -56,6 +74,31 @@ export class OseCombat { OseCombat.addListeners(html); } + static updateCombatant(combat, combatant, data) { + let init = game.settings.get("ose", "individualInit"); + // Why do you reroll ? + if (combatant.actor.data.data.isSlow) { + data.initiative = -789; + return; + } + if (data.initiative && !init) { + let groupInit = data.initiative; + // Check if there are any members of the group with init + combat.combatants.forEach((ct) => { + if ( + ct.initiative && + ct.initiative != "-789.00" && + ct._id != data._id && + ct.flags.ose.group == combatant.flags.ose.group + ) { + groupInit = ct.initiative; + // Set init + data.initiative = parseInt(groupInit); + } + }); + } + } + static addListeners(html) { // Cycle through colors html.find(".combatant-control.flag").click((ev) => { @@ -74,10 +117,10 @@ export class OseCombat { }); }); - html.find('.combat-control[data-control="reroll"]').click(ev => { + html.find('.combat-control[data-control="reroll"]').click((ev) => { let data = {}; OseCombat.rollInitiative(game.combat, data); - game.combat.update({data: data}); + game.combat.update({ data: data }); }); } diff --git a/src/ose.js b/src/ose.js index 9b1532c..925c393 100644 --- a/src/ose.js +++ b/src/ose.js @@ -84,7 +84,7 @@ Hooks.on("renderSidebarTab", async (object, html) => { const rendered = await renderTemplate(template); html.find(".game-system").append(rendered); } -}) +}); Hooks.on("preCreateCombatant", (combat, data, options, id) => { let init = game.settings.get("ose", "individualInit"); @@ -93,35 +93,12 @@ Hooks.on("preCreateCombatant", (combat, data, options, id) => { } }); -Hooks.on("preUpdateCombatant", (combat, combatant, data, diff, id) => { - let init = game.settings.get("ose", "individualInit"); - if (data.initiative && !init) { - let groupInit = data.initiative; - combat.combatants.forEach((ct) => { - if ( - ct.initiative && - ct._id != data._id && - ct.flags.ose.group == combatant.flags.ose.group - ) { - groupInit = ct.initiative; - data.initiative = parseInt(groupInit); - } - }); - } else if (data.initiative && init) { - if (combatant.actor.data.data.isSlow) { - data.initiative = -789; - } - } +Hooks.on("preUpdateCombatant", (combat, combatant, data) => { + OseCombat.updateCombatant(combat, combatant, data); }); Hooks.on("renderCombatTracker", (object, html, data) => { - html.find('.initiative').each((_, span) => { - span.innerHTML = span.innerHTML == '-789.00' ? '' : span.innerHTML; - }) - let init = game.settings.get("ose", "individualInit"); - if (!init) { - OseCombat.format(object, html, data); - } + OseCombat.format(object, html, data); }); Hooks.on("preUpdateCombat", async (combat, data, diff, id) => {