Ore + entitytable fixes (#37675)

* Ore + entitytable fixes

Iterate every dungeon not just last.

* Big shot

* Fixes
This commit is contained in:
metalgearsloth
2025-05-22 02:43:17 +10:00
committed by GitHub
parent ecf9e855f6
commit 298f821bec
4 changed files with 152 additions and 138 deletions

View File

@@ -134,27 +134,15 @@ public sealed partial class DungeonJob : Job<List<Dungeon>>
foreach (var layer in layers)
{
var dungCount = dungeons.Count;
await RunLayer(dungeons, position, layer, reservedTiles, seed, random);
if (config.ReserveTiles)
{
// Remove any dungeons passed in so we don't interfere with them
// This is kinda goofy but okay for now.
if (existing != null)
{
for (var j = 0; j < dungeons.Count; j++)
{
var dung = dungeons[j];
if (existing.Contains(dung))
{
dungeons.RemoveSwap(j);
}
}
}
foreach (var dungeon in dungeons)
// Reserve tiles on any new dungeons.
for (var d = dungCount; d < dungeons.Count; d++)
{
var dungeon = dungeons[d];
reservedTiles.UnionWith(dungeon.AllTiles);
}
}
@@ -202,6 +190,7 @@ public sealed partial class DungeonJob : Job<List<Dungeon>>
npcSystem.WakeNPC(npc.Owner, npc.Comp);
}
_sawmill.Info($"Finished generating dungeon {_gen} with seed {_seed}");
return dungeons;
}
@@ -276,7 +265,7 @@ public sealed partial class DungeonJob : Job<List<Dungeon>>
await PostGen(mob, dungeons[^1], random);
break;
case EntityTableDunGen entityTable:
await PostGen(entityTable, dungeons[^1], random);
await PostGen(entityTable, dungeons, reservedTiles, random);
break;
case NoiseDistanceDunGen distance:
dungeons.Add(await GenerateNoiseDistanceDunGen(position, distance, reservedTiles, seed, random));
@@ -285,7 +274,7 @@ public sealed partial class DungeonJob : Job<List<Dungeon>>
dungeons.Add(await GenerateNoiseDunGen(position, noise, reservedTiles, seed, random));
break;
case OreDunGen ore:
await PostGen(ore, dungeons[^1], random);
await PostGen(ore, dungeons, reservedTiles, random);
break;
case PrefabDunGen prefab:
dungeons.Add(await GeneratePrefabDunGen(position, prefab, reservedTiles, random));