Exemplo n.º 1
0
        public void Update(GameObject gameObject, float deltaTime)
        {
            if (!Script.IsNullOrUndefined(Target))
            {
                float lastAngle = _lastDirection.GetAbsoluteAngle();
                Vector2D targetVector = new Vector2D(Target.Location.X - gameObject.Location.X, Target.Location.Y - gameObject.Location.Y);

                double relativeAngle = targetVector.GetAbsoluteAngle() - lastAngle;

                if (Math.Abs(relativeAngle) > Math.PI)
                {
                    if (relativeAngle < 0) relativeAngle += Math.PI * 2;
                    else relativeAngle -= Math.PI * 2;
                }

                if (relativeAngle != 0)
                {
                    Angle = lastAngle + (Math.Min(_rotationSpeed, Math.Abs(relativeAngle)) * (relativeAngle / Math.Abs(relativeAngle)));
                    _lastDirection.X = _speed * Math.Cos(Angle);
                    _lastDirection.Y = _speed * Math.Sin(Angle);
                }
            }

            gameObject.Location.TranslateByVector(_lastDirection);
        }