namespace SpaceGame.Api.Shared.Runtime; public enum SpatialNodeKind { Star, Planet, Moon, LagrangePoint, } public enum WorkStatus { Pending, Active, Blocked, Completed, Failed, Interrupted, } public enum OrderStatus { Queued, Active, Completed, Cancelled, Failed, Interrupted, } public enum AiPlanStatus { Planned, Running, Blocked, Completed, Failed, Interrupted, } public enum AiPlanStepStatus { Planned, Running, Blocked, Completed, Failed, Interrupted, } public enum AiPlanSourceKind { Rule, Order, DefaultBehavior, } 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, EngagingTarget, HoldingPosition, Fleeing, } public enum SpaceLayerKind { UniverseSpace, GalaxySpace, SystemSpace, LocalSpace, } 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 HoldPosition = "hold-position"; public const string Travel = "travel"; public const string FollowTarget = "follow-target"; public const string MineNode = "mine-node"; 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 TransferCargoToShip = "transfer-cargo-to-ship"; public const string SalvageWreck = "salvage-wreck"; public const string DeliverConstruction = "deliver-construction"; public const string ConstructModule = "construct-module"; public const string BuildConstructionSite = "build-construction-site"; public const string AttackTarget = "attack-target"; public const string Flee = "flee"; public const string Wait = "wait"; } public static class ShipOrderKinds { public const string Move = "move"; public const string DockAtStation = "dock-at-station"; public const string DockAndWait = "dock-and-wait"; public const string FlyAndWait = "fly-and-wait"; public const string FlyToObject = "fly-to-object"; public const string FollowShip = "follow-ship"; public const string TradeRoute = "trade-route"; public const string MineAndDeliver = "mine-and-deliver"; public const string BuildAtSite = "build-at-site"; public const string AttackTarget = "attack-target"; public const string HoldPosition = "hold-position"; public const string RepeatOrders = "repeat-orders"; public const string Flee = "flee"; } 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.Blocked => "blocked", WorkStatus.Completed => "completed", WorkStatus.Failed => "failed", WorkStatus.Interrupted => "interrupted", _ => throw new ArgumentOutOfRangeException(nameof(status), status, null), }; public static string ToContractValue(this OrderStatus status) => status switch { OrderStatus.Queued => "queued", OrderStatus.Active => "active", OrderStatus.Completed => "completed", OrderStatus.Cancelled => "cancelled", OrderStatus.Failed => "failed", OrderStatus.Interrupted => "interrupted", _ => throw new ArgumentOutOfRangeException(nameof(status), status, null), }; public static string ToContractValue(this AiPlanStatus status) => status switch { AiPlanStatus.Planned => "planned", AiPlanStatus.Running => "running", AiPlanStatus.Blocked => "blocked", AiPlanStatus.Completed => "completed", AiPlanStatus.Failed => "failed", AiPlanStatus.Interrupted => "interrupted", _ => throw new ArgumentOutOfRangeException(nameof(status), status, null), }; public static string ToContractValue(this AiPlanStepStatus status) => status switch { AiPlanStepStatus.Planned => "planned", AiPlanStepStatus.Running => "running", AiPlanStepStatus.Blocked => "blocked", AiPlanStepStatus.Completed => "completed", AiPlanStepStatus.Failed => "failed", AiPlanStepStatus.Interrupted => "interrupted", _ => throw new ArgumentOutOfRangeException(nameof(status), status, null), }; public static string ToContractValue(this AiPlanSourceKind kind) => kind switch { AiPlanSourceKind.Rule => "rule", AiPlanSourceKind.Order => "order", AiPlanSourceKind.DefaultBehavior => "default-behavior", _ => throw new ArgumentOutOfRangeException(nameof(kind), kind, 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", ShipState.EngagingTarget => "engaging-target", ShipState.HoldingPosition => "holding-position", ShipState.Fleeing => "fleeing", _ => throw new ArgumentOutOfRangeException(nameof(state), state, null), }; public static string ToContractValue(this SpaceLayerKind kind) => kind switch { SpaceLayerKind.UniverseSpace => "universe-space", SpaceLayerKind.GalaxySpace => "galaxy-space", SpaceLayerKind.SystemSpace => "system-space", SpaceLayerKind.LocalSpace => "local-space", _ => throw new ArgumentOutOfRangeException(nameof(kind), kind, null), }; }