1
0

NodeHelpers.cs 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. using System.Diagnostics.CodeAnalysis;
  2. using Robust.Shared.Map;
  3. using Robust.Shared.Map.Components;
  4. namespace Content.Server.NodeContainer.Nodes
  5. {
  6. /// <summary>
  7. /// Helper utilities for implementing <see cref="Node"/>.
  8. /// </summary>
  9. public static class NodeHelpers
  10. {
  11. public static IEnumerable<Node> GetNodesInTile(EntityQuery<NodeContainerComponent> nodeQuery, MapGridComponent grid, Vector2i coords)
  12. {
  13. foreach (var entityUid in grid.GetAnchoredEntities(coords))
  14. {
  15. if (!nodeQuery.TryGetComponent(entityUid, out var container))
  16. continue;
  17. foreach (var node in container.Nodes.Values)
  18. {
  19. yield return node;
  20. }
  21. }
  22. }
  23. public static IEnumerable<(Direction dir, Node node)> GetCardinalNeighborNodes(
  24. EntityQuery<NodeContainerComponent> nodeQuery,
  25. MapGridComponent grid,
  26. Vector2i coords,
  27. bool includeSameTile = true)
  28. {
  29. foreach (var (dir, entityUid) in GetCardinalNeighborCells(grid, coords, includeSameTile))
  30. {
  31. if (!nodeQuery.TryGetComponent(entityUid, out var container))
  32. continue;
  33. foreach (var node in container.Nodes.Values)
  34. {
  35. yield return (dir, node);
  36. }
  37. }
  38. }
  39. [SuppressMessage("ReSharper", "EnforceForeachStatementBraces")]
  40. public static IEnumerable<(Direction dir, EntityUid entity)> GetCardinalNeighborCells(
  41. MapGridComponent grid,
  42. Vector2i coords,
  43. bool includeSameTile = true)
  44. {
  45. if (includeSameTile)
  46. {
  47. foreach (var uid in grid.GetAnchoredEntities(coords))
  48. yield return (Direction.Invalid, uid);
  49. }
  50. foreach (var uid in grid.GetAnchoredEntities(coords + (0, 1)))
  51. yield return (Direction.North, uid);
  52. foreach (var uid in grid.GetAnchoredEntities(coords + (0, -1)))
  53. yield return (Direction.South, uid);
  54. foreach (var uid in grid.GetAnchoredEntities(coords + (1, 0)))
  55. yield return (Direction.East, uid);
  56. foreach (var uid in grid.GetAnchoredEntities(coords + (-1, 0)))
  57. yield return (Direction.West, uid);
  58. }
  59. }
  60. }