import type { TimedCombatEffect } from "./combatStore"; /** The final periodic tick is the moment the displayed aura expires. */ export function timedEffectExpiresAt(effect: TimedCombatEffect): number { return effect.nextTickAt + Math.max(0, effect.remainingTicks - 1) * effect.intervalMs; } export function timedEffectRemainingMs(effect: TimedCombatEffect, now: number): number { return Math.max(0, timedEffectExpiresAt(effect) - now); } /** Compact MMO-style countdown: whole seconds, then tenths for the last 10 seconds. */ export function formatTimedEffectTimer(remainingMs: number): string { const safeRemaining = Math.max(0, Number.isFinite(remainingMs) ? remainingMs : 0); const seconds = safeRemaining / 1_000; if (seconds >= 60) { const roundedSeconds = Math.ceil(seconds); const minutes = Math.floor(roundedSeconds / 60); return `${minutes}:${String(roundedSeconds % 60).padStart(2, "0")}`; } if (seconds >= 10) return String(Math.ceil(seconds)); return seconds.toFixed(1); }