Combat tracker fixes
This commit is contained in:
@@ -72,11 +72,17 @@ export class Hero6Combat extends Combat {
|
||||
/* -------------------------------------------- */
|
||||
computeInitiative(c, updList) {
|
||||
let id = c._id || c.id
|
||||
if (c.actor.hasPhase(this.segmentNumber) || c.actor.getHoldAction()) {
|
||||
let hasSegment = c.actor.hasPhase(this.segmentNumber)
|
||||
let isOnHold = c.actor.isOnHold()
|
||||
if (hasSegment || isOnHold) {
|
||||
let baseInit = c.actor ? c.actor.getBaseInit() : 0;
|
||||
let name = c.actor.name
|
||||
if (c.actor.getHoldAction()) {
|
||||
name = c.actor.name + " (H)"
|
||||
if (isOnHold) {
|
||||
if (hasSegment) { // On hold + current segment -> auto-disable on hold
|
||||
c.actor.disableHoldAction()
|
||||
} else {
|
||||
name = c.actor.name + " (H)"
|
||||
}
|
||||
}
|
||||
if (c.actor.getAbortAction()) {
|
||||
name = c.actor.name + " (A)"
|
||||
@@ -112,46 +118,63 @@ export class Hero6Combat extends Combat {
|
||||
for (let c of this.combatants) {
|
||||
this.computeInitiative(c, updList)
|
||||
}
|
||||
console.log(this.combatants, updList)
|
||||
if (updList.length > 0) {
|
||||
await this.updateEmbeddedDocuments("Combatant", updList);
|
||||
console.log("Rebuild INIT", updList)
|
||||
for(let c of updList) {
|
||||
if ( c.initiative != 0) {
|
||||
return true
|
||||
}
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
nextRound() {
|
||||
async nextRound() {
|
||||
let hasCombatants = false
|
||||
let nextRound = this.round
|
||||
let advanceTime = 0
|
||||
let turn = this.turn === null ? null : 0; // Preserve the fact that it's no-one's turn currently.
|
||||
if (this.settings.skipDefeated && (turn !== null)) {
|
||||
turn = this.turns.findIndex(t => !t.isDefeated);
|
||||
if (turn === -1) {
|
||||
ui.notifications.warn("COMBAT.NoneRemaining", { localize: true });
|
||||
turn = 0;
|
||||
}
|
||||
}
|
||||
let advanceTime = Math.max(this.turns.length - this.turn, 0) * CONFIG.time.turnTime;
|
||||
advanceTime += CONFIG.time.roundTime;
|
||||
let nextRound = this.round + 1;
|
||||
|
||||
let turnData = this.getFlag("world", "hero6-turn-data")
|
||||
if (!turnData) {
|
||||
turnData = { turnNumber: 0, segmentNumber: 12 }
|
||||
this.setFlag("world", "hero6-turn-data", turnData)
|
||||
}
|
||||
turnData = duplicate(turnData)
|
||||
turnData.segmentNumber += 1
|
||||
if (turnData.segmentNumber > 12) {
|
||||
turnData.segmentNumber = 1
|
||||
turnData.turnNumber++
|
||||
}
|
||||
this.setFlag("world", "hero6-turn-data", turnData)
|
||||
this.turnNumber = turnData.turnNumber;
|
||||
this.segmentNumber = turnData.segmentNumber;
|
||||
|
||||
console.log("Next round called....", nextRound, turnData)
|
||||
while (!hasCombatants) {
|
||||
turn = turn; // Preserve the fact that it's no-one's turn currently.
|
||||
if (this.settings.skipDefeated && (turn !== null)) {
|
||||
turn = this.turns.findIndex(t => !t.isDefeated);
|
||||
if (turn === -1) {
|
||||
ui.notifications.warn("COMBAT.NoneRemaining", { localize: true });
|
||||
turn = 0;
|
||||
}
|
||||
}
|
||||
advanceTime = Math.max(this.turns.length - this.turn, 0) * CONFIG.time.turnTime;
|
||||
advanceTime += CONFIG.time.roundTime;
|
||||
nextRound = nextRound + 1;
|
||||
console.log("Next round called....2", nextRound, turnData)
|
||||
turnData = this.getFlag("world", "hero6-turn-data")
|
||||
if (!turnData) {
|
||||
turnData = { turnNumber: 0, segmentNumber: 12 }
|
||||
this.setFlag("world", "hero6-turn-data", turnData)
|
||||
}
|
||||
turnData = duplicate(turnData)
|
||||
turnData.segmentNumber += 1
|
||||
if (turnData.segmentNumber > 12) {
|
||||
turnData.segmentNumber = 1
|
||||
turnData.turnNumber++
|
||||
}
|
||||
await this.setFlag("world", "hero6-turn-data", turnData)
|
||||
this.turnNumber = turnData.turnNumber;
|
||||
this.segmentNumber = turnData.segmentNumber;
|
||||
console.log("Next round called....3", nextRound, turnData)
|
||||
|
||||
// Re-compute init of actors
|
||||
this.rebuildInitiative()
|
||||
// Re-compute init of actors
|
||||
hasCombatants = await this.rebuildInitiative()
|
||||
console.log("Going round....", nextRound, hasCombatants)
|
||||
}
|
||||
|
||||
// Update the document, passing data through a hook first
|
||||
const updateData = { round: nextRound, turn, segmentNumber: turnData.segmentNumber, turnNumber: turnData.turnNumber };
|
||||
const updateData = { round: nextRound, turn: turn, segmentNumber: turnData.segmentNumber, turnNumber: turnData.turnNumber };
|
||||
const updateOptions = { advanceTime, direction: 1 };
|
||||
Hooks.callAll("combatRound", this, updateData, updateOptions);
|
||||
return this.update(updateData, updateOptions);
|
||||
|
||||
Reference in New Issue
Block a user