Specimen.Components.CLineOfSight.Update C# (CSharp) Method

Update() public method

public Update ( float mFrameTime ) : void
mFrameTime float
return void
        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;
                }
            }
        }