using SpaceGame.Simulation.Api.Data; namespace SpaceGame.Simulation.Api.Simulation; public sealed class ShipRuntime { public required string Id { get; init; } public required string SystemId { get; set; } public required ShipDefinition Definition { get; init; } public required string FactionId { get; init; } public required Vector3 Position { get; set; } public required Vector3 TargetPosition { get; set; } public required ShipSpatialStateRuntime SpatialState { get; set; } public Vector3 Velocity { get; set; } = Vector3.Zero; public ShipState State { get; set; } = ShipState.Idle; public ShipOrderRuntime? Order { get; set; } public required DefaultBehaviorRuntime DefaultBehavior { get; set; } public required ControllerTaskRuntime ControllerTask { get; set; } public float ActionTimer { get; set; } public Dictionary Inventory { get; } = new(StringComparer.Ordinal); public string DockedStationId { get; set; } public int? AssignedDockingPadIndex { get; set; } public string? CommanderId { get; set; } public string? PolicySetId { get; set; } public float Health { get; set; } public string? TrackedActionKey { get; set; } public float TrackedActionTotal { get; set; } public List History { get; } = []; public string LastSignature { get; set; } = string.Empty; public string LastDeltaSignature { get; set; } = string.Empty; } public sealed class ShipOrderRuntime { public required string Kind { get; init; } public OrderStatus Status { get; set; } = OrderStatus.Accepted; public required string DestinationSystemId { get; init; } public required Vector3 DestinationPosition { get; init; } } public sealed class DefaultBehaviorRuntime { public required string Kind { get; set; } public string? AreaSystemId { get; set; } public string? StationId { get; set; } public string? RefineryId { get; set; } public string? NodeId { get; set; } public string? ModuleId { get; set; } public string? Phase { get; set; } public List PatrolPoints { get; set; } = []; public int PatrolIndex { get; set; } } public sealed class ControllerTaskRuntime { public required ControllerTaskKind Kind { get; set; } public WorkStatus Status { get; set; } = WorkStatus.Pending; public string? CommanderId { get; set; } public string? TargetEntityId { get; set; } public string? TargetSystemId { get; set; } public string? TargetNodeId { get; set; } public Vector3? TargetPosition { get; set; } public float Threshold { get; set; } public string? ItemId { get; set; } }