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;
}