2710d680b4
GymSub bakes no WaveDirector (why sandbox enemies never spawned); the sandbox's combat target is now a TargetDummyTag'd enemy ghost all five EnemyAISystem passes exclude (planted; knockback stamps inert), spawned at player+3m with 400 HP by an editor-only scene-gated server system, dying through the normal Dying path and respawning 1.5s after the corpse. EnemyTag-reuse audited: sandbox-only by design (cleared-checks would count it elsewhere). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
15 lines
1003 B
C#
15 lines
1003 B
C#
using Unity.Entities;
|
|
|
|
namespace ProjectM.Simulation
|
|
{
|
|
/// <summary>07-20 sandbox combat testing: marks a server-spawned enemy ghost as a PLANTED target dummy —
|
|
/// every EnemyAISystem pass excludes it (no move, no attack, no knockback integration, no depenetration
|
|
/// nudge), so it stands at its anchor and just takes hits. Server-only (runtime-added at spawn, never
|
|
/// replicated); the client sees a normal interpolated enemy, so health bars, hit flash, damage, kill pop
|
|
/// and the death path all exercise the REAL pipeline. Spawned + respawned by TargetDummySpawnSystem in the
|
|
/// DevSandbox (GymSub bakes no WaveDirector — the sandbox's combat target is this dummy, by design).
|
|
/// ★ EnemyTag-reuse audit (CLAUDE.md): cleave/projectile damage MUST see it (the point); AI passes exclude
|
|
/// it; wave/room cleared-checks would count it — acceptable ONLY because the spawner is sandbox-gated.</summary>
|
|
public struct TargetDummyTag : IComponentData { }
|
|
}
|