namespace SpaceGame.Simulation.Api.Simulation; public sealed class StationRuntime { public required string Id { get; init; } public required string SystemId { get; init; } public required string Label { get; set; } public string Category { get; set; } = "station"; public string Color { get; set; } = "#8df0d2"; public required Vector3 Position { get; set; } public float Radius { get; set; } = 24f; public required string FactionId { get; init; } public string? NodeId { get; set; } public string? BubbleId { get; set; } public string? AnchorNodeId { get; set; } public string? CommanderId { get; set; } public string? PolicySetId { get; set; } public List Modules { get; } = []; public IEnumerable InstalledModules => Modules.Select((module) => module.ModuleId); public Dictionary Inventory { get; } = new(StringComparer.Ordinal); public Dictionary ProductionLaneTimers { get; } = new(StringComparer.Ordinal); public Dictionary DockingPadAssignments { get; } = new(); public HashSet MarketOrderIds { get; } = new(StringComparer.Ordinal); public float Population { get; set; } public float PopulationCapacity { get; set; } public float WorkforceRequired { get; set; } public float WorkforceEffectiveRatio { get; set; } = 0.1f; public float PopulationGrowthProgress { get; set; } public float ShipProductionProgressSeconds { get; set; } public HashSet DockedShipIds { get; } = []; public ModuleConstructionRuntime? ActiveConstruction { get; set; } public string LastDeltaSignature { get; set; } = string.Empty; } public sealed class StationModuleRuntime { public required string Id { get; init; } public required string ModuleId { get; init; } public float Health { get; set; } public float MaxHealth { get; set; } } public sealed class ModuleConstructionRuntime { public required string ModuleId { get; init; } public float ProgressSeconds { get; set; } public float RequiredSeconds { get; init; } public string AssignedConstructorShipId { get; set; } = string.Empty; }