namespace ProjectM.Simulation { /// /// Shared tick helpers for the project-wide convention that a stored raw "next tick" value of 0 means /// "ready / nothing pending". A computed absolute tick (ServerTick + delay) can legitimately equal 0 at /// wraparound, which would be misread as "ready"; coerces it to 1 (a /// 1-tick error only at the single wrap instant). Mirrors the guard already inlined in /// , applied consistently at every cooldown/spawn "next tick" write /// (AbilityCooldown.NextFireTick, EnemyAttackCooldown.NextAttackTick, /// EnemySpawner.NextSpawnTick). /// public static class TickUtil { /// Coerce a computed raw tick of 0 to 1 so it never collides with the "0 = ready" sentinel. public static uint NonZero(uint tick) => tick == 0u ? 1u : tick; } }