Ejemplo n.º 1
0
        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);
            }
        }
Ejemplo n.º 2
0
        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;
        }