using Unity.Mathematics;
namespace ProjectM.Simulation
{
///
/// Pure, deterministic wave-size math — no RNG state, no wall-clock — so a wave is reproducible across
/// restarts/saves and EditMode-unit-testable without an ECS world (mirrors ).
///
/// HISTORY (2026-08-07 audit purge): this class used to carry a 4-kind weighted composition
/// (Grunt/Charger/Spitter/Swarmer) driven by a MixBands struct. The Charger/Spitter/Swarmer authoring
/// components were on ZERO prefabs, so LungeState/SpitterState/SwarmerTag were never baked and every
/// branch of that math resolved to Grunt at runtime — the escalation curve was inert while 734 lines of
/// green tests certified it. The composition layer was deleted; the LANTERN bestiary (Drowner, Grindylow,
/// Wrecker, Wisp-Choir) will reintroduce variety through the CreatureKit path, not through this file.
/// Recover the old version from git if the weighted-slot model is wanted again.
///
public static class ZoneEnemyMath
{
/// The single enemy kind. Directors index a per-Kind prefab buffer by this byte; kept as a
/// byte (not an enum) because EnemyAISystem is Bursted and cross-assembly enums trip Burst.
public const byte KindGrunt = 0;
///
/// Total enemies in this wave: plus one extra per epoch beyond the first
/// (a gentle ramp). Lower-bounded at 1 so an occupied arena always has a fight.
/// is the monotonic wave counter (>=1 in practice). Pure integer math; Burst-safe.
///
public static int WaveSize(int epoch, int baseCount)
{
int e = math.max(1, epoch);
return math.max(1, math.max(0, baseCount) + (e - 1));
}
}
}