public override void Update(float mFrameTime)
{
Targets.Clear();
var thisPoint = new SSVector2F(_cBody.Position);
foreach (var target in Manager.GetEntitiesByTag(TargetTag))
{
var body = target.GetComponentUnSafe<CBody>();
SSVector2I[] targetPoints =
{
new SSVector2I(body.X, body.Y),
new SSVector2I(body.Left, body.Top),
new SSVector2I(body.Left, body.Bottom),
new SSVector2I(body.Right, body.Top),
new SSVector2I(body.Right, body.Bottom)
};
foreach (var targetPoint in targetPoints)
{
var angleVector = Utils.Math.Angles.ToVectorDegrees(180 + Angle);
var spanVector = thisPoint - targetPoint;
var checkAngle = Math.Abs(angleVector.GetAngleBetween(spanVector));
if (double.IsNaN(checkAngle) || checkAngle > Amplitude) continue;
var polygons = _cShadower.ShadowCaster.Polygons;
if (polygons.Any(x => x.IsIntersecting(targetPoint, 100))) continue;
Targets.Add(new Tuple<Entity, SSVector2I>(target, targetPoint));
break;
}
}
}