using Microsoft.Extensions.Options; using SpaceGame.Api.Universe.Scenario; using SpaceGame.Api.Universe.Simulation; namespace SpaceGame.Api.Universe.Bootstrap; public sealed class WorldBootstrapper { private readonly BalanceOptions _defaultBalance; private readonly WorldGenerationOptions _defaultWorldGeneration; private readonly StaticDataCatalog _staticData; private readonly ScenarioLoader _scenarioLoader; private readonly SystemTemplateLoader _systemTemplateLoader; private readonly WorldBuilder _worldBuilder; public WorldBootstrapper( StaticDataCatalog staticData, ScenarioLoader scenarioLoader, SystemTemplateLoader systemTemplateLoader, WorldBuilder worldBuilder, IOptions defaultBalanceOptions, IOptions defaultWorldGenerationOptions) { _defaultBalance = defaultBalanceOptions.Value; _defaultWorldGeneration = defaultWorldGenerationOptions.Value; _staticData = staticData; _scenarioLoader = scenarioLoader; _systemTemplateLoader = systemTemplateLoader; _worldBuilder = worldBuilder; } public SimulationWorld Bootstrap() { var scenario = _scenarioLoader.Load(); var gameStartOptions = scenario?.GameStartOptions ?? new GameStartOptionsDefinition { Seed = 1, WorldGeneration = _defaultWorldGeneration, }; return _worldBuilder.Build( _staticData, _defaultBalance, _systemTemplateLoader.Load(), gameStartOptions, scenario); } }