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;
}
}