1
0

GridInRange.cs 1011 B

123456789101112131415161718192021222324252627282930313233343536373839
  1. using System.Numerics;
  2. using Robust.Shared.Map;
  3. namespace Content.Shared.Random.Rules;
  4. /// <summary>
  5. /// Returns true if on a grid or in range of one.
  6. /// </summary>
  7. public sealed partial class GridInRangeRule : RulesRule
  8. {
  9. [DataField]
  10. public float Range = 10f;
  11. public override bool Check(EntityManager entManager, EntityUid uid)
  12. {
  13. if (!entManager.TryGetComponent(uid, out TransformComponent? xform))
  14. {
  15. return false;
  16. }
  17. if (xform.GridUid != null)
  18. {
  19. return !Inverted;
  20. }
  21. var transform = entManager.System<SharedTransformSystem>();
  22. var mapManager = IoCManager.Resolve<IMapManager>();
  23. var worldPos = transform.GetWorldPosition(xform);
  24. var gridRange = new Vector2(Range, Range);
  25. foreach (var _ in mapManager.FindGridsIntersecting(xform.MapID, new Box2(worldPos - gridRange, worldPos + gridRange)))
  26. {
  27. return !Inverted;
  28. }
  29. return Inverted;
  30. }
  31. }