public override void Update(TimeSpan elapsed) { // disable previous motions ControlledPlane.EndMotion(PlaneMotionType.All); Plane nearestPlayer = FindNearestPlayersPlane(); if (nearestPlayer == null) { return; } double angleToPlayer = Helper.RelativeAngleBetweenPositions(ControlledPlane.Position, nearestPlayer.Position); double rotationDelta = Helper.NormalizeAngle(angleToPlayer - ControlledPlane.Rotation); if (rotationDelta > 180) // rotate through left side { ControlledPlane.StartMotion(PlaneMotionType.Left); } else { ControlledPlane.StartMotion(PlaneMotionType.Right); } // when player too close and angle deviation too small if ((ControlledPlane.Position - nearestPlayer.Position).Length < ControlledPlane.RelativeGeometry.BoundingRectangle.Height * MAX_DISTANCE_TO_SHOOT_IN_PLANE_HEIGHT && (rotationDelta < MAX_ANGLE_DEVIATION_TO_SHOOT || rotationDelta > 360 - MAX_ANGLE_DEVIATION_TO_SHOOT)) { ControlledPlane.Fire(WeaponPosition.CenterFront); ControlledPlane.Fire(WeaponPosition.LeftFront); ControlledPlane.Fire(WeaponPosition.RightFront); } else { ControlledPlane.StartMotion(PlaneMotionType.Forward); } }
public override void Update(TimeSpan elapsed) { var newState = Keyboard.GetState(); #region Mooving #region Forward if (newState.IsKeyDown(Keys.Up) && m_oldState.IsKeyUp(Keys.Up)) { ControlledPlane.StartMotion(PlaneMotionType.Forward); } if (newState.IsKeyUp(Keys.Up) && m_oldState.IsKeyDown(Keys.Up)) { ControlledPlane.EndMotion(PlaneMotionType.Forward); } #endregion #region Left if (newState.IsKeyDown(Keys.Left) && m_oldState.IsKeyUp(Keys.Left)) { ControlledPlane.StartMotion(PlaneMotionType.Left); } if (newState.IsKeyUp(Keys.Left) && m_oldState.IsKeyDown(Keys.Left)) { ControlledPlane.EndMotion(PlaneMotionType.Left); } #endregion #region Right if (newState.IsKeyDown(Keys.Right) && m_oldState.IsKeyUp(Keys.Right)) { ControlledPlane.StartMotion(PlaneMotionType.Right); } if (newState.IsKeyUp(Keys.Right) && m_oldState.IsKeyDown(Keys.Right)) { ControlledPlane.EndMotion(PlaneMotionType.Right); } #endregion #region Fire if (newState.IsKeyDown(Keys.Space)) { ControlledPlane.Fire(); } if (newState.IsKeyDown(Keys.Z)) { ControlledPlane.Fire(WeaponPosition.LeftFront); } if (newState.IsKeyDown(Keys.X)) { ControlledPlane.Fire(WeaponPosition.RightFront); } #endregion #endregion #region Shield if (newState.IsKeyDown(Keys.LeftShift) && m_oldState.IsKeyUp(Keys.LeftShift)) { ControlledPlane.ActivateShield(); } if (newState.IsKeyUp(Keys.LeftShift) && m_oldState.IsKeyDown(Keys.LeftShift)) { ControlledPlane.DeactivateShield(); } #endregion m_oldState = newState; }