using Unity.Entities; using Unity.NetCode; namespace ProjectM.Simulation { // NOTE (LANTERN purge): CycleState/CyclePhase/CycleRuntime (the Calm↔Siege macro-loop) are DELETED. // ExpeditionObjective below is the surviving replicated room-objective readout (live consumers: // RoomEnemyDirectorSystem writes it; RunDirectorSystem/HudSystem read it). /// /// DR-042 C7b — a SMALL replicated summary of the current expedition objective so the client HUD can show an /// "enemies remaining / cleared — return to claim" readout. Rides the GLOBAL UNTAGGED director ghost so /// GhostRelevancy.SetIsIrrelevant never hides it /// cross-region — a base teammate can't see the expedition's own (region-tagged, relevancy-hidden) enemy /// ghosts. SOLE writer: ZoneEnemyDirectorSystem (server, plain group), written ABOVE its early-returns /// (snapshot-above-early-return) so the readout never freezes stale. byte/short, never enum (writer is [BurstCompile]). /// public struct ExpeditionObjective : IComponentData { /// 0 = Idle (no sortie active), 1 = Active (wave in progress), 2 = Cleared (return to claim). [GhostField] public byte State; /// Live zone enemies remaining (alive + not-yet-spawned) while Active; 0 when Idle/Cleared. [GhostField] public short Remaining; } /// State constants for (byte, not enum — Burst/serialization). public static class ExpeditionObjectiveState { public const byte Idle = 0; public const byte Active = 1; public const byte Cleared = 2; } }