DungeonJob.PostGenRoomEntrance.cs 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. using System.Threading.Tasks;
  2. using Content.Shared.Maps;
  3. using Content.Shared.Procedural;
  4. using Content.Shared.Procedural.PostGeneration;
  5. using Content.Shared.Storage;
  6. using Robust.Shared.Map;
  7. namespace Content.Server.Procedural.DungeonJob;
  8. public sealed partial class DungeonJob
  9. {
  10. /// <summary>
  11. /// <see cref="RoomEntranceDunGen"/>
  12. /// </summary>
  13. private async Task PostGen(RoomEntranceDunGen gen, DungeonData data, Dungeon dungeon, HashSet<Vector2i> reservedTiles, Random random)
  14. {
  15. if (!data.Tiles.TryGetValue(DungeonDataKey.FallbackTile, out var tileProto) ||
  16. !data.SpawnGroups.TryGetValue(DungeonDataKey.Entrance, out var entranceProtos) ||
  17. !_prototype.TryIndex(entranceProtos, out var entranceIn))
  18. {
  19. LogDataError(typeof(RoomEntranceDunGen));
  20. return;
  21. }
  22. var setTiles = new List<(Vector2i, Tile)>();
  23. var tileDef = _tileDefManager[tileProto];
  24. foreach (var room in dungeon.Rooms)
  25. {
  26. foreach (var entrance in room.Entrances)
  27. {
  28. setTiles.Add((entrance, _tile.GetVariantTile((ContentTileDefinition) tileDef, random)));
  29. }
  30. }
  31. _maps.SetTiles(_gridUid, _grid, setTiles);
  32. foreach (var room in dungeon.Rooms)
  33. {
  34. foreach (var entrance in room.Entrances)
  35. {
  36. _entManager.SpawnEntities(
  37. _maps.GridTileToLocal(_gridUid, _grid, entrance),
  38. EntitySpawnCollection.GetSpawns(entranceIn.Entries, random));
  39. }
  40. }
  41. }
  42. }