Haunted dungeon template (#23768)

* haunted dungeon

* Initial work

Still needs prefab gen work to make it interesting.

* ime a worm

* weh

* Work

* Slight tweaks

---------

Co-authored-by: metalgearsloth <comedian_vs_clown@hotmail.com>
This commit is contained in:
Emisse
2024-03-23 21:37:18 -06:00
committed by GitHub
parent 2cc8db3007
commit 952b7f4c4e
17 changed files with 4009 additions and 67 deletions

View File

@@ -26,7 +26,7 @@ public sealed partial class DungeonJob
private bool HasWall(MapGridComponent grid, Vector2i tile)
{
var anchored = grid.GetAnchoredEntitiesEnumerator(tile);
var anchored = _maps.GetAnchoredEntitiesEnumerator(_gridUid, _grid, tile);
while (anchored.MoveNext(out var uid))
{
@@ -52,7 +52,7 @@ public sealed partial class DungeonJob
// Gather existing nodes
foreach (var tile in allTiles)
{
var anchored = grid.GetAnchoredEntitiesEnumerator(tile);
var anchored = _maps.GetAnchoredEntitiesEnumerator(_gridUid, _grid, tile);
while (anchored.MoveNext(out var anc))
{
@@ -186,7 +186,9 @@ public sealed partial class DungeonJob
// - Tiles first
foreach (var neighbor in dungeon.RoomExteriorTiles)
{
if (dungeon.RoomTiles.Contains(neighbor))
DebugTools.Assert(!dungeon.RoomTiles.Contains(neighbor));
if (dungeon.Entrances.Contains(neighbor))
continue;
if (!_anchorable.TileFree(grid, neighbor, DungeonSystem.CollisionLayer, DungeonSystem.CollisionMask))
@@ -265,7 +267,6 @@ public sealed partial class DungeonJob
Random random)
{
var physicsQuery = _entManager.GetEntityQuery<PhysicsComponent>();
var tagQuery = _entManager.GetEntityQuery<TagComponent>();
foreach (var tile in dungeon.CorridorTiles)
{
@@ -771,7 +772,7 @@ public sealed partial class DungeonJob
{
for (var y = -expansion; y <= expansion; y++)
{
var neighbor = new Vector2i(tile.X + x, tile.Y + y);
var neighbor = new Vector2(tile.X + x, tile.Y + y).Floored();
if (dungeon.RoomTiles.Contains(neighbor) ||
dungeon.RoomExteriorTiles.Contains(neighbor) ||
@@ -817,6 +818,52 @@ public sealed partial class DungeonJob
return mod;
});
WidenCorridor(dungeon, gen.Width, corridorTiles);
var setTiles = new List<(Vector2i, Tile)>();
var tileDef = _prototype.Index(gen.Tile);
foreach (var tile in corridorTiles)
{
setTiles.Add((tile, _tile.GetVariantTile(tileDef, random)));
}
grid.SetTiles(setTiles);
dungeon.CorridorTiles.UnionWith(corridorTiles);
BuildCorridorExterior(dungeon);
}
private void BuildCorridorExterior(Dungeon dungeon)
{
var exterior = dungeon.CorridorExteriorTiles;
// Just ignore entrances or whatever for now.
foreach (var tile in dungeon.CorridorTiles)
{
for (var x = -1; x <= 1; x++)
{
for (var y = -1; y <= 1; y++)
{
var neighbor = new Vector2i(tile.X + x, tile.Y + y);
if (dungeon.CorridorTiles.Contains(neighbor) ||
dungeon.RoomExteriorTiles.Contains(neighbor) ||
dungeon.RoomTiles.Contains(neighbor) ||
dungeon.Entrances.Contains(neighbor))
{
continue;
}
exterior.Add(neighbor);
}
}
}
}
private void WidenCorridor(Dungeon dungeon, float width, ICollection<Vector2i> corridorTiles)
{
var expansion = width - 2;
// Widen the path
if (expansion >= 1)
{
@@ -831,7 +878,7 @@ public sealed partial class DungeonJob
{
for (var y = -expansion; y <= expansion; y++)
{
var neighbor = new Vector2i(node.X + x, node.Y + y);
var neighbor = new Vector2(node.X + x, node.Y + y).Floored();
// Diagonals still matter here.
if (dungeon.RoomTiles.Contains(neighbor) ||
@@ -852,36 +899,6 @@ public sealed partial class DungeonJob
corridorTiles.Add(node);
}
}
var setTiles = new List<(Vector2i, Tile)>();
var tileDef = _prototype.Index(gen.Tile);
foreach (var tile in corridorTiles)
{
setTiles.Add((tile, _tile.GetVariantTile(tileDef, random)));
}
grid.SetTiles(setTiles);
dungeon.CorridorTiles.UnionWith(corridorTiles);
var exterior = dungeon.CorridorExteriorTiles;
// Just ignore entrances or whatever for now.
foreach (var tile in dungeon.CorridorTiles)
{
for (var x = -1; x <= 1; x++)
{
for (var y = -1; y <= 1; y++)
{
var neighbor = new Vector2i(tile.X + x, tile.Y + y);
if (dungeon.CorridorTiles.Contains(neighbor))
continue;
exterior.Add(neighbor);
}
}
}
}
private async Task PostGen(EntranceFlankPostGen gen, Dungeon dungeon, EntityUid gridUid, MapGridComponent grid,