using SpaceGame.Simulation.Api.Data; namespace SpaceGame.Simulation.Api.Simulation; public sealed class SystemRuntime { public required SolarSystemDefinition Definition { get; init; } public required Vector3 Position { get; init; } } public sealed class ResourceNodeRuntime { public required string Id { get; init; } public required string SystemId { get; init; } public required Vector3 Position { get; set; } public required string SourceKind { get; init; } public required string ItemId { get; init; } public string? AnchorNodeId { get; set; } public float OrbitRadius { get; init; } public float OrbitPhase { get; init; } public float OrbitInclination { get; init; } public float OreRemaining { get; set; } public float MaxOre { get; init; } public string LastDeltaSignature { get; set; } = string.Empty; } public sealed class NodeRuntime { public required string Id { get; init; } public required string SystemId { get; init; } public required SpatialNodeKind Kind { get; init; } public required Vector3 Position { get; set; } public required string BubbleId { get; init; } public string? ParentNodeId { get; set; } public string? OccupyingStructureId { get; set; } public string? OrbitReferenceId { get; set; } public string LastDeltaSignature { get; set; } = string.Empty; } public sealed class LocalBubbleRuntime { public required string Id { get; init; } public required string NodeId { get; init; } public required string SystemId { get; init; } public float Radius { get; init; } public HashSet OccupantShipIds { get; } = new(StringComparer.Ordinal); public HashSet OccupantStationIds { get; } = new(StringComparer.Ordinal); public HashSet OccupantClaimIds { get; } = new(StringComparer.Ordinal); public HashSet OccupantConstructionSiteIds { get; } = new(StringComparer.Ordinal); public string LastDeltaSignature { get; set; } = string.Empty; } public sealed class ShipSpatialStateRuntime { public string SpaceLayer { get; set; } = SpaceLayerKinds.LocalSpace; public required string CurrentSystemId { get; set; } public string? CurrentNodeId { get; set; } public string? CurrentBubbleId { get; set; } public Vector3? LocalPosition { get; set; } public Vector3? SystemPosition { get; set; } public string MovementRegime { get; set; } = MovementRegimeKinds.LocalFlight; public string? DestinationNodeId { get; set; } public ShipTransitRuntime? Transit { get; set; } } public sealed class ShipTransitRuntime { public required string Regime { get; init; } public string? OriginNodeId { get; init; } public string? DestinationNodeId { get; init; } public DateTimeOffset? StartedAtUtc { get; set; } public DateTimeOffset? ArrivalDueAtUtc { get; set; } public float Progress { get; set; } }