using System.Numerics; using Robust.Shared.Map; using Robust.Shared.Map.Components; using Robust.Shared.Prototypes; namespace Content.Shared.EntityConditions.Conditions.Generic; /// /// Returns true if entity is on a grid or in range of one. /// public sealed partial class GridInRangeConditionSystem : EntityConditionSystem { [Dependency] private SharedTransformSystem _transform = default!; [Dependency] private SharedMapSystem _map = default!; protected override void Condition(Entity entity, ref EntityConditionEvent args) { if (entity.Comp.GridUid != null) { args.Result = true; return; } var worldPos = _transform.GetWorldPosition(entity.Comp); var gridRange = new Vector2(args.Condition.Range, args.Condition.Range); List> grids = []; _map.FindGridsIntersecting(entity.Comp.MapID, new Box2(worldPos - gridRange, worldPos + gridRange), ref grids); args.Result = grids.Count > 0; } } /// public sealed partial class GridInRangeCondition : EntityConditionBase { [DataField] public float Range = 10f; public override string EntityConditionGuidebookText(IPrototypeManager prototype) => String.Empty; }