e362aaeb43
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>
47 lines
1.4 KiB
C#
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));
|
|
}
|
|
}
|
|
}
|