예제 #1
0
        /// <summary>
        /// Handles input, performs physics, and animates the player sprite.
        /// </summary>
        /// <remarks>
        /// We pass in all of the input states so that our game is only polling the hardware
        /// once per frame. We also pass the game's orientation because when using the accelerometer,
        /// we need to reverse our motion when the orientation is in the LandscapeRight orientation.
        /// </remarks>
        public void Update(
            GameTime gameTime,
            KeyboardState keyboardState,
            GamePadState gamePadState,
            TouchCollection touchState,
            AccelerometerState accelState,
            DisplayOrientation orientation)
        {
            input = GetInput(keyboardState, gamePadState, touchState, accelState, orientation);
            ParseInput(input);

            if (IsAlive == false & isOnGround == true)
            {
                //DeadFall();
                //return;
            }

            //ApplyPhysicsNew(gameTime);
            HandleCollisions();


            float elapsed = (float)gameTime.ElapsedGameTime.TotalSeconds;

            sprite.UpdateFrame(elapsed, ref _position, ref face, ref spriteState);
        }
예제 #2
0
        private Enumeration.Input GetTouchInput(TouchCollection touchState)
        {
            Enumeration.Input lastInput = Enumeration.Input.none;
            bool shiftInput             = false;
            int  pixelToX = 0;
            int  pixelToY = 0;

#if ANDROID
            pixelToX = 50;
            pixelToY = 50;
#elif WINDOWS
            pixelToX = 50;
#endif

            Vector2 touchDepth = Vector2.Zero;

            if (touchState.Count() == 0)
            {
                touchPositionRect = Rectangle.Empty;
                return(lastInput);
            }

            for (int x = 0; x < touchState.Count; x++)
            {
                touchPositionRect = new Rectangle((int)touchState[x].Position.X - pixelToX, (int)touchState[x].Position.Y - pixelToY, 60, 60);

                touchDepth = PoP.CntShiftZone.GetIntersectionDepth(touchPositionRect);
                if (touchDepth.X > 0 | touchDepth.Y > 0)
                {
                    shiftInput = true;
                    lastInput  = Enumeration.Input.shift;
                    continue;
                }

                touchDepth = PoP.CntUpZone.GetIntersectionDepth(touchPositionRect);
                if (touchDepth.X > 0 | touchDepth.Y > 0)
                {
                    lastInput = Enumeration.Input.up;
                    continue;
                }
                touchDepth = PoP.CntUpLeftZone.GetIntersectionDepth(touchPositionRect);
                if (touchDepth.X > 0 | touchDepth.Y > 0)
                {
                    lastInput = Enumeration.Input.leftup;
                    continue;
                }
                touchDepth = PoP.CntUpRightZone.GetIntersectionDepth(touchPositionRect);
                if (touchDepth.X > 0 | touchDepth.Y > 0)
                {
                    lastInput = Enumeration.Input.rightup;
                    continue;
                }
                touchDepth = PoP.CntLeftZone.GetIntersectionDepth(touchPositionRect);
                if (touchDepth.X > 0 | touchDepth.Y > 0)
                {
                    lastInput = Enumeration.Input.left;
                    continue;
                }
                touchDepth = PoP.CntLeftZone.GetIntersectionDepth(touchPositionRect);
                if (touchDepth.X > 0 | touchDepth.Y > 0)
                {
                    if (PoP.CntCenterZone.Contains((int)touchState[x].Position.X, (int)touchState[x].Position.Y))
                    {
                        //lastInput = Enumeration.Input.none;
                        continue;
                    }
                }
                touchDepth = PoP.CntRightZone.GetIntersectionDepth(touchPositionRect);
                if (touchDepth.X > 0 | touchDepth.Y > 0)
                {
                    lastInput = Enumeration.Input.right;
                    continue;
                }
                touchDepth = PoP.CntDownLeftZone.GetIntersectionDepth(touchPositionRect);
                if (touchDepth.X > 0 | touchDepth.Y > 0)
                {
                    lastInput = Enumeration.Input.leftdown;
                    continue;
                }
                touchDepth = PoP.CntDownZone.GetIntersectionDepth(touchPositionRect);
                if (touchDepth.X > 0 | touchDepth.Y > 0)
                {
                    lastInput = Enumeration.Input.down;
                    continue;
                }
                touchDepth = PoP.CntDownRightZone.GetIntersectionDepth(touchPositionRect);
                if (touchDepth.X > 0 | touchDepth.Y > 0)
                {
                    lastInput = Enumeration.Input.righdown;
                    continue;
                }
            }

            if (shiftInput == false)
            {
                return(lastInput);
            }

            switch (lastInput)
            {
            case Enumeration.Input.left: return(Enumeration.Input.leftshift);

            case Enumeration.Input.right: return(Enumeration.Input.rightshift);

            case Enumeration.Input.down: return(Enumeration.Input.downshift);

            case Enumeration.Input.up: return(Enumeration.Input.upshift);

            default:
                return(lastInput);
            }
        }
