示例#1
0
        public override void ProcessInput(float elapsedTime, InputManager input)
        {
            if (input == null)
            {
                throw new ArgumentNullException("input");
            }

            const float rotationVelocity = 3.0f;

            int i, j = (int)gameManager.GameMode;

            for (i = 0; i < j; i++)
            {
                if (confirmed[i] == false)
                {
                    // change invert Y selection
                    if (input.IsKeyPressed(i, Keys.Y) || input.IsButtonPressedY(i))
                    {
                        invertY ^= ((uint)1 << i);
                        gameManager.PlaySound("menu_change");
                    }

                    // confirm selection
                    if (input.IsKeyPressed(i, Keys.Enter) || input.IsButtonPressedA(i))
                    {
                        confirmed[i] = true;
                        gameManager.PlaySound("menu_select");
                    }

                    // cancel and return to intro menu
                    if (input.IsKeyPressed(i, Keys.Escape) || input.IsButtonPressedB(i))
                    {
                        gameManager.SetShips(null, null, 0);
                        screenManager.SetNextScreen(ScreenType.ScreenIntro);
                        gameManager.PlaySound("menu_cancel");
                    }

                    // rotate ship
                    float RotX = rotationVelocity * input.LeftStick(i).X *elapsedTime;
                    if (input.IsKeyDown(i, Keys.Left))
                    {
                        RotX -= rotationVelocity * elapsedTime;
                    }
                    if (input.IsKeyDown(i, Keys.Right))
                    {
                        RotX += rotationVelocity * elapsedTime;
                    }
                    if (Math.Abs(RotX) < 0.001f)
                    {
                        RotX = -0.5f * elapsedTime;
                    }
                    rotation[i] = rotation[i] * Matrix.CreateRotationY(RotX);

                    // change ship (next)
                    if (input.IsKeyPressed(i, Keys.Up) ||
                        input.IsButtonPressedDPadUp(i) ||
                        input.IsButtonPressedLeftStickUp(i))
                    {
                        selection[i] = (selection[i] + 1) % NumberShips;
                        gameManager.PlaySound("menu_change");
                    }

                    // change ship (previous)
                    if (input.IsKeyPressed(i, Keys.Down) ||
                        input.IsButtonPressedDPadDown(i) ||
                        input.IsButtonPressedLeftStickDown(i))
                    {
                        if (selection[i] == 0)
                        {
                            selection[i] = NumberShips - 1;
                        }
                        else
                        {
                            selection[i] = selection[i] - 1;
                        }
                        gameManager.PlaySound("menu_change");
                    }
                }
                else
                {
                    // cancel selection
                    if (input.IsKeyPressed(i, Keys.Escape) || input.IsButtonPressedB(i))
                    {
                        confirmed[i] = false;
                        gameManager.PlaySound("menu_cancel");
                    }
                }
            }

            // if both ships confirmed, go to game screen
            if (confirmed[0] && confirmed[1])
            {
                if (gameManager.GameMode == GameMode.SinglePlayer)
                {
                    gameManager.SetShips(ships[selection[0]], null, invertY);
                }
                else
                {
                    gameManager.SetShips(ships[selection[0]],
                                         ships[selection[1]], invertY);
                }
                screenManager.SetNextScreen(ScreenType.ScreenLevel);
            }
        }
示例#2
0
        public override void ProcessInput(float elapsedTime, InputManager input)
        {
            if (input == null)
            {
                throw new ArgumentNullException("input");
            }

            const float rotationVelocity = 3.0f;

            int i, j = (int)gameManager.GameMode;

            for (i = 0; i < j; i++)
                if (confirmed[i] == false)
                {
                    // change invert Y selection
                    if (input.IsKeyPressed(i, Keys.Y) || input.IsButtonPressedY(i))
                    {
                        invertY ^= ((uint)1 << i);
                        gameManager.PlaySound("menu_change");
                    }

                    // confirm selection
                    if (input.IsKeyPressed(i, Keys.Enter) || input.IsButtonPressedA(i))
                    {
                        confirmed[i] = true;
                        gameManager.PlaySound("menu_select");
                    }

                    // cancel and return to intro menu
                    if (input.IsKeyPressed(i, Keys.Escape) || input.IsButtonPressedB(i))
                    {
                        gameManager.SetShips(null, null, 0);
                        screenManager.SetNextScreen(ScreenType.ScreenIntro);
                        gameManager.PlaySound("menu_cancel");
                    }

                    // rotate ship
                    float RotX = rotationVelocity * input.LeftStick(i).X * elapsedTime;
                    if (input.IsKeyDown(i, Keys.Left))
                        RotX -= rotationVelocity * elapsedTime;
                    if (input.IsKeyDown(i, Keys.Right))
                        RotX += rotationVelocity * elapsedTime;
                    if (Math.Abs(RotX) < 0.001f)
                        RotX = -0.5f * elapsedTime;
                    rotation[i] = rotation[i] * Matrix.CreateRotationY(RotX);

                    // change ship (next)
                    if (input.IsKeyPressed(i, Keys.Up) ||
                        input.IsButtonPressedDPadUp(i) ||
                        input.IsButtonPressedLeftStickUp(i))
                    {
                        selection[i] = (selection[i] + 1) % NumberShips;
                        gameManager.PlaySound("menu_change");
                    }

                    // change ship (previous)
                    if (input.IsKeyPressed(i, Keys.Down) ||
                        input.IsButtonPressedDPadDown(i) ||
                        input.IsButtonPressedLeftStickDown(i))
                    {
                        if (selection[i] == 0)
                            selection[i] = NumberShips - 1;
                        else
                            selection[i] = selection[i] - 1;
                        gameManager.PlaySound("menu_change");
                    }
                }
                else
                {
                    // cancel selection
                    if (input.IsKeyPressed(i, Keys.Escape) || input.IsButtonPressedB(i))
                    {
                        confirmed[i] = false;
                        gameManager.PlaySound("menu_cancel");
                    }
                }

            // if both ships confirmed, go to game screen
            if (confirmed[0] && confirmed[1])
            {
                if (gameManager.GameMode == GameMode.SinglePlayer)
                    gameManager.SetShips(ships[selection[0]], null, invertY);
                else
                    gameManager.SetShips(ships[selection[0]],
                                ships[selection[1]], invertY);
                screenManager.SetNextScreen(ScreenType.ScreenLevel);
            }
        }