public static ICollider GetLineOfSightObstruction(this RectF from, RectF to, IEnumerable <ICollider> obstacles, CastingMode castingMode = CastingMode.Rough) { var fromBox = new ColliderBox(from); var toBox = new ColliderBox(to); return(GetLineOfSightObstruction(fromBox, toBox, obstacles, castingMode)); }
public static ICollider GetLineOfSightObstruction(this ICollider from, ICollider to, IEnumerable <ICollider> obstacles, CastingMode castingMode = CastingMode.Rough) { var options = new HitDetectionOptions(from, obstacles.Union(new[] { to })); options.Mode = castingMode; options.Angle = options.MovingObject.CalculateAngleTo(to.Bounds); options.Visibility = 3 * options.MovingObject.CalculateDistanceTo(to.Bounds); var prediction = PredictHit(options); if (prediction.Type == HitType.None) { return(null); } else { var obstacleHit = prediction.ColliderHit; return(obstacleHit == to ? null : obstacleHit); } }