diff --git a/shared/turn.js b/shared/turn.js index d664a01..dcd8206 100644 --- a/shared/turn.js +++ b/shared/turn.js @@ -565,6 +565,7 @@ module.exports = { rollD20, formatInitMod, sortParticipantsByInitiative, + syncTurnOrder, computeTurnOrderAfterRemoval, computeTurnOrderAfterAddition, makeParticipant, diff --git a/src/App.js b/src/App.js index 05488e0..64934f5 100644 --- a/src/App.js +++ b/src/App.js @@ -47,7 +47,7 @@ if (typeof document !== 'undefined') { // ============================================================================ const APP_VERSION = 'v0.3'; -const { DEFAULT_MAX_HP, DEFAULT_INIT_MOD, MONSTER_DEFAULT_INIT_MOD, generateId, rollD20, formatInitMod, sortParticipantsByInitiative, computeTurnOrderAfterRemoval, computeTurnOrderAfterAddition } = shared; +const { DEFAULT_MAX_HP, DEFAULT_INIT_MOD, MONSTER_DEFAULT_INIT_MOD, generateId, rollD20, formatInitMod, sortParticipantsByInitiative, syncTurnOrder, computeTurnOrderAfterRemoval } = shared; const ROLL_DISPLAY_DURATION = 5000; const CONDITIONS = [ @@ -967,7 +967,10 @@ function ParticipantManager({ encounter, encounterPath, campaignCharacters }) { try { await storage.updateDoc(encounterPath, { participants: updatedParticipants, - ...computeTurnOrderAfterRemoval(encounter, itemToDelete.id, updatedParticipants) + ...(encounter.isStarted ? { + ...syncTurnOrder(updatedParticipants), + ...computeTurnOrderAfterRemoval(encounter, itemToDelete.id, updatedParticipants), + } : {}), }); logAction(`${itemToDelete.name} removed from encounter`, { encounterName: encounter.name }, deleteUndoData); } catch (err) { @@ -990,9 +993,15 @@ function ParticipantManager({ encounter, encounterPath, campaignCharacters }) { p.id === participantId ? { ...p, isActive: newIsActive } : p ); - const turnUpdates = newIsActive - ? computeTurnOrderAfterAddition(encounter, participantId) - : computeTurnOrderAfterRemoval(encounter, participantId, updatedParticipants); + // 1-list: stay in slot, flip isActive only. Sync turnOrderIds. Advance + // current only if deact hits current. + let turnUpdates = {}; + if (encounter.isStarted) { + turnUpdates = syncTurnOrder(updatedParticipants); + if (!newIsActive && encounter.currentTurnParticipantId === participantId) { + turnUpdates = { ...turnUpdates, ...computeTurnOrderAfterRemoval(encounter, participantId, updatedParticipants) }; + } + } try { await storage.updateDoc(encounterPath, { participants: updatedParticipants, ...turnUpdates }); @@ -1061,11 +1070,7 @@ function ParticipantManager({ encounter, encounterPath, campaignCharacters }) { return p; }); - const turnUpdates = (isDead && !wasDead) - ? computeTurnOrderAfterRemoval(encounter, participantId, updatedParticipants) - : wasResurrected - ? computeTurnOrderAfterAddition(encounter, participantId) - : {}; + const turnUpdates = {}; const hpUndoData = { encounterPath,