Files
kronic e362aaeb43 Import art/VFX asset packs + game-feel systems; normalize texture extensions to lowercase for LFS
Add BefourStudios SciFi environment packs, Gabriel Aguiar VFX, and the
ShaderCrew Toon Shader embedded packages, plus combat/enemy/wave/death
gameplay systems and supporting vault docs/screenshots.

Rename 11 vendor textures from uppercase .PNG/.HDR to lowercase so the
case-sensitive Git LFS filters (*.png/*.hdr) match on case-sensitive
filesystems (Linux CI, case-sensitive macOS), not just locally where
core.ignorecase=true masks the gap. Each .meta moved with its asset so
GUID references are preserved. All ~1000 binaries tracked via LFS.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-02 22:50:43 -07:00

47 lines
1.4 KiB
C#

using NUnit.Framework;
using ProjectM.Simulation;
namespace ProjectM.Tests
{
/// <summary>
/// Pure-function tests for <see cref="RespawnMath"/> (no ECS world), mirroring PlayerSpawnRingTests /
/// EnemyAIMathTests. Pins the deterministic player respawn-timer math.
/// </summary>
public class RespawnMathTests
{
[Test]
public void RespawnTick_AddsDelay()
{
Assert.AreEqual(1180u, RespawnMath.RespawnTick(1000u, 180));
}
[Test]
public void RespawnTick_ClampsDelayToAtLeastOne()
{
Assert.AreEqual(1001u, RespawnMath.RespawnTick(1000u, 0));
Assert.AreEqual(1001u, RespawnMath.RespawnTick(1000u, -5));
}
[Test]
public void RespawnTick_NeverReturnsZeroSentinel()
{
// A death exactly at tick 0 must still schedule a non-zero recovery tick.
Assert.AreNotEqual(0u, RespawnMath.RespawnTick(0u, 1));
}
[Test]
public void IsDue_FalseBefore_TrueAtOrAfter()
{
Assert.IsFalse(RespawnMath.IsDue(1100u, 1180u));
Assert.IsTrue(RespawnMath.IsDue(1180u, 1180u));
Assert.IsTrue(RespawnMath.IsDue(1200u, 1180u));
}
[Test]
public void IsDue_FalseWhenNoneScheduled()
{
Assert.IsFalse(RespawnMath.IsDue(99999u, 0u));
}
}
}