49 lines
1.6 KiB
C#
49 lines
1.6 KiB
C#
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<BalanceOptions> defaultBalanceOptions,
|
|
IOptions<WorldGenerationOptions> 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);
|
|
}
|
|
}
|