using System.Numerics; using Robust.Shared.Map; namespace Content.Shared.Random.Rules; /// /// Returns true if on a grid or in range of one. /// public sealed partial class GridInRangeRule : RulesRule { [DataField] public float Range = 10f; public override bool Check(EntityManager entManager, EntityUid uid) { if (!entManager.TryGetComponent(uid, out TransformComponent? xform)) { return false; } if (xform.GridUid != null) { return !Inverted; } var transform = entManager.System(); var mapManager = IoCManager.Resolve(); var worldPos = transform.GetWorldPosition(xform); var gridRange = new Vector2(Range, Range); foreach (var _ in mapManager.FindGridsIntersecting(xform.MapID, new Box2(worldPos - gridRange, worldPos + gridRange))) { return !Inverted; } return Inverted; } }