Esempio n. 1
0
        public void UpdatePosition(TimeSpan timeDelta)
        {
            double time = timeDelta.TotalSeconds;

            Position = Position.MovedByVector(VectorD.Polar(Speed * time, Heading));
            Speed   += Acceleration * time;

            double turn = TurnSpeed * time;

            Heading       += turn;
            TurretHeading += turn;

            // Calculate turret heading:
            double targetTurretHeading = VectorD.Cartesian(_target.X - Position.X, _target.Y - Position.Y).Heading;
            double turretHeadingDelta  = targetTurretHeading - TurretHeading;
            double turretHeadingChange = Math.Sign(turretHeadingDelta) *
                                         Math.Min(Math.Abs(turretHeadingDelta), TurretTurnSpeedConstant);

            TurretHeading += turretHeadingChange;
        }