381 lines
12 KiB
C#
381 lines
12 KiB
C#
namespace SpaceGame.Api.Shared.Runtime;
|
|
|
|
public enum SpatialNodeKind
|
|
{
|
|
Star,
|
|
Planet,
|
|
Moon,
|
|
LagrangePoint,
|
|
ResourceNode,
|
|
}
|
|
|
|
public enum WorkStatus
|
|
{
|
|
Pending,
|
|
Active,
|
|
Blocked,
|
|
Completed,
|
|
Failed,
|
|
Interrupted,
|
|
}
|
|
|
|
public enum OrderStatus
|
|
{
|
|
Queued,
|
|
Active,
|
|
Completed,
|
|
Cancelled,
|
|
Failed,
|
|
Interrupted,
|
|
}
|
|
|
|
public enum ShipOrderSourceKind
|
|
{
|
|
Player,
|
|
Behavior,
|
|
Commander,
|
|
}
|
|
|
|
public enum AiPlanStatus
|
|
{
|
|
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 enum MovementRegimeKind
|
|
{
|
|
LocalFlight,
|
|
Warp,
|
|
StargateTransit,
|
|
FtlTransit,
|
|
}
|
|
|
|
public enum ModuleType
|
|
{
|
|
BuildModule,
|
|
ConnectionModule,
|
|
DefenceModule,
|
|
DockArea,
|
|
Habitation,
|
|
Pier,
|
|
ProcessingModule,
|
|
Production,
|
|
Storage,
|
|
}
|
|
|
|
public enum StorageKind
|
|
{
|
|
Condensate,
|
|
Container,
|
|
Liquid,
|
|
Solid,
|
|
}
|
|
|
|
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 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 MineLocal = "mine-local";
|
|
public const string MineAndDeliverRun = "mine-and-deliver-run";
|
|
public const string SellMinedCargo = "sell-mined-cargo";
|
|
public const string SupplyFleetRun = "supply-fleet-run";
|
|
public const string SalvageRun = "salvage-run";
|
|
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 ToDataValue(this ModuleType moduleType) => moduleType switch
|
|
{
|
|
ModuleType.BuildModule => "buildmodule",
|
|
ModuleType.ConnectionModule => "connectionmodule",
|
|
ModuleType.DefenceModule => "defencemodule",
|
|
ModuleType.DockArea => "dockarea",
|
|
ModuleType.Habitation => "habitation",
|
|
ModuleType.Pier => "pier",
|
|
ModuleType.ProcessingModule => "processingmodule",
|
|
ModuleType.Production => "production",
|
|
ModuleType.Storage => "storage",
|
|
_ => throw new ArgumentOutOfRangeException(nameof(moduleType), moduleType, null),
|
|
};
|
|
|
|
public static ModuleType ToModuleType(this string value)
|
|
{
|
|
if (string.IsNullOrWhiteSpace(value))
|
|
{
|
|
throw new ArgumentOutOfRangeException(nameof(value), value, "Module type is required.");
|
|
}
|
|
|
|
return value.Trim().ToLowerInvariant() switch
|
|
{
|
|
"buildmodule" => ModuleType.BuildModule,
|
|
"connectionmodule" => ModuleType.ConnectionModule,
|
|
"defencemodule" => ModuleType.DefenceModule,
|
|
"dockarea" => ModuleType.DockArea,
|
|
"habitation" => ModuleType.Habitation,
|
|
"pier" => ModuleType.Pier,
|
|
"processingmodule" => ModuleType.ProcessingModule,
|
|
"production" => ModuleType.Production,
|
|
"storage" => ModuleType.Storage,
|
|
_ => throw new ArgumentOutOfRangeException(nameof(value), value, "Unsupported module type."),
|
|
};
|
|
}
|
|
|
|
public static string ToDataValue(this StorageKind storageKind) => storageKind switch
|
|
{
|
|
StorageKind.Condensate => "condensate",
|
|
StorageKind.Container => "container",
|
|
StorageKind.Liquid => "liquid",
|
|
StorageKind.Solid => "solid",
|
|
_ => throw new ArgumentOutOfRangeException(nameof(storageKind), storageKind, null),
|
|
};
|
|
|
|
public static StorageKind ToStorageKind(this string value)
|
|
{
|
|
if (string.IsNullOrWhiteSpace(value))
|
|
{
|
|
throw new ArgumentOutOfRangeException(nameof(value), value, "Storage kind is required.");
|
|
}
|
|
|
|
return value.Trim().ToLowerInvariant() switch
|
|
{
|
|
"condensate" => StorageKind.Condensate,
|
|
"container" => StorageKind.Container,
|
|
"liquid" => StorageKind.Liquid,
|
|
"solid" => StorageKind.Solid,
|
|
_ => throw new ArgumentOutOfRangeException(nameof(value), value, "Unsupported storage kind."),
|
|
};
|
|
}
|
|
|
|
public static StorageKind? ToNullableStorageKind(this string? value) =>
|
|
string.IsNullOrWhiteSpace(value) ? null : value.ToStorageKind();
|
|
|
|
public static string ToContractValue(this SpatialNodeKind kind) => kind switch
|
|
{
|
|
SpatialNodeKind.Star => "star",
|
|
SpatialNodeKind.Planet => "planet",
|
|
SpatialNodeKind.Moon => "moon",
|
|
SpatialNodeKind.LagrangePoint => "lagrange-point",
|
|
SpatialNodeKind.ResourceNode => "resource-node",
|
|
_ => 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 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 ShipOrderSourceKind kind) => kind switch
|
|
{
|
|
ShipOrderSourceKind.Player => "player",
|
|
ShipOrderSourceKind.Behavior => "behavior",
|
|
ShipOrderSourceKind.Commander => "commander",
|
|
_ => 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),
|
|
};
|
|
|
|
public static string ToContractValue(this MovementRegimeKind kind) => kind switch
|
|
{
|
|
MovementRegimeKind.LocalFlight => "local-flight",
|
|
MovementRegimeKind.Warp => "warp",
|
|
MovementRegimeKind.StargateTransit => "stargate-transit",
|
|
MovementRegimeKind.FtlTransit => "ftl-transit",
|
|
_ => throw new ArgumentOutOfRangeException(nameof(kind), kind, null),
|
|
};
|
|
}
|