namespace SpaceGame.Api.Shared.Runtime; public enum SpatialNodeKind { Star, Planet, Moon, LagrangePoint, } public enum WorkStatus { Pending, Active, Completed, } public enum OrderStatus { Queued, Accepted, Completed, } public enum ShipState { Idle, Arriving, LocalFlight, SpoolingWarp, Warping, SpoolingFtl, Ftl, CargoFull, MiningApproach, Mining, NodeDepleted, AwaitingDock, DockingApproach, Docking, Docked, Transferring, Loading, Unloading, WaitingMaterials, ConstructionBlocked, Constructing, DeliveringConstruction, Blocked, Undocking, } public enum ControllerTaskKind { Idle, Travel, Extract, Dock, Load, Unload, DeliverConstruction, BuildConstructionSite, ConstructModule, Undock, } public static class SpaceLayerKinds { public const string UniverseSpace = "universe-space"; public const string GalaxySpace = "galaxy-space"; public const string SystemSpace = "system-space"; public const string LocalSpace = "local-space"; } public static class MovementRegimeKinds { public const string LocalFlight = "local-flight"; public const string Warp = "warp"; public const string StargateTransit = "stargate-transit"; public const string FtlTransit = "ftl-transit"; } public static class CommanderKind { public const string Faction = "faction"; public const string Station = "station"; public const string Ship = "ship"; public const string Fleet = "fleet"; public const string Sector = "sector"; public const string TaskGroup = "task-group"; } public static class ShipTaskKinds { public const string Idle = "idle"; public const string LocalMove = "local-move"; public const string WarpToNode = "warp-to-node"; public const string UseStargate = "use-stargate"; public const string UseFtl = "use-ftl"; public const string Dock = "dock"; public const string Undock = "undock"; public const string LoadCargo = "load-cargo"; public const string UnloadCargo = "unload-cargo"; public const string MineNode = "mine-node"; public const string HarvestGas = "harvest-gas"; public const string DeliverToStation = "deliver-to-station"; public const string ClaimLagrangePoint = "claim-lagrange-point"; public const string BuildConstructionSite = "build-construction-site"; public const string EscortTarget = "escort-target"; public const string AttackTarget = "attack-target"; public const string DefendCelestial = "defend-celestial"; public const string Retreat = "retreat"; public const string HoldPosition = "hold-position"; } public static class ShipOrderKinds { public const string DirectMove = "direct-move"; public const string TravelToNode = "travel-to-node"; public const string DockAtStation = "dock-at-station"; public const string DeliverCargo = "deliver-cargo"; public const string BuildAtSite = "build-at-site"; public const string AttackTarget = "attack-target"; public const string HoldPosition = "hold-position"; } public static class ClaimStateKinds { public const string Placed = "placed"; public const string Activating = "activating"; public const string Active = "active"; public const string Destroyed = "destroyed"; } public static class ConstructionSiteStateKinds { public const string Planned = "planned"; public const string Active = "active"; public const string Paused = "paused"; public const string Completed = "completed"; public const string Destroyed = "destroyed"; } public static class MarketOrderKinds { public const string Buy = "buy"; public const string Sell = "sell"; } public static class MarketOrderStateKinds { public const string Open = "open"; public const string PartiallyFilled = "partially-filled"; public const string Filled = "filled"; public const string Cancelled = "cancelled"; } public static class SimulationEnumMappings { public static string ToContractValue(this SpatialNodeKind kind) => kind switch { SpatialNodeKind.Star => "star", SpatialNodeKind.Planet => "planet", SpatialNodeKind.Moon => "moon", SpatialNodeKind.LagrangePoint => "lagrange-point", _ => throw new ArgumentOutOfRangeException(nameof(kind), kind, null), }; public static string ToContractValue(this WorkStatus status) => status switch { WorkStatus.Pending => "pending", WorkStatus.Active => "active", WorkStatus.Completed => "completed", _ => throw new ArgumentOutOfRangeException(nameof(status), status, null), }; public static string ToContractValue(this OrderStatus status) => status switch { OrderStatus.Queued => "queued", OrderStatus.Accepted => "accepted", OrderStatus.Completed => "completed", _ => throw new ArgumentOutOfRangeException(nameof(status), status, null), }; public static string ToContractValue(this ShipState state) => state switch { ShipState.Idle => "idle", ShipState.Arriving => "arriving", ShipState.LocalFlight => "local-flight", ShipState.SpoolingWarp => "spooling-warp", ShipState.Warping => "warping", ShipState.SpoolingFtl => "spooling-ftl", ShipState.Ftl => "ftl", ShipState.CargoFull => "cargo-full", ShipState.MiningApproach => "mining-approach", ShipState.Mining => "mining", ShipState.NodeDepleted => "node-depleted", ShipState.AwaitingDock => "awaiting-dock", ShipState.DockingApproach => "docking-approach", ShipState.Docking => "docking", ShipState.Docked => "docked", ShipState.Transferring => "transferring", ShipState.Loading => "loading", ShipState.Unloading => "unloading", ShipState.WaitingMaterials => "waiting-materials", ShipState.ConstructionBlocked => "construction-blocked", ShipState.Constructing => "constructing", ShipState.DeliveringConstruction => "delivering-construction", ShipState.Blocked => "blocked", ShipState.Undocking => "undocking", _ => throw new ArgumentOutOfRangeException(nameof(state), state, null), }; public static string ToContractValue(this ControllerTaskKind kind) => kind switch { ControllerTaskKind.Idle => "idle", ControllerTaskKind.Travel => "travel", ControllerTaskKind.Extract => "extract", ControllerTaskKind.Dock => "dock", ControllerTaskKind.Load => "load", ControllerTaskKind.Unload => "unload", ControllerTaskKind.DeliverConstruction => "deliver-construction", ControllerTaskKind.BuildConstructionSite => "build-construction-site", ControllerTaskKind.ConstructModule => "construct-module", ControllerTaskKind.Undock => "undock", _ => throw new ArgumentOutOfRangeException(nameof(kind), kind, null), }; }