Don't spawn obstructed exp objectives (#17921)

This commit is contained in:
metalgearsloth
2023-07-10 17:16:10 +10:00
committed by GitHub
parent 48276eb00a
commit 1bb491f4a8

View File

@@ -271,15 +271,33 @@ public sealed class SpawnSalvageMissionJob : Job<bool>
var structureCount = _salvage.GetStructureCount(mission.Difficulty);
var shaggy = faction.Configs["DefenseStructure"];
var validSpawns = new List<Vector2i>();
// Spawn the objectives
for (var i = 0; i < structureCount; i++)
{
var structureRoom = availableRooms[random.Next(availableRooms.Count)];
var spawnTile = structureRoom.Tiles.ElementAt(random.Next(structureRoom.Tiles.Count));
var uid = _entManager.SpawnEntity(shaggy, grid.GridTileToLocal(spawnTile));
_entManager.AddComponent<SalvageStructureComponent>(uid);
structureComp.Structures.Add(uid);
validSpawns.Clear();
validSpawns.AddRange(structureRoom.Tiles);
random.Shuffle(validSpawns);
while (validSpawns.Count > 0)
{
var spawnTile = validSpawns[^1];
validSpawns.RemoveAt(validSpawns.Count - 1);
if (!_anchorable.TileFree(grid, spawnTile, (int) CollisionGroup.MachineLayer,
(int) CollisionGroup.MachineLayer))
{
continue;
}
var spawnPosition = grid.GridTileToLocal(spawnTile);
var uid = _entManager.SpawnEntity(shaggy, spawnPosition);
_entManager.AddComponent<SalvageStructureComponent>(uid);
structureComp.Structures.Add(uid);
break;
}
}
}
@@ -335,27 +353,28 @@ public sealed class SpawnSalvageMissionJob : Job<bool>
validSpawns.AddRange(spawnRoom.Tiles);
random.Shuffle(validSpawns);
while (validSpawns.Count > 0)
foreach (var entry in EntitySpawnCollection.GetSpawns(mobGroup.Entries, random))
{
var spawnTile = validSpawns[^1];
if (!_anchorable.TileFree(grid, spawnTile, (int) CollisionGroup.MachineLayer, (int) CollisionGroup.MachineLayer))
while (validSpawns.Count > 0)
{
var spawnTile = validSpawns[^1];
validSpawns.RemoveAt(validSpawns.Count - 1);
continue;
}
var spawnPosition = grid.GridTileToLocal(spawnTile);
if (!_anchorable.TileFree(grid, spawnTile, (int) CollisionGroup.MachineLayer,
(int) CollisionGroup.MachineLayer))
{
continue;
}
var spawnPosition = grid.GridTileToLocal(spawnTile);
foreach (var entry in EntitySpawnCollection.GetSpawns(mobGroup.Entries, random))
{
var uid = _entManager.CreateEntityUninitialized(entry, spawnPosition);
_entManager.RemoveComponent<GhostTakeoverAvailableComponent>(uid);
_entManager.RemoveComponent<GhostRoleComponent>(uid);
_entManager.InitializeAndStartEntity(uid);
}
break;
break;
}
}
await SuspendIfOutOfTime();