ENH: Better init formatting

master
U~man 2020-07-10 21:30:27 +02:00
parent 30f68727dc
commit ddeb26bd8a
2 changed files with 65 additions and 45 deletions

View File

@ -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"
? '<i class="fas fa-weight-hanging"></i>'
: 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"]');
$('<a class="combat-control" data-control="reroll"><i class="fas fa-dice"></i></a>').insertBefore(trash);
let trash = html.find(
'.encounters .combat-control[data-control="endCombat"]'
);
$(
'<a class="combat-control" data-control="reroll"><i class="fas fa-dice"></i></a>'
).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 });
});
}

View File

@ -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' ? '<i class="fas fa-weight-hanging"></i>' : 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) => {