コード例 #1
0
        protected override void OnUpdate(ref UpdateParams p)
        {
            base.OnUpdate(ref p);
            MoveSpeed = 1.5f;
            float dx = 0f, dy = 0f;

            KeyboardState kb = Keyboard.GetState();

            if (kb.IsKeyDown(Keys.Up) || kb.IsKeyDown(Keys.W))
            {
                if (pressTime == 0f)
                {
                    dy = -1.0f;
                }
                pressTime += p.Dt;
            }
            else if (kb.IsKeyDown(Keys.Down) || kb.IsKeyDown(Keys.S))
            {
                MoveSpeed = 4.5f;
                if (pressTime == 0f)
                {
                    dy = +1.0f;
                }
                pressTime += p.Dt;
            }
            else if (kb.IsKeyDown(Keys.Left) || kb.IsKeyDown(Keys.A))
            {
                if (pressTime == 0f)
                {
                    dx = -1.0f;
                }
                pressTime += p.Dt;
            }
            else if (kb.IsKeyDown(Keys.Right) || kb.IsKeyDown(Keys.D))
            {
                if (pressTime == 0f)
                {
                    dx = +1.0f;
                }
                pressTime += p.Dt;
            }
            else
            {
                pressTime = 0f;
            }

            // trigger Toy
            KeyboardState kbstate             = Keyboard.GetState();
            bool          isTriggerKeyPressed = kbstate.IsKeyDown(Keys.Space) ||
                                                kbstate.IsKeyDown(Keys.X) ||
                                                kbstate.IsKeyDown(Keys.LeftControl);
            Toy t = ParentThing.ToyActive;

            if (!isTriggerPressed && isTriggerKeyPressed)
            {
                isTriggerPressed = true;

                // use toy
                if (t != null)
                {
                    if (!t.IsUsed && t.UsesLeft > 0)
                    {
                        t.StartUsing();
                    }
                }
            }
            else if (!isTriggerKeyPressed)
            {
                isTriggerPressed = false;
            }

            // send trigger state to Toy
            if (t != null)
            {
                t.IsTriggered = isTriggerKeyPressed;
            }

            // key rep
            if (pressTime > 0.2f / KEY_REP_VELOCITY)
            {
                pressTime = 0f;
            }

            // make user's requested motion vector
            TargetMove          = new Vector2(dx, dy);
            IsTargetMoveDefined = true;
        }
コード例 #2
0
        protected override void OnUpdate(ref UpdateParams p)
        {
            base.OnUpdate(ref p);

            // keep previous loop's control input
            Vector2 ctrl = Vector2.Zero;
            ctrlPrev = ctrlCur;
            KeyboardState kb = Keyboard.GetState();
            GamePadState gp = GamePad.GetState(PlayerIndex.One);
            Vector2 sticks = Vector2.Zero;
            const float AST = 0.1f; // AST = Analog Stick Threshold
            if (gp.IsConnected)
                sticks = gp.ThumbSticks.Left + gp.ThumbSticks.Right;            

            if (kb.IsKeyDown(Keys.Up) || kb.IsKeyDown(Keys.W) || gp.IsButtonDown(Buttons.DPadUp)
                || (sticks.Y > AST && sticks.Y >= sticks.X) )
                    ctrl.Y += -1.0f;                
            if (kb.IsKeyDown(Keys.Down) || kb.IsKeyDown(Keys.S) || gp.IsButtonDown(Buttons.DPadDown)
                || (sticks.Y < -AST && sticks.Y <= sticks.X) )
                    ctrl.Y += 1.0f;
            if (kb.IsKeyDown(Keys.Left) || kb.IsKeyDown(Keys.A) || gp.IsButtonDown(Buttons.DPadLeft)
                || (sticks.X < -AST && sticks.X <= sticks.Y) )
                    ctrl.X += -1.0f;
            if (kb.IsKeyDown(Keys.Right) || kb.IsKeyDown(Keys.D) || gp.IsButtonDown(Buttons.DPadRight)
                || (sticks.X > AST && sticks.X >= sticks.Y) )
                    ctrl.X += 1.0f;

            // handle case where 2nd key pressed Left/Right or Up/Down
            if (IsDiag(ctrl) && ctrl.Y == ctrlPrevDifferent.Y )
                ctrl.Y = 0f;
            if (IsDiag(ctrl) && ctrl.X == ctrlPrevDifferent.X)
                ctrl.X = 0f;

            // test for diagonal input!
            if (IsDiag(ctrl))
            {
                ctrl -= ctrlPrevDifferent; // try to compensate - only new key mvt
                if (IsDiag(ctrl))
                {
                    // if still diagonal, use X dir only.
                    ctrl.Y = 0f;
                }
            }

            // transfer found control input of user input persistent var
            ctrlCur = ctrl;

            if (ctrlCur != ctrlPrev)
            {
                ctrlPrevDifferent = ctrlPrev; // keep track of 'previous control that was different'
            }

            if (ctrl.X != 0f || ctrl.Y != 0f)
            {
                if (pressTime == 0f)
                    TargetMove = ctrlCur;
                pressTime += p.Dt;  // keep amount of time a direction input has been given
            }

            // reset key repeat counter if nothing given as input
            if (ctrl.LengthSquared() == 0f)
            {
                pressTime = 0f;
            }

            // trigger attack
            wasAttackPressed = isAttackPressed; // keep old but pres state
            isAttackPressed = kb.IsKeyDown(Keys.Space) || gp.IsButtonDown(Buttons.A) || kb.IsKeyDown(Keys.RightControl)
                || gp.IsButtonDown(Buttons.RightTrigger);
            if (isAttackPressed && !wasAttackPressed)
            {
                pixie.LeadAttack();
            }

            // help msg
            if (kb.IsKeyDown(Keys.Q) || kb.IsKeyDown(Keys.F1)
                || kb.IsKeyDown(Keys.P) || kb.IsKeyDown(Keys.Enter) || gp.IsButtonDown(Buttons.Start) )
            {
                ShowKeysHelp();
            }

            // inventory msg
            if (kb.IsKeyDown(Keys.I) || gp.IsButtonDown(Buttons.B))
            {
                Level.Current.hero.ShowInventory();
            }

            // trigger Toy / magic item
            bool isTriggerKeyPressed = kb.IsKeyDown(Keys.X) || gp.IsButtonDown(Buttons.Y);
            Toy t = ParentThing.ToyActive; 
            if (!isUseToyPressed && isTriggerKeyPressed)
            {
                isUseToyPressed = true;

                // use toy                
                if (t != null && (!t.IsUsed && t.UsesLeft > 0))
                {
                    t.StartUsing();
                    if (t.IsUsed && t.UsesLeft <= 0)
                        ParentThing.ToyActive = null; // remove toy from inventory once used up.
                }
                else
                {
                    ShowNoToyString();
                }
            }
            else if (!isTriggerKeyPressed)
            {
                isUseToyPressed = false;
            }

            // send trigger state to Toy
            if (t != null)
            {
                t.IsTriggered = isTriggerKeyPressed;
            }

            // key repetition
            if (pressTime > 0.2f / ParentThing.Velocity ) 
                pressTime = 0f;

            // make user's requested motion vector            
            if (TargetMove.LengthSquared() > 0f)
                IsTargetMoveDefined = true;

        }