Refactor world bootstrap and allow empty startup worlds
This commit is contained in:
29
apps/backend/Universe/Scenario/WorldTopologyBuilder.cs
Normal file
29
apps/backend/Universe/Scenario/WorldTopologyBuilder.cs
Normal file
@@ -0,0 +1,29 @@
|
||||
using SpaceGame.Api.Universe.Bootstrap;
|
||||
|
||||
namespace SpaceGame.Api.Universe.Scenario;
|
||||
|
||||
public sealed class WorldTopologyBuilder(
|
||||
IStaticDataProvider staticData,
|
||||
SystemGenerationService generationService,
|
||||
SpatialBuilder spatialBuilder)
|
||||
{
|
||||
public WorldBuildTopology Build(WorldGenerationOptions worldGenerationOptions)
|
||||
{
|
||||
var systems = generationService.GenerateSystems(
|
||||
generationService.PrepareKnownSystems(staticData.KnownSystems),
|
||||
worldGenerationOptions);
|
||||
|
||||
var systemRuntimes = systems
|
||||
.Select(definition => new SystemRuntime
|
||||
{
|
||||
Definition = definition,
|
||||
Position = LoaderSupport.ToVector(definition.Position),
|
||||
})
|
||||
.ToList();
|
||||
|
||||
var systemsById = systemRuntimes.ToDictionary(system => system.Definition.Id, StringComparer.Ordinal);
|
||||
var spatialLayout = spatialBuilder.BuildLayout(systemRuntimes);
|
||||
|
||||
return new WorldBuildTopology(systems, systemRuntimes, systemsById, spatialLayout);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user