Fix exped dungeons (#23654)

mapBounds was null after one of my last changes. I changed the transform so it's just passed in directly as I don't think there was an easy way around it.

I checked magnet + roomfills still work.
This commit is contained in:
metalgearsloth
2024-01-07 14:23:53 +11:00
committed by GitHub
parent fb24f9accf
commit 3452521021
5 changed files with 64 additions and 33 deletions

View File

@@ -159,7 +159,6 @@ public sealed partial class DungeonJob
{
var pack = chosenPacks[i]!;
var packTransform = packTransforms[i];
var packRotation = packRotations[i];
// Actual spawn cud here.
// Pickout the room pack template to get the room dimensions we need.
@@ -199,14 +198,25 @@ public sealed partial class DungeonJob
_sawmill.Debug($"Using rotated variant for room");
}
var room = roomProto[random.Next(roomProto.Count)];
if (roomDimensions.X == roomDimensions.Y)
{
// Give it a random rotation
roomRotation = random.Next(4) * Math.PI / 2;
}
else if (random.Next(2) == 1)
{
roomRotation += Math.PI;
}
var roomTransform = Matrix3.CreateTransform(roomSize.Center - packCenter, roomRotation);
Matrix3.Multiply(roomTransform, packTransform, out matty);
Matrix3.Multiply(matty, dungeonTransform, out var dungeonMatty);
// The expensive bit yippy.
var room = roomProto[random.Next(roomProto.Count)];
_dungeon.SpawnRoom(gridUid, grid, matty, room, random, rotation: true);
_dungeon.SpawnRoom(gridUid, grid, dungeonMatty, room);
var roomCenter = (room.Offset + room.Size / 2f) * grid.TileSize;
var roomTiles = new HashSet<Vector2i>(room.Size.X * room.Size.Y);
@@ -230,9 +240,18 @@ public sealed partial class DungeonJob
var center = Vector2.Zero;
foreach (var tile in roomTiles)
for (var x = 0; x < room.Size.X; x++)
{
center += tile + grid.TileSizeHalfVector;
for (var y = 0; y < room.Size.Y; y++)
{
var roomTile = new Vector2i(x + room.Offset.X, y + room.Offset.Y);
var tilePos = dungeonMatty.Transform(roomTile + tileOffset);
var tileIndex = tilePos.Floored();
roomTiles.Add(tileIndex);
mapBounds = mapBounds?.Union(tileIndex) ?? new Box2i(tileIndex, tileIndex);
center += tilePos + grid.TileSizeHalfVector;
}
}
center /= roomTiles.Count;