using SpaceGame.Simulation.Api.Data; namespace SpaceGame.Simulation.Api.Simulation; public sealed class StationRuntime { public required string Id { get; init; } public required string SystemId { get; init; } public required ConstructibleDefinition Definition { get; init; } public required Vector3 Position { get; set; } 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 HashSet InstalledModules { get; } = new(StringComparer.Ordinal); public Dictionary Inventory { get; } = new(StringComparer.Ordinal); public Dictionary DockingPadAssignments { get; } = new(); public HashSet MarketOrderIds { get; } = new(StringComparer.Ordinal); public float EnergyStored { get; set; } public float ProcessTimer { get; set; } 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 HashSet DockedShipIds { get; } = []; public ModuleConstructionRuntime? ActiveConstruction { get; set; } public string LastDeltaSignature { get; set; } = string.Empty; } 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; }