Dungeon generation refactor (#17121)
This commit is contained in:
@@ -6,10 +6,12 @@ using Content.Server.Decals;
|
||||
using Content.Shared.Procedural;
|
||||
using Content.Shared.Procedural.DungeonGenerators;
|
||||
using Content.Shared.Procedural.PostGeneration;
|
||||
using Content.Shared.Tag;
|
||||
using Robust.Server.Physics;
|
||||
using Robust.Shared.Map;
|
||||
using Robust.Shared.Map.Components;
|
||||
using Robust.Shared.Prototypes;
|
||||
using Robust.Shared.Utility;
|
||||
|
||||
namespace Content.Server.Procedural;
|
||||
|
||||
@@ -25,6 +27,7 @@ public sealed partial class DungeonJob : Job<Dungeon>
|
||||
private readonly DungeonSystem _dungeon;
|
||||
private readonly EntityLookupSystem _lookup;
|
||||
private readonly SharedTransformSystem _transform;
|
||||
private EntityQuery<TagComponent> _tagQuery;
|
||||
|
||||
private readonly DungeonConfigPrototype _gen;
|
||||
private readonly int _seed;
|
||||
@@ -65,6 +68,7 @@ public sealed partial class DungeonJob : Job<Dungeon>
|
||||
_dungeon = dungeon;
|
||||
_lookup = lookup;
|
||||
_transform = transform;
|
||||
_tagQuery = _entManager.GetEntityQuery<TagComponent>();
|
||||
|
||||
_gen = gen;
|
||||
_grid = grid;
|
||||
@@ -88,10 +92,8 @@ public sealed partial class DungeonJob : Job<Dungeon>
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
foreach (var room in dungeon.Rooms)
|
||||
{
|
||||
dungeon.RoomTiles.UnionWith(room.Tiles);
|
||||
}
|
||||
DebugTools.Assert(dungeon.RoomTiles.Count > 0);
|
||||
DebugTools.Assert(dungeon.RoomExteriorTiles.Count > 0);
|
||||
|
||||
// To make it slightly more deterministic treat this RNG as separate ig.
|
||||
var random = new Random(_seed);
|
||||
@@ -102,10 +104,31 @@ public sealed partial class DungeonJob : Job<Dungeon>
|
||||
|
||||
switch (post)
|
||||
{
|
||||
case AutoCablingPostGen cabling:
|
||||
await PostGen(cabling, dungeon, _gridUid, _grid, random);
|
||||
break;
|
||||
case BoundaryWallPostGen boundary:
|
||||
await PostGen(boundary, dungeon, _gridUid, _grid, random);
|
||||
break;
|
||||
case CornerClutterPostGen clutter:
|
||||
await PostGen(clutter, dungeon, _gridUid, _grid, random);
|
||||
break;
|
||||
case CorridorPostGen cordor:
|
||||
await PostGen(cordor, dungeon, _gridUid, _grid, random);
|
||||
break;
|
||||
case CorridorDecalSkirtingPostGen decks:
|
||||
await PostGen(decks, dungeon, _gridUid, _grid, random);
|
||||
break;
|
||||
case EntranceFlankPostGen flank:
|
||||
await PostGen(flank, dungeon, _gridUid, _grid, random);
|
||||
break;
|
||||
case JunctionPostGen junc:
|
||||
await PostGen(junc, dungeon, _gridUid, _grid, random);
|
||||
break;
|
||||
case MiddleConnectionPostGen dordor:
|
||||
await PostGen(dordor, dungeon, _gridUid, _grid, random);
|
||||
break;
|
||||
case EntrancePostGen entrance:
|
||||
case DungeonEntrancePostGen entrance:
|
||||
await PostGen(entrance, dungeon, _gridUid, _grid, random);
|
||||
break;
|
||||
case ExternalWindowPostGen externalWindow:
|
||||
@@ -114,8 +137,8 @@ public sealed partial class DungeonJob : Job<Dungeon>
|
||||
case InternalWindowPostGen internalWindow:
|
||||
await PostGen(internalWindow, dungeon, _gridUid, _grid, random);
|
||||
break;
|
||||
case BoundaryWallPostGen boundary:
|
||||
await PostGen(boundary, dungeon, _gridUid, _grid, random);
|
||||
case RoomEntrancePostGen rEntrance:
|
||||
await PostGen(rEntrance, dungeon, _gridUid, _grid, random);
|
||||
break;
|
||||
case WallMountPostGen wall:
|
||||
await PostGen(wall, dungeon, _gridUid, _grid, random);
|
||||
@@ -125,7 +148,9 @@ public sealed partial class DungeonJob : Job<Dungeon>
|
||||
}
|
||||
|
||||
await SuspendIfOutOfTime();
|
||||
ValidateResume();
|
||||
|
||||
if (!ValidateResume())
|
||||
break;
|
||||
}
|
||||
|
||||
_grid.CanSplit = true;
|
||||
|
||||
Reference in New Issue
Block a user