ENH: Better init formatting
parent
30f68727dc
commit
ddeb26bd8a
|
|
@ -4,40 +4,58 @@ export class OseCombat {
|
||||||
data.combatants = [];
|
data.combatants = [];
|
||||||
let groups = {};
|
let groups = {};
|
||||||
combat.data.combatants.forEach((cbt) => {
|
combat.data.combatants.forEach((cbt) => {
|
||||||
groups[cbt.flags.ose.group] = {present: true};
|
groups[cbt.flags.ose.group] = { present: true };
|
||||||
data.combatants.push(cbt);
|
data.combatants.push(cbt);
|
||||||
});
|
});
|
||||||
|
|
||||||
// Roll init
|
// Roll init
|
||||||
Object.keys(groups).forEach((group) => {
|
Object.keys(groups).forEach((group) => {
|
||||||
let roll = new Roll("1d6").roll();
|
let roll = new Roll("1d6").roll();
|
||||||
roll.toMessage({flavor: `${CONFIG.OSE.colors[group]} group rolls initiative`});
|
roll.toMessage({
|
||||||
groups[group].initiative = roll.total;
|
flavor: `${CONFIG.OSE.colors[group]} group rolls initiative`,
|
||||||
})
|
});
|
||||||
|
groups[group].initiative = roll.total;
|
||||||
|
});
|
||||||
|
|
||||||
// Set init
|
// Set init
|
||||||
for (let i = 0; i < data.combatants.length; ++i) {
|
for (let i = 0; i < data.combatants.length; ++i) {
|
||||||
if (data.combatants[i].actor.data.data.isSlow) {
|
if (data.combatants[i].actor.data.data.isSlow) {
|
||||||
data.combatants[i].initiative = -789;
|
data.combatants[i].initiative = -789;
|
||||||
} else {
|
} else {
|
||||||
data.combatants[i].initiative = groups[data.combatants[i].flags.ose.group].initiative;
|
data.combatants[i].initiative =
|
||||||
}
|
groups[data.combatants[i].flags.ose.group].initiative;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static individualInitiative(combat, data) {
|
static individualInitiative(combat, data) {
|
||||||
let ids = [];
|
let ids = [];
|
||||||
combat.data.combatants.forEach(cbt => {
|
combat.data.combatants.forEach((cbt) => {
|
||||||
ids.push(cbt._id);
|
ids.push(cbt._id);
|
||||||
})
|
});
|
||||||
combat.rollInitiative(ids);
|
combat.rollInitiative(ids);
|
||||||
}
|
}
|
||||||
|
|
||||||
static format(object, html, user) {
|
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="rollNPC"]').remove();
|
||||||
html.find('.combat-control[data-control="rollAll"]').remove();
|
html.find('.combat-control[data-control="rollAll"]').remove();
|
||||||
let trash = html.find('.encounters .combat-control[data-control="endCombat"]');
|
let trash = html.find(
|
||||||
$('<a class="combat-control" data-control="reroll"><i class="fas fa-dice"></i></a>').insertBefore(trash);
|
'.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) => {
|
html.find(".combatant").each((_, ct) => {
|
||||||
// Can't roll individual inits
|
// Can't roll individual inits
|
||||||
|
|
@ -56,6 +74,31 @@ export class OseCombat {
|
||||||
OseCombat.addListeners(html);
|
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) {
|
static addListeners(html) {
|
||||||
// Cycle through colors
|
// Cycle through colors
|
||||||
html.find(".combatant-control.flag").click((ev) => {
|
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 = {};
|
let data = {};
|
||||||
OseCombat.rollInitiative(game.combat, data);
|
OseCombat.rollInitiative(game.combat, data);
|
||||||
game.combat.update({data: data});
|
game.combat.update({ data: data });
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
31
src/ose.js
31
src/ose.js
|
|
@ -84,7 +84,7 @@ Hooks.on("renderSidebarTab", async (object, html) => {
|
||||||
const rendered = await renderTemplate(template);
|
const rendered = await renderTemplate(template);
|
||||||
html.find(".game-system").append(rendered);
|
html.find(".game-system").append(rendered);
|
||||||
}
|
}
|
||||||
})
|
});
|
||||||
|
|
||||||
Hooks.on("preCreateCombatant", (combat, data, options, id) => {
|
Hooks.on("preCreateCombatant", (combat, data, options, id) => {
|
||||||
let init = game.settings.get("ose", "individualInit");
|
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) => {
|
Hooks.on("preUpdateCombatant", (combat, combatant, data) => {
|
||||||
let init = game.settings.get("ose", "individualInit");
|
OseCombat.updateCombatant(combat, combatant, data);
|
||||||
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("renderCombatTracker", (object, html, data) => {
|
Hooks.on("renderCombatTracker", (object, html, data) => {
|
||||||
html.find('.initiative').each((_, span) => {
|
OseCombat.format(object, html, data);
|
||||||
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);
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
Hooks.on("preUpdateCombat", async (combat, data, diff, id) => {
|
Hooks.on("preUpdateCombat", async (combat, data, diff, id) => {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue