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; }