diff --git a/apps/backend/Contracts/WorldContracts.Celestial.cs b/apps/backend/Contracts/Celestial.cs similarity index 97% rename from apps/backend/Contracts/WorldContracts.Celestial.cs rename to apps/backend/Contracts/Celestial.cs index bdbfc02..50a9716 100644 --- a/apps/backend/Contracts/WorldContracts.Celestial.cs +++ b/apps/backend/Contracts/Celestial.cs @@ -1,4 +1,4 @@ -namespace SpaceGame.Simulation.Api.Contracts; +namespace SpaceGame.Api.Contracts; public sealed record StarSnapshot( string Kind, diff --git a/apps/backend/Contracts/WorldContracts.Common.cs b/apps/backend/Contracts/Common.cs similarity index 57% rename from apps/backend/Contracts/WorldContracts.Common.cs rename to apps/backend/Contracts/Common.cs index b0f5c4b..dce1126 100644 --- a/apps/backend/Contracts/WorldContracts.Common.cs +++ b/apps/backend/Contracts/Common.cs @@ -1,4 +1,4 @@ -namespace SpaceGame.Simulation.Api.Contracts; +namespace SpaceGame.Api.Contracts; public sealed record Vector3Dto(float X, float Y, float Z); diff --git a/apps/backend/Contracts/WorldContracts.Economy.cs b/apps/backend/Contracts/Economy.cs similarity index 95% rename from apps/backend/Contracts/WorldContracts.Economy.cs rename to apps/backend/Contracts/Economy.cs index 8d06997..012600a 100644 --- a/apps/backend/Contracts/WorldContracts.Economy.cs +++ b/apps/backend/Contracts/Economy.cs @@ -1,4 +1,4 @@ -namespace SpaceGame.Simulation.Api.Contracts; +namespace SpaceGame.Api.Contracts; public sealed record MarketOrderSnapshot( string Id, diff --git a/apps/backend/Contracts/WorldContracts.Factions.cs b/apps/backend/Contracts/Factions.cs similarity index 95% rename from apps/backend/Contracts/WorldContracts.Factions.cs rename to apps/backend/Contracts/Factions.cs index bb0708f..49bf91b 100644 --- a/apps/backend/Contracts/WorldContracts.Factions.cs +++ b/apps/backend/Contracts/Factions.cs @@ -1,4 +1,4 @@ -namespace SpaceGame.Simulation.Api.Contracts; +namespace SpaceGame.Api.Contracts; public sealed record FactionGoapStateSnapshot( int MilitaryShipCount, diff --git a/apps/backend/Contracts/WorldContracts.Infrastructure.cs b/apps/backend/Contracts/Infrastructure.cs similarity index 98% rename from apps/backend/Contracts/WorldContracts.Infrastructure.cs rename to apps/backend/Contracts/Infrastructure.cs index 9fc1e8a..4ef7ba3 100644 --- a/apps/backend/Contracts/WorldContracts.Infrastructure.cs +++ b/apps/backend/Contracts/Infrastructure.cs @@ -1,4 +1,4 @@ -namespace SpaceGame.Simulation.Api.Contracts; +namespace SpaceGame.Api.Contracts; public sealed record InventoryEntry( string ItemId, diff --git a/apps/backend/Contracts/WorldContracts.Ships.cs b/apps/backend/Contracts/Ships.cs similarity index 97% rename from apps/backend/Contracts/WorldContracts.Ships.cs rename to apps/backend/Contracts/Ships.cs index 9429435..1e561f5 100644 --- a/apps/backend/Contracts/WorldContracts.Ships.cs +++ b/apps/backend/Contracts/Ships.cs @@ -1,4 +1,4 @@ -namespace SpaceGame.Simulation.Api.Contracts; +namespace SpaceGame.Api.Contracts; public sealed record ShipSnapshot( string Id, diff --git a/apps/backend/Contracts/WorldContracts.World.cs b/apps/backend/Contracts/World.cs similarity index 97% rename from apps/backend/Contracts/WorldContracts.World.cs rename to apps/backend/Contracts/World.cs index 414681b..15c1350 100644 --- a/apps/backend/Contracts/WorldContracts.World.cs +++ b/apps/backend/Contracts/World.cs @@ -1,4 +1,4 @@ -namespace SpaceGame.Simulation.Api.Contracts; +namespace SpaceGame.Api.Contracts; public sealed record WorldSnapshot( string Label, diff --git a/apps/backend/Data/WorldDefinitions.cs b/apps/backend/Data/WorldDefinitions.cs index 68bf7a5..7ebb2c2 100644 --- a/apps/backend/Data/WorldDefinitions.cs +++ b/apps/backend/Data/WorldDefinitions.cs @@ -1,6 +1,6 @@ using System.Text.Json.Serialization; -namespace SpaceGame.Simulation.Api.Data; +namespace SpaceGame.Api.Data; public sealed class ConstructionDefinition { diff --git a/apps/backend/Handlers/GetWorldHandler.cs b/apps/backend/Handlers/GetWorldHandler.cs index 366690b..31ca33d 100644 --- a/apps/backend/Handlers/GetWorldHandler.cs +++ b/apps/backend/Handlers/GetWorldHandler.cs @@ -1,7 +1,7 @@ using FastEndpoints; -using SpaceGame.Simulation.Api.Simulation; +using SpaceGame.Api.Simulation; -namespace SpaceGame.Simulation.Api.Handlers; +namespace SpaceGame.Api.Handlers; public sealed class GetWorldHandler(WorldService worldService) : EndpointWithoutRequest { diff --git a/apps/backend/Handlers/GetWorldHealthHandler.cs b/apps/backend/Handlers/GetWorldHealthHandler.cs index 7a4f02e..e89b411 100644 --- a/apps/backend/Handlers/GetWorldHealthHandler.cs +++ b/apps/backend/Handlers/GetWorldHealthHandler.cs @@ -1,7 +1,7 @@ using FastEndpoints; -using SpaceGame.Simulation.Api.Simulation; +using SpaceGame.Api.Simulation; -namespace SpaceGame.Simulation.Api.Handlers; +namespace SpaceGame.Api.Handlers; public sealed class GetWorldHealthHandler(WorldService worldService) : EndpointWithoutRequest { diff --git a/apps/backend/Handlers/ResetWorldHandler.cs b/apps/backend/Handlers/ResetWorldHandler.cs index f37f369..a124b43 100644 --- a/apps/backend/Handlers/ResetWorldHandler.cs +++ b/apps/backend/Handlers/ResetWorldHandler.cs @@ -1,7 +1,7 @@ using FastEndpoints; -using SpaceGame.Simulation.Api.Simulation; +using SpaceGame.Api.Simulation; -namespace SpaceGame.Simulation.Api.Handlers; +namespace SpaceGame.Api.Handlers; public sealed class ResetWorldHandler(WorldService worldService) : EndpointWithoutRequest { diff --git a/apps/backend/Handlers/RootRedirectHandler.cs b/apps/backend/Handlers/RootRedirectHandler.cs index 68cb42c..eb94d0b 100644 --- a/apps/backend/Handlers/RootRedirectHandler.cs +++ b/apps/backend/Handlers/RootRedirectHandler.cs @@ -1,6 +1,6 @@ using FastEndpoints; -namespace SpaceGame.Simulation.Api.Handlers; +namespace SpaceGame.Api.Handlers; public sealed class RootRedirectHandler : EndpointWithoutRequest { diff --git a/apps/backend/Handlers/StreamWorldHandler.cs b/apps/backend/Handlers/StreamWorldHandler.cs index a8c4fa2..46b6bfa 100644 --- a/apps/backend/Handlers/StreamWorldHandler.cs +++ b/apps/backend/Handlers/StreamWorldHandler.cs @@ -1,9 +1,9 @@ using System.Text.Json; using FastEndpoints; -using SpaceGame.Simulation.Api.Contracts; -using SpaceGame.Simulation.Api.Simulation; +using SpaceGame.Api.Contracts; +using SpaceGame.Api.Simulation; -namespace SpaceGame.Simulation.Api.Handlers; +namespace SpaceGame.Api.Handlers; public sealed class StreamWorldHandler(WorldService worldService) : EndpointWithoutRequest { diff --git a/apps/backend/Program.cs b/apps/backend/Program.cs index ad35ba2..93e312e 100644 --- a/apps/backend/Program.cs +++ b/apps/backend/Program.cs @@ -1,5 +1,5 @@ using FastEndpoints; -using SpaceGame.Simulation.Api.Simulation; +using SpaceGame.Api.Simulation; var builder = WebApplication.CreateBuilder(args); diff --git a/apps/backend/Simulation/AI/FactionController.cs b/apps/backend/Simulation/AI/FactionController.cs index 661cc59..65a54c2 100644 --- a/apps/backend/Simulation/AI/FactionController.cs +++ b/apps/backend/Simulation/AI/FactionController.cs @@ -1,4 +1,7 @@ -namespace SpaceGame.Simulation.Api.Simulation; +using SpaceGame.Api.Simulation.Engine; +using SpaceGame.Api.Simulation.Model; + +namespace SpaceGame.Api.Simulation.AI; // ─── Planning State ──────────────────────────────────────────────────────────── diff --git a/apps/backend/Simulation/AI/GoapCore.cs b/apps/backend/Simulation/AI/GoapCore.cs index b546671..2ae67f3 100644 --- a/apps/backend/Simulation/AI/GoapCore.cs +++ b/apps/backend/Simulation/AI/GoapCore.cs @@ -1,4 +1,7 @@ -namespace SpaceGame.Simulation.Api.Simulation; +using SpaceGame.Api.Simulation.Engine; +using SpaceGame.Api.Simulation.Model; + +namespace SpaceGame.Api.Simulation.AI; public abstract class GoapAction { diff --git a/apps/backend/Simulation/AI/IShipBehaviorState.cs b/apps/backend/Simulation/AI/IShipBehaviorState.cs index 0c08832..421f61d 100644 --- a/apps/backend/Simulation/AI/IShipBehaviorState.cs +++ b/apps/backend/Simulation/AI/IShipBehaviorState.cs @@ -1,10 +1,13 @@ -namespace SpaceGame.Simulation.Api.Simulation; +using SpaceGame.Api.Simulation.Engine; +using SpaceGame.Api.Simulation.Model; + +namespace SpaceGame.Api.Simulation.AI; internal interface IShipBehaviorState { - string Kind { get; } + string Kind { get; } - void Plan(SimulationEngine engine, ShipRuntime ship, SimulationWorld world); + void Plan(SimulationEngine engine, ShipRuntime ship, SimulationWorld world); - void ApplyEvent(SimulationEngine engine, ShipRuntime ship, SimulationWorld world, string controllerEvent); + void ApplyEvent(SimulationEngine engine, ShipRuntime ship, SimulationWorld world, string controllerEvent); } diff --git a/apps/backend/Simulation/AI/ShipBehaviorStateMachine.cs b/apps/backend/Simulation/AI/ShipBehaviorStateMachine.cs index 8bf6207..cd77fcd 100644 --- a/apps/backend/Simulation/AI/ShipBehaviorStateMachine.cs +++ b/apps/backend/Simulation/AI/ShipBehaviorStateMachine.cs @@ -1,38 +1,41 @@ -namespace SpaceGame.Simulation.Api.Simulation; +using SpaceGame.Api.Simulation.Engine; +using SpaceGame.Api.Simulation.Model; + +namespace SpaceGame.Api.Simulation.AI; internal sealed class ShipBehaviorStateMachine { - private readonly IReadOnlyDictionary states; - private readonly IShipBehaviorState fallbackState; + private readonly IReadOnlyDictionary states; + private readonly IShipBehaviorState fallbackState; - private ShipBehaviorStateMachine(IReadOnlyDictionary states, IShipBehaviorState fallbackState) - { - this.states = states; - this.fallbackState = fallbackState; - } + private ShipBehaviorStateMachine(IReadOnlyDictionary states, IShipBehaviorState fallbackState) + { + this.states = states; + this.fallbackState = fallbackState; + } - public static ShipBehaviorStateMachine CreateDefault() + public static ShipBehaviorStateMachine CreateDefault() + { + var idleState = new IdleShipBehaviorState(); + var knownStates = new IShipBehaviorState[] { - var idleState = new IdleShipBehaviorState(); - var knownStates = new IShipBehaviorState[] - { idleState, new PatrolShipBehaviorState(), new ResourceHarvestShipBehaviorState("auto-mine", "ore", "mining"), new ConstructStationShipBehaviorState(), - }; + }; - return new ShipBehaviorStateMachine( - knownStates.ToDictionary(state => state.Kind, StringComparer.Ordinal), - idleState); - } + return new ShipBehaviorStateMachine( + knownStates.ToDictionary(state => state.Kind, StringComparer.Ordinal), + idleState); + } - public void Plan(SimulationEngine engine, ShipRuntime ship, SimulationWorld world) => - Resolve(ship.DefaultBehavior.Kind).Plan(engine, ship, world); + public void Plan(SimulationEngine engine, ShipRuntime ship, SimulationWorld world) => + Resolve(ship.DefaultBehavior.Kind).Plan(engine, ship, world); - public void ApplyEvent(SimulationEngine engine, ShipRuntime ship, SimulationWorld world, string controllerEvent) => - Resolve(ship.DefaultBehavior.Kind).ApplyEvent(engine, ship, world, controllerEvent); + public void ApplyEvent(SimulationEngine engine, ShipRuntime ship, SimulationWorld world, string controllerEvent) => + Resolve(ship.DefaultBehavior.Kind).ApplyEvent(engine, ship, world, controllerEvent); - private IShipBehaviorState Resolve(string kind) => - states.TryGetValue(kind, out var state) ? state : fallbackState; + private IShipBehaviorState Resolve(string kind) => + states.TryGetValue(kind, out var state) ? state : fallbackState; } diff --git a/apps/backend/Simulation/AI/ShipBehaviorStates.cs b/apps/backend/Simulation/AI/ShipBehaviorStates.cs index c266c63..848bc1a 100644 --- a/apps/backend/Simulation/AI/ShipBehaviorStates.cs +++ b/apps/backend/Simulation/AI/ShipBehaviorStates.cs @@ -1,4 +1,7 @@ -namespace SpaceGame.Simulation.Api.Simulation; +using SpaceGame.Api.Simulation.Engine; +using SpaceGame.Api.Simulation.Model; + +namespace SpaceGame.Api.Simulation.AI; internal sealed class IdleShipBehaviorState : IShipBehaviorState { diff --git a/apps/backend/Simulation/AI/ShipController.cs b/apps/backend/Simulation/AI/ShipController.cs index 5381261..cd9ddc7 100644 --- a/apps/backend/Simulation/AI/ShipController.cs +++ b/apps/backend/Simulation/AI/ShipController.cs @@ -1,4 +1,7 @@ -namespace SpaceGame.Simulation.Api.Simulation; +using SpaceGame.Api.Simulation.Engine; +using SpaceGame.Api.Simulation.Model; + +namespace SpaceGame.Api.Simulation.AI; // ─── Planning State ──────────────────────────────────────────────────────────── diff --git a/apps/backend/Simulation/Model/CommerceRuntimeModels.cs b/apps/backend/Simulation/Model/CommerceRuntimeModels.cs index 3da5032..0b0f3fb 100644 --- a/apps/backend/Simulation/Model/CommerceRuntimeModels.cs +++ b/apps/backend/Simulation/Model/CommerceRuntimeModels.cs @@ -1,30 +1,30 @@ -namespace SpaceGame.Simulation.Api.Simulation; +namespace SpaceGame.Api.Simulation.Model; public sealed class MarketOrderRuntime { - public required string Id { get; init; } - public required string FactionId { get; init; } - public string? StationId { get; init; } - public string? ConstructionSiteId { get; init; } - public required string Kind { get; init; } - public required string ItemId { get; init; } - public float Amount { get; init; } - public float RemainingAmount { get; set; } - public float Valuation { get; set; } - public float? ReserveThreshold { get; set; } - public string? PolicySetId { get; set; } - public string State { get; set; } = MarketOrderStateKinds.Open; - public string LastDeltaSignature { get; set; } = string.Empty; + public required string Id { get; init; } + public required string FactionId { get; init; } + public string? StationId { get; init; } + public string? ConstructionSiteId { get; init; } + public required string Kind { get; init; } + public required string ItemId { get; init; } + public float Amount { get; init; } + public float RemainingAmount { get; set; } + public float Valuation { get; set; } + public float? ReserveThreshold { get; set; } + public string? PolicySetId { get; set; } + public string State { get; set; } = MarketOrderStateKinds.Open; + public string LastDeltaSignature { get; set; } = string.Empty; } public sealed class PolicySetRuntime { - public required string Id { get; init; } - public required string OwnerKind { get; init; } - public required string OwnerId { get; init; } - public string TradeAccessPolicy { get; set; } = "owner-and-allies"; - public string DockingAccessPolicy { get; set; } = "owner-and-allies"; - public string ConstructionAccessPolicy { get; set; } = "owner-only"; - public string OperationalRangePolicy { get; set; } = "unrestricted"; - public string LastDeltaSignature { get; set; } = string.Empty; + public required string Id { get; init; } + public required string OwnerKind { get; init; } + public required string OwnerId { get; init; } + public string TradeAccessPolicy { get; set; } = "owner-and-allies"; + public string DockingAccessPolicy { get; set; } = "owner-and-allies"; + public string ConstructionAccessPolicy { get; set; } = "owner-only"; + public string OperationalRangePolicy { get; set; } = "unrestricted"; + public string LastDeltaSignature { get; set; } = string.Empty; } diff --git a/apps/backend/Simulation/Model/ConstructionRuntimeModels.cs b/apps/backend/Simulation/Model/ConstructionRuntimeModels.cs index d177989..97772f8 100644 --- a/apps/backend/Simulation/Model/ConstructionRuntimeModels.cs +++ b/apps/backend/Simulation/Model/ConstructionRuntimeModels.cs @@ -1,36 +1,36 @@ -namespace SpaceGame.Simulation.Api.Simulation; +namespace SpaceGame.Api.Simulation.Model; public sealed class ClaimRuntime { - public required string Id { get; init; } - public required string FactionId { get; init; } - public required string SystemId { get; init; } - public required string CelestialId { get; init; } - public string? CommanderId { get; set; } - public DateTimeOffset PlacedAtUtc { get; init; } - public DateTimeOffset ActivatesAtUtc { get; set; } - public string State { get; set; } = ClaimStateKinds.Placed; - public float Health { get; set; } - public string LastDeltaSignature { get; set; } = string.Empty; + public required string Id { get; init; } + public required string FactionId { get; init; } + public required string SystemId { get; init; } + public required string CelestialId { get; init; } + public string? CommanderId { get; set; } + public DateTimeOffset PlacedAtUtc { get; init; } + public DateTimeOffset ActivatesAtUtc { get; set; } + public string State { get; set; } = ClaimStateKinds.Placed; + public float Health { get; set; } + public string LastDeltaSignature { get; set; } = string.Empty; } public sealed class ConstructionSiteRuntime { - public required string Id { get; init; } - public required string FactionId { get; init; } - public required string SystemId { get; init; } - public required string CelestialId { get; init; } - public required string TargetKind { get; init; } - public required string TargetDefinitionId { get; init; } - public string? BlueprintId { get; set; } - public string? ClaimId { get; set; } - public string? StationId { get; set; } - public Dictionary Inventory { get; } = new(StringComparer.Ordinal); - public Dictionary RequiredItems { get; } = new(StringComparer.Ordinal); - public Dictionary DeliveredItems { get; } = new(StringComparer.Ordinal); - public HashSet AssignedConstructorShipIds { get; } = new(StringComparer.Ordinal); - public HashSet MarketOrderIds { get; } = new(StringComparer.Ordinal); - public float Progress { get; set; } - public string State { get; set; } = ConstructionSiteStateKinds.Planned; - public string LastDeltaSignature { get; set; } = string.Empty; + public required string Id { get; init; } + public required string FactionId { get; init; } + public required string SystemId { get; init; } + public required string CelestialId { get; init; } + public required string TargetKind { get; init; } + public required string TargetDefinitionId { get; init; } + public string? BlueprintId { get; set; } + public string? ClaimId { get; set; } + public string? StationId { get; set; } + public Dictionary Inventory { get; } = new(StringComparer.Ordinal); + public Dictionary RequiredItems { get; } = new(StringComparer.Ordinal); + public Dictionary DeliveredItems { get; } = new(StringComparer.Ordinal); + public HashSet AssignedConstructorShipIds { get; } = new(StringComparer.Ordinal); + public HashSet MarketOrderIds { get; } = new(StringComparer.Ordinal); + public float Progress { get; set; } + public string State { get; set; } = ConstructionSiteStateKinds.Planned; + public string LastDeltaSignature { get; set; } = string.Empty; } diff --git a/apps/backend/Simulation/Model/FactionRuntimeModels.cs b/apps/backend/Simulation/Model/FactionRuntimeModels.cs index 81a2037..e9a6b41 100644 --- a/apps/backend/Simulation/Model/FactionRuntimeModels.cs +++ b/apps/backend/Simulation/Model/FactionRuntimeModels.cs @@ -1,73 +1,75 @@ -namespace SpaceGame.Simulation.Api.Simulation; +using SpaceGame.Api.Simulation.AI; + +namespace SpaceGame.Api.Simulation.Model; public sealed class FactionRuntime { - public required string Id { get; init; } - public required string Label { get; init; } - public required string Color { get; init; } - public float Credits { get; set; } - public float PopulationTotal { get; set; } - public float OreMined { get; set; } - public float GoodsProduced { get; set; } - public int ShipsBuilt { get; set; } - public int ShipsLost { get; set; } - public HashSet CommanderIds { get; } = new(StringComparer.Ordinal); - public string? DefaultPolicySetId { get; set; } - public string LastDeltaSignature { get; set; } = string.Empty; + public required string Id { get; init; } + public required string Label { get; init; } + public required string Color { get; init; } + public float Credits { get; set; } + public float PopulationTotal { get; set; } + public float OreMined { get; set; } + public float GoodsProduced { get; set; } + public int ShipsBuilt { get; set; } + public int ShipsLost { get; set; } + public HashSet CommanderIds { get; } = new(StringComparer.Ordinal); + public string? DefaultPolicySetId { get; set; } + public string LastDeltaSignature { get; set; } = string.Empty; } public sealed class CommanderRuntime { - public required string Id { get; init; } - public required string Kind { get; set; } - public required string FactionId { get; init; } - public string? ParentCommanderId { get; set; } - public string? ControlledEntityId { get; set; } - public string? PolicySetId { get; set; } - public string? Doctrine { get; set; } - public List Goals { get; } = []; - public HashSet ActiveDirectives { get; } = new(StringComparer.Ordinal); - public string? ActiveGoalName { get; set; } - public string? ActiveActionName { get; set; } - public float ReplanTimer { get; set; } - public bool NeedsReplan { get; set; } = true; - public CommanderBehaviorRuntime? ActiveBehavior { get; set; } - public CommanderOrderRuntime? ActiveOrder { get; set; } - public CommanderTaskRuntime? ActiveTask { get; set; } - public HashSet SubordinateCommanderIds { get; } = new(StringComparer.Ordinal); - public bool IsAlive { get; set; } = true; - public FactionPlanningState? LastPlanningState { get; set; } - public IReadOnlyList<(string Name, float Priority)>? LastGoalPriorities { get; set; } + public required string Id { get; init; } + public required string Kind { get; set; } + public required string FactionId { get; init; } + public string? ParentCommanderId { get; set; } + public string? ControlledEntityId { get; set; } + public string? PolicySetId { get; set; } + public string? Doctrine { get; set; } + public List Goals { get; } = []; + public HashSet ActiveDirectives { get; } = new(StringComparer.Ordinal); + public string? ActiveGoalName { get; set; } + public string? ActiveActionName { get; set; } + public float ReplanTimer { get; set; } + public bool NeedsReplan { get; set; } = true; + public CommanderBehaviorRuntime? ActiveBehavior { get; set; } + public CommanderOrderRuntime? ActiveOrder { get; set; } + public CommanderTaskRuntime? ActiveTask { get; set; } + public HashSet SubordinateCommanderIds { get; } = new(StringComparer.Ordinal); + public bool IsAlive { get; set; } = true; + public FactionPlanningState? LastPlanningState { get; set; } + public IReadOnlyList<(string Name, float Priority)>? LastGoalPriorities { get; set; } } public sealed class CommanderBehaviorRuntime { - public required string Kind { get; set; } - public string? Phase { get; set; } - public string? NodeId { get; set; } - public string? StationId { get; set; } - public string? ModuleId { get; set; } - public string? AreaSystemId { get; set; } - public int PatrolIndex { get; set; } + public required string Kind { get; set; } + public string? Phase { get; set; } + public string? NodeId { get; set; } + public string? StationId { get; set; } + public string? ModuleId { get; set; } + public string? AreaSystemId { get; set; } + public int PatrolIndex { get; set; } } public sealed class CommanderOrderRuntime { - public required string Kind { get; init; } - public OrderStatus Status { get; set; } = OrderStatus.Accepted; - public string? TargetEntityId { get; set; } - public string? DestinationNodeId { get; set; } - public required string DestinationSystemId { get; init; } - public required Vector3 DestinationPosition { get; init; } + public required string Kind { get; init; } + public OrderStatus Status { get; set; } = OrderStatus.Accepted; + public string? TargetEntityId { get; set; } + public string? DestinationNodeId { get; set; } + public required string DestinationSystemId { get; init; } + public required Vector3 DestinationPosition { get; init; } } public sealed class CommanderTaskRuntime { - public required string Kind { get; set; } - public WorkStatus Status { get; set; } = WorkStatus.Pending; - 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 required string Kind { get; set; } + public WorkStatus Status { get; set; } = WorkStatus.Pending; + 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; } } diff --git a/apps/backend/Simulation/Model/ShipRuntimeModels.cs b/apps/backend/Simulation/Model/ShipRuntimeModels.cs index 4b55df9..e1f4441 100644 --- a/apps/backend/Simulation/Model/ShipRuntimeModels.cs +++ b/apps/backend/Simulation/Model/ShipRuntimeModels.cs @@ -1,6 +1,6 @@ -using SpaceGame.Simulation.Api.Data; +using SpaceGame.Api.Data; -namespace SpaceGame.Simulation.Api.Simulation; +namespace SpaceGame.Api.Simulation.Model; public sealed class ShipRuntime { diff --git a/apps/backend/Simulation/Model/SimulationKinds.cs b/apps/backend/Simulation/Model/SimulationKinds.cs index 5caf7c2..18add31 100644 --- a/apps/backend/Simulation/Model/SimulationKinds.cs +++ b/apps/backend/Simulation/Model/SimulationKinds.cs @@ -1,4 +1,4 @@ -namespace SpaceGame.Simulation.Api.Simulation; +namespace SpaceGame.Api.Simulation.Model; public enum SpatialNodeKind { diff --git a/apps/backend/Simulation/Model/SimulationUnits.cs b/apps/backend/Simulation/Model/SimulationUnits.cs index 60ef493..e32b75d 100644 --- a/apps/backend/Simulation/Model/SimulationUnits.cs +++ b/apps/backend/Simulation/Model/SimulationUnits.cs @@ -1,4 +1,4 @@ -namespace SpaceGame.Simulation.Api.Simulation; +namespace SpaceGame.Api.Simulation.Model; public static class SimulationUnits { diff --git a/apps/backend/Simulation/Model/SimulationWorld.cs b/apps/backend/Simulation/Model/SimulationWorld.cs index 1ef7766..7c5cbb0 100644 --- a/apps/backend/Simulation/Model/SimulationWorld.cs +++ b/apps/backend/Simulation/Model/SimulationWorld.cs @@ -1,6 +1,6 @@ -using SpaceGame.Simulation.Api.Data; +using SpaceGame.Api.Data; -namespace SpaceGame.Simulation.Api.Simulation; +namespace SpaceGame.Api.Simulation.Model; public sealed class SimulationWorld { diff --git a/apps/backend/Simulation/Model/SpatialRuntimeModels.cs b/apps/backend/Simulation/Model/SpatialRuntimeModels.cs index 4f11bda..d0e6163 100644 --- a/apps/backend/Simulation/Model/SpatialRuntimeModels.cs +++ b/apps/backend/Simulation/Model/SpatialRuntimeModels.cs @@ -1,6 +1,6 @@ -using SpaceGame.Simulation.Api.Data; +using SpaceGame.Api.Data; -namespace SpaceGame.Simulation.Api.Simulation; +namespace SpaceGame.Api.Simulation.Model; public sealed class SystemRuntime { diff --git a/apps/backend/Simulation/Model/StationRuntimeModels.cs b/apps/backend/Simulation/Model/StationRuntimeModels.cs index 503ecfc..07a7b9a 100644 --- a/apps/backend/Simulation/Model/StationRuntimeModels.cs +++ b/apps/backend/Simulation/Model/StationRuntimeModels.cs @@ -1,4 +1,4 @@ -namespace SpaceGame.Simulation.Api.Simulation; +namespace SpaceGame.Api.Simulation.Model; public sealed class StationRuntime { diff --git a/apps/backend/Simulation/Model/Vector3.cs b/apps/backend/Simulation/Model/Vector3.cs index 3ee6374..6738838 100644 --- a/apps/backend/Simulation/Model/Vector3.cs +++ b/apps/backend/Simulation/Model/Vector3.cs @@ -1,4 +1,4 @@ -namespace SpaceGame.Simulation.Api.Simulation; +namespace SpaceGame.Api.Simulation.Model; public readonly record struct Vector3(float X, float Y, float Z) { diff --git a/apps/backend/Simulation/OrbitalSimulationOptions.cs b/apps/backend/Simulation/OrbitalSimulationOptions.cs index 9ed76a8..a175209 100644 --- a/apps/backend/Simulation/OrbitalSimulationOptions.cs +++ b/apps/backend/Simulation/OrbitalSimulationOptions.cs @@ -1,4 +1,4 @@ -namespace SpaceGame.Simulation.Api.Simulation; +namespace SpaceGame.Api.Simulation; public sealed class OrbitalSimulationOptions { diff --git a/apps/backend/Simulation/SimulationHostedService.cs b/apps/backend/Simulation/SimulationHostedService.cs index d5f5b86..46d4db2 100644 --- a/apps/backend/Simulation/SimulationHostedService.cs +++ b/apps/backend/Simulation/SimulationHostedService.cs @@ -1,4 +1,4 @@ -namespace SpaceGame.Simulation.Api.Simulation; +namespace SpaceGame.Api.Simulation; public sealed class SimulationHostedService(WorldService worldService) : BackgroundService { diff --git a/apps/backend/Simulation/WorldGenerationOptions.cs b/apps/backend/Simulation/WorldGenerationOptions.cs index 2da1f4b..3305288 100644 --- a/apps/backend/Simulation/WorldGenerationOptions.cs +++ b/apps/backend/Simulation/WorldGenerationOptions.cs @@ -1,4 +1,4 @@ -namespace SpaceGame.Simulation.Api.Simulation; +namespace SpaceGame.Api.Simulation; public sealed class WorldGenerationOptions { diff --git a/apps/backend/Simulation/WorldService.cs b/apps/backend/Simulation/WorldService.cs index d3aa7b5..e2ce956 100644 --- a/apps/backend/Simulation/WorldService.cs +++ b/apps/backend/Simulation/WorldService.cs @@ -1,8 +1,10 @@ using System.Threading.Channels; using Microsoft.Extensions.Options; -using SpaceGame.Simulation.Api.Contracts; +using SpaceGame.Api.Contracts; +using SpaceGame.Api.Simulation.Engine; +using SpaceGame.Api.Simulation.Model; -namespace SpaceGame.Simulation.Api.Simulation; +namespace SpaceGame.Api.Simulation; public sealed class WorldService( IWebHostEnvironment environment, @@ -11,7 +13,7 @@ public sealed class WorldService( { private const int DeltaHistoryLimit = 256; - private readonly object _sync = new(); + private readonly Lock _sync = new(); private readonly OrbitalSimulationSnapshot _orbitalSimulation = new(orbitalSimulationOptions.Value.SimulatedSecondsPerRealSecond); private readonly ScenarioLoader _loader = new(environment.ContentRootPath, worldGenerationOptions.Value); private readonly SimulationEngine _engine = new(orbitalSimulationOptions.Value); diff --git a/apps/backend/SpaceGame.Simulation.Api.csproj b/apps/backend/SpaceGame.Api.csproj similarity index 100% rename from apps/backend/SpaceGame.Simulation.Api.csproj rename to apps/backend/SpaceGame.Api.csproj