public void FindRotationAdjustmentTest()
        {
            Assert.AreEqual(3 * MathHelper.PiOver4, VectorHelpers.FindRotationAdjustment(new Vector2(1, 0), new Vector2(0, 1), MathHelper.ToRadians(0)), 0.01);
            Assert.AreEqual(1 * MathHelper.PiOver4, VectorHelpers.FindRotationAdjustment(new Vector2(1, 0), new Vector2(0, 1), MathHelper.ToRadians(90)), 0.01);
            Assert.AreEqual(-1 * MathHelper.PiOver4, VectorHelpers.FindRotationAdjustment(new Vector2(1, 0), new Vector2(0, 1), MathHelper.ToRadians(180)), 0.01);
            Assert.AreEqual(-3 * MathHelper.PiOver4, VectorHelpers.FindRotationAdjustment(new Vector2(1, 0), new Vector2(0, 1), MathHelper.ToRadians(270)), 0.01);

            Assert.AreEqual(-1 * MathHelper.PiOver4, VectorHelpers.FindRotationAdjustment(new Vector2(0, 1), new Vector2(1, 0), MathHelper.ToRadians(0)), 0.01);
        }
Example #2
0
        public override void Update()
        {
            Point   target = TargetEntity != null ? TargetEntity.Position : Target;
            Vector2 targetPositionVector = new Vector2(target.X, target.Y);

            float rotationDiff = VectorHelpers.FindRotationAdjustment(PositionVector, targetPositionVector, Rotation);
            float turnFactor   = Math.Min(TurnRate / Math.Abs(rotationDiff), 1);
            float amountToTurn = rotationDiff * turnFactor;

            Rotation += amountToTurn;

            float distanceToTarget = Vector2.Distance(targetPositionVector, PositionVector);
            float distanceToFly    = Math.Min(distanceToTarget, MovementSpeed);

            PositionVector = VectorHelpers.MoveInDirection(PositionVector, Rotation, distanceToFly);

            if (Vector2.Distance(targetPositionVector, PositionVector) < ExplosionRadius)
            {
                Explode();
            }
        }