namespace SpaceGame.Simulation.Api.Data; public sealed class ConstructionDefinition { public string? RecipeId { get; set; } public string FacilityCategory { get; set; } = "station"; public List RequiredModules { get; set; } = []; public List Requirements { get; set; } = []; public float CycleTime { get; set; } public float BatchSize { get; set; } = 1f; public float ProductsPerHour { get; set; } public float MaxEfficiency { get; set; } = 1f; public int Priority { get; set; } } public sealed class BalanceDefinition { public float YPlane { get; set; } public float ArrivalThreshold { get; set; } public float MiningRate { get; set; } public float MiningCycleSeconds { get; set; } public float TransferRate { get; set; } public float DockingDuration { get; set; } public float UndockingDuration { get; set; } public float UndockDistance { get; set; } } public sealed class SolarSystemDefinition { public required string Id { get; set; } public required string Label { get; set; } public required float[] Position { get; set; } public string StarKind { get; set; } = "main-sequence"; public int StarCount { get; set; } = 1; public required string StarColor { get; set; } public required string StarGlow { get; set; } public float StarSize { get; set; } public float GravityWellRadius { get; set; } public required AsteroidFieldDefinition AsteroidField { get; set; } public required List ResourceNodes { get; set; } public required List Planets { get; set; } } public sealed class AsteroidFieldDefinition { public int DecorationCount { get; set; } public float RadiusOffset { get; set; } public float RadiusVariance { get; set; } public float HeightVariance { get; set; } } public sealed class ResourceNodeDefinition { public string SourceKind { get; set; } = "asteroid-belt"; public float Angle { get; set; } public float RadiusOffset { get; set; } public float InclinationDegrees { get; set; } public int? AnchorPlanetIndex { get; set; } public int? AnchorMoonIndex { get; set; } public float OreAmount { get; set; } public required string ItemId { get; set; } public int ShardCount { get; set; } } public sealed class ItemDefinition { public required string Id { get; set; } public required string Name { get; set; } public string Description { get; set; } = string.Empty; public string Type { get; set; } = "material"; public required string CargoKind { get; set; } public float Volume { get; set; } = 1f; public ConstructionDefinition? Construction { get; set; } } public sealed class RecipeOutputDefinition { public required string ItemId { get; set; } public float Amount { get; set; } } public sealed class RecipeInputDefinition { public required string ItemId { get; set; } public float Amount { get; set; } } public sealed class ModuleConstructionDefinition { public required List Requirements { get; set; } public float ProductionTime { get; set; } } public sealed class ModuleDefinition { public required string Id { get; set; } public required string Name { get; set; } public string Description { get; set; } = string.Empty; public required string Type { get; set; } public string? Product { get; set; } public float Radius { get; set; } = 12f; public float Hull { get; set; } = 100f; public float WorkforceNeeded { get; set; } public ModuleConstructionDefinition? Construction { get; set; } } public sealed class ModuleRecipeDefinition { public required string ModuleId { get; set; } public float Duration { get; set; } public required List Inputs { get; set; } } public sealed class RecipeDefinition { public required string Id { get; set; } public required string Label { get; set; } public required string FacilityCategory { get; set; } public float Duration { get; set; } public int Priority { get; set; } public List RequiredModules { get; set; } = []; public List Inputs { get; set; } = []; public List Outputs { get; set; } = []; public string? ShipOutputId { get; set; } } public sealed class PlanetDefinition { public required string Label { get; set; } public string PlanetType { get; set; } = "terrestrial"; public string Shape { get; set; } = "sphere"; public int MoonCount { get; set; } public float OrbitRadius { get; set; } public float OrbitSpeed { get; set; } public float OrbitEccentricity { get; set; } public float OrbitInclination { get; set; } public float OrbitLongitudeOfAscendingNode { get; set; } public float OrbitArgumentOfPeriapsis { get; set; } public float OrbitPhaseAtEpoch { get; set; } public float Size { get; set; } public required string Color { get; set; } public float Tilt { get; set; } public bool HasRing { get; set; } } public sealed class ShipDefinition { public required string Id { get; set; } public required string Label { get; set; } public required string Kind { get; set; } public required string Class { get; set; } public float Speed { get; set; } public float WarpSpeed { get; set; } public float FtlSpeed { get; set; } public float SpoolTime { get; set; } public float CargoCapacity { get; set; } public string? CargoKind { get; set; } public required string Color { get; set; } public required string HullColor { get; set; } public float Size { get; set; } public float MaxHealth { get; set; } public List Capabilities { get; set; } = []; public ConstructionDefinition? Construction { get; set; } } public sealed class ScenarioDefinition { public required List InitialStations { get; set; } public required List ShipFormations { get; set; } public required List PatrolRoutes { get; set; } public required MiningDefaultsDefinition MiningDefaults { get; set; } } public sealed class InitialStationDefinition { public required string SystemId { get; set; } public string Label { get; set; } = "Orbital Station"; public string Color { get; set; } = "#8df0d2"; public List StartingModules { get; set; } = []; public string? FactionId { get; set; } public int? PlanetIndex { get; set; } public int? LagrangeSide { get; set; } public float[]? Position { get; set; } } public sealed class ShipFormationDefinition { public required string ShipId { get; set; } public int Count { get; set; } public required float[] Center { get; set; } public required string SystemId { get; set; } public string? FactionId { get; set; } } public sealed class PatrolRouteDefinition { public required string SystemId { get; set; } public required List Points { get; set; } } public sealed class MiningDefaultsDefinition { public required string NodeSystemId { get; set; } public required string RefinerySystemId { get; set; } }