예제 #3
0
        private Enumeration.Input GetKeyboardInput(KeyboardState keyboardState)
        {
            Enumeration.Input input = Enumeration.Input.none;

            if (keyboardState.GetPressedKeys().Count() == 0)
            {
                return(input);
            }

            Keys?shiftKey = null;

            //////////
            //SHIFT SUBST FOR LEFT OR RIGHT SHIFT
            //////////
            for (int x = 0; x < keyboardState.GetPressedKeys().Count(); x++)
            {
                if (keyboardState.GetPressedKeys()[x] == Keys.LeftShift)
                {
                    shiftKey = Keys.LeftShift;
                    continue;
                }
                if (keyboardState.GetPressedKeys()[x] == Keys.RightShift)
                {
                    shiftKey = Keys.LeftShift;
                }
            }


            if (keyboardState.GetPressedKeys().Count() == 1 & shiftKey == Keys.LeftShift)
            {
                return(Enumeration.Input.shift);
            }

            //////////
            //LEFT
            //////////
            if (keyboardState.IsKeyDown(Keys.Up) & keyboardState.IsKeyDown(Keys.Left))
            {
                return(Enumeration.Input.leftup);
            }

            if (keyboardState.IsKeyDown(Keys.Down) & keyboardState.IsKeyDown(Keys.Left))
            {
                return(Enumeration.Input.leftdown);
            }

            if (keyboardState.IsKeyDown(Keys.Left) & (shiftKey == Keys.LeftShift))
            {
                return(Enumeration.Input.leftshift);
            }

            if (keyboardState.IsKeyDown(Keys.Left) || keyboardState.IsKeyDown(Keys.A))
            {
                return(Enumeration.Input.left);
            }

            //////////
            //RIGHT
            //////////
            if (keyboardState.IsKeyDown(Keys.Up) & keyboardState.IsKeyDown(Keys.Right) || keyboardState.IsKeyDown(Keys.E))
            {
                return(Enumeration.Input.rightup);
            }

            if (keyboardState.IsKeyDown(Keys.Down) & keyboardState.IsKeyDown(Keys.Right) || keyboardState.IsKeyDown(Keys.C))
            {
                return(Enumeration.Input.righdown);
            }

            if (keyboardState.IsKeyDown(Keys.Right) & shiftKey == Keys.LeftShift)
            {
                return(Enumeration.Input.rightshift);
            }

            if (keyboardState.IsKeyDown(Keys.Right) || keyboardState.IsKeyDown(Keys.D))
            {
                return(Enumeration.Input.right);
            }
            //////
            //UP//
            //////

            if (keyboardState.IsKeyDown(Keys.Up) || keyboardState.IsKeyDown(Keys.W))
            {
                return(Enumeration.Input.up);
            }
            ///////
            //DOWN/
            ///////
            if (keyboardState.IsKeyDown(Keys.Down) || keyboardState.IsKeyDown(Keys.S))
            {
                return(Enumeration.Input.down);
            }

            ////////
            //NONE//
            return(Enumeration.Input.none);
        }
예제 #4
0
        public void ParseInput(Enumeration.Input input)
        {
            //if (spriteState.Value().state == Enumeration.State.question)
            //    Question();


            if (spriteState.Value().Priority == Enumeration.PriorityState.Normal & sprite.IsStoppable == false)
            {
                return;
            }

            switch (input)
            {
            case Enumeration.Input.none:
                switch (spriteState.Value().state)
                {
                case Enumeration.State.none:
                    Stand(spriteState.Value().Priority);
                    break;

                case Enumeration.State.stand:
                    Stand(spriteState.Value().Priority);
                    break;

                case Enumeration.State.startrun:
                    RunStop();
                    break;

                case Enumeration.State.running:
                    RunStop();
                    break;

                case Enumeration.State.step1:
                    Stand();
                    break;

                case Enumeration.State.stepfall:
                    StepFall(spriteState.Value().Priority, spriteState.Value().OffSet);
                    break;

                case Enumeration.State.crouch:
                    StandUp();
                    break;

                case Enumeration.State.highjump:
                    Stand();
                    break;

                case Enumeration.State.hangstraight:
                case Enumeration.State.hang:
                    HangDrop();
                    break;

                case Enumeration.State.bump:
                    Bump(spriteState.Value().Priority);
                    break;

                default:
                    break;
                }
                break;

            //LEFT//////////////////////
            case Enumeration.Input.left:
                switch (spriteState.Value().state)
                {
                case Enumeration.State.stand:
                    if (face == SpriteEffects.FlipHorizontally)
                    {
                        Turn();
                    }
                    else
                    {
                        StartRunning();
                    }
                    break;

                case Enumeration.State.step1:
                    StartRunning();
                    break;

                case Enumeration.State.crouch:
                    if (face == SpriteEffects.FlipHorizontally)
                    {
                        return;
                    }
                    Crawl();
                    break;

                case Enumeration.State.stepfall:
                    StepFall();
                    break;

                case Enumeration.State.startrun:
                    if (face == SpriteEffects.FlipHorizontally)
                    {
                        RunTurn();
                    }
                    break;

                //case Enumeration.State.hang:
                //    HangDrop();
                //    break;
                case Enumeration.State.bump:
                    Bump(spriteState.Value().Priority);
                    break;

                case Enumeration.State.ready:
                    if (face == SpriteEffects.FlipHorizontally)
                    {
                        Retreat();
                    }
                    else
                    {
                        Advance();
                    }
                    break;

                default:
                    break;
                }
                break;

            //SHIFTLEFT//////////////////////
            case Enumeration.Input.leftshift:
                switch (spriteState.Value().state)
                {
                case Enumeration.State.stand:
                    if (face == SpriteEffects.FlipHorizontally)
                    {
                        Turn();
                    }
                    else
                    {
                        StepForward();
                    }
                    break;

                case Enumeration.State.hangstraight:
                case Enumeration.State.hang:
                    Hang();
                    break;

                case Enumeration.State.bump:
                    Bump(spriteState.Value().Priority);
                    break;

                case Enumeration.State.ready:
                    Strike(spriteState.Value().Priority);
                    break;


                default:
                    break;
                }
                break;

            //LEFTDOWN//////////////////////
            case Enumeration.Input.leftdown:
                switch (spriteState.Value().state)
                {
                case Enumeration.State.crouch:
                    if (face == SpriteEffects.None)
                    {
                        Crawl();
                    }
                    break;

                case Enumeration.State.startrun:
                    Stoop(new Vector2(5, 0));
                    break;

                default:
                    break;
                }
                break;

            //LEFTUP//////////////////////
            case Enumeration.Input.leftup:
                switch (spriteState.Value().state)
                {
                case Enumeration.State.stand:
                    StandJump();
                    break;

                case Enumeration.State.startrun:
                    RunJump();
                    break;

                case Enumeration.State.stepfall:
                    StepFall();
                    break;

                default:
                    break;
                }
                break;

            //RIGHT//////////////////////
            case Enumeration.Input.right:
                switch (spriteState.Value().state)
                {
                case Enumeration.State.stand:
                    if (face == SpriteEffects.None)
                    {
                        Turn();
                    }
                    else
                    {
                        StartRunning();
                    }
                    break;

                case Enumeration.State.step1:
                    StartRunning();
                    break;

                case Enumeration.State.crouch:
                    if (face == SpriteEffects.None)
                    {
                        return;
                    }
                    Crawl();
                    break;

                case Enumeration.State.stepfall:
                    StepFall();
                    break;

                case Enumeration.State.startrun:
                    if (face == SpriteEffects.None)
                    {
                        RunTurn();
                    }
                    break;

                case Enumeration.State.ready:
                    if (face == SpriteEffects.FlipHorizontally)
                    {
                        Advance();
                    }
                    else
                    {
                        Retreat();
                    }
                    break;

                default:
                    break;
                }
                break;

            //SHIFTRIGHT//////////////////////
            case Enumeration.Input.rightshift:
                switch (spriteState.Value().state)
                {
                case Enumeration.State.stand:
                    if (face == SpriteEffects.None)
                    {
                        Turn();
                    }
                    else
                    {
                        StepForward();
                    }
                    break;

                case Enumeration.State.hang:
                    Hang();
                    break;

                case Enumeration.State.ready:
                    Strike(spriteState.Value().Priority);
                    break;

                default:
                    break;
                }
                break;

            //RIGHTDOWN//////////////////////
            case Enumeration.Input.righdown:
                switch (spriteState.Value().state)
                {
                case Enumeration.State.crouch:
                    if (face != SpriteEffects.None)
                    {
                        Crawl();
                    }
                    break;

                case Enumeration.State.hang:
                    ClimbFail();
                    break;

                case Enumeration.State.startrun:
                    Stoop(new Vector2(5, 0));
                    break;

                default:
                    break;
                }
                break;

            //RIGHTUP//////////////////////
            case Enumeration.Input.rightup:
                switch (spriteState.Value().state)
                {
                case Enumeration.State.stand:
                    StandJump();
                    break;

                case Enumeration.State.startrun:
                    RunJump();
                    break;

                case Enumeration.State.stepfall:
                    StepFall();
                    break;

                default:
                    break;
                }
                break;

            //DOWN//////////////////////
            case Enumeration.Input.down:
            case Enumeration.Input.downshift:
                switch (spriteState.Value().state)
                {
                case Enumeration.State.stand:
                    Stoop();
                    break;

                case Enumeration.State.hang:
                case Enumeration.State.hangstraight:
                    HangDrop();
                    break;

                case Enumeration.State.startrun:
                    Stoop(new Vector2(5, 0));
                    break;

                case Enumeration.State.ready:
                    if (Sword == true)
                    {
                        PutOffSword();
                    }
                    break;

                default:
                    break;
                }
                break;

            //UP//////////////////////
            case Enumeration.Input.up:
            case Enumeration.Input.upshift:
                switch (spriteState.Value().state)
                {
                case Enumeration.State.running:
                case Enumeration.State.startrun:
                    RunStop();
                    break;

                case Enumeration.State.stand:
                    HighJump();
                    break;

                case Enumeration.State.jumphangLong:
                case Enumeration.State.jumphangMed:
                case Enumeration.State.hang:
                case Enumeration.State.hangstraight:
                    ClimbUp();
                    if (input == Enumeration.Input.upshift)
                    {
                        Hang();
                    }
                    break;

                default:
                    break;
                }
                break;

            //SHIFT/////////////////////////
            case Enumeration.Input.shift:
                switch (spriteState.Value().state)
                {
                //case Enumeration.State.hang:
                //    Hang();
                //    break;
                case Enumeration.State.jumphangLong:
                case Enumeration.State.jumphangMed:
                    Hang();
                    break;

                case Enumeration.State.ready:
                    Strike(spriteState.Value().Priority);
                    break;

                case Enumeration.State.stepfall:
                case Enumeration.State.freefall:
                    if (isHangable() == true)
                    {
                        Hang();
                    }
                    break;

                default:
                    CheckItemOnFloor();
                    break;
                }
                break;

            default:
                break;
            }
        }