コード例 #1
0
    }//KKeyCommand

    public bool ProcessKey(char key)
    {
        if (keyCursor >= commandString.Length)
        {
            //keyCursor += 1;
            return(false);
        }//if

        if (commandString[keyCursor] == key)
        {
            if (keyCursor == 0)
            {
                // move to 'KeyInput' state from 'Idle'
                keyState = KeyCommandState.KeyInput;
            }//if
            keyCursor += 1; // move to next key
            keyTimer   = 0.0; // reset valid key input timer
            if (keyCursor == commandString.Length)
            {
                // this key command is matched
                return(true);
            } //if
        }     //if

        return(false);
    }//ProcessKey()
コード例 #2
0
 public KKeyCommand(string command_)
 {
     commandString = command_;
     keyCursor     = 0;
     keyState      = KeyCommandState.Idle;
     keyTimer      = 0.0;
 }//KKeyCommand
コード例 #3
0
    }//ProcessKey()

    // must be called for each 'Update()'
    public void Update(double elapsedTime_)
    {
        keyTimer += elapsedTime_;
        if (keyTimer >= interKeyTime)
        {
            // move to 'Idle' state if timer expire
            keyState  = KeyCommandState.Idle;
            keyCursor = 0;
            keyTimer  = 0.0;
        } //if
    }     //Update()
コード例 #4
0
        public override void Sync()
        {
            state = KeyCommandState.ReleasePress;
            timerAutoRepeat.Clear();
            this.pressedKeys = chatpadStates[(int)this.playerIndex].GetPressedKeys();

            for (int indexKey = 0; indexKey < this.pressedKeys.Length; indexKey++)
            {
                Keys key = this.pressedKeys[indexKey];
                if (!IsModifierKey(key))
                {
                    // at least one non-modifier key
                    this.state = KeyCommandState.Press;
                    break;
                }
            }
        }
コード例 #5
0
 protected void OnRepeatPress(Boku.Base.GameTimer timer)
 {
     // NOTE: do not call Start on this timer, it is being used in a caller update model
     timerAutoRepeat.Reset(timeAutoRepeat);
     if (RepeatPress != null || CharInput != null)
     {
         for (int indexKey = 0; indexKey < this.pressedKeys.Length; indexKey++)
         {
             Keys key = this.pressedKeys[indexKey];
             if (!IsModifierKey(key))
             {
                 if (RepeatPress != null)
                 {
                     RepeatPress(this, new KeyboardKeyEventArgs(key));
                 }
                 if (CharInput != null)
                 {
                     OnChar(key);
                 }
             }
         }
     }
     this.state = KeyCommandState.Repeat;
 }
コード例 #6
0
        override public void Update()
        {
            if (GamePadInput.GetGamePad(this.playerIndex).IsConnected)
            {
                bool keyIsPressed = false;

                Keys[] currentPressedKeys = chatpadStates[(int)this.playerIndex].GetPressedKeys();

                // walk both sets of keys; the prev and current
                // which are in order and
                // trigger repeat, press, and release events
                int indexPrev = 0;
                int indexCurr = 0;

                Keys keyPrev;
                Keys keyCurr;

                // while either set still has keys
                while (indexPrev < this.pressedKeys.Length || indexCurr < currentPressedKeys.Length)
                {
                    if (indexPrev < this.pressedKeys.Length)
                    {
                        keyPrev = this.pressedKeys[indexPrev];
                    }
                    else
                    {
                        keyPrev = (Keys)255;// not valid, reached end of this set
                    }
                    if (indexCurr < currentPressedKeys.Length)
                    {
                        keyCurr = currentPressedKeys[indexCurr];
                    }
                    else
                    {
                        keyCurr = (Keys)255; // not valid, reached end of this set
                    }

                    if (keyPrev == keyCurr)
                    {
                        indexPrev++;
                        indexCurr++;
                        // key still pressed
                        if (!IsModifierKey(keyCurr))
                        {
                            keyIsPressed = true;
                        }
                    }
                    else if (keyPrev < keyCurr)
                    {
                        indexPrev++;
                        // key was released
                        if (ReleasePress != null)
                        {
                            ReleasePress(this, new KeyboardKeyEventArgs(keyPrev));
                        }
                    }
                    else
                    {
                        indexCurr++;
                        // new key pressed
                        if (Press != null)
                        {
                            Press(this, new KeyboardKeyEventArgs(keyCurr));
                        }
                        if (CharInput != null)
                        {
                            OnChar(keyCurr);
                        }
                        if (!IsModifierKey(keyCurr))
                        {
                            keyIsPressed = true;
                        }
                    }
                }

                // update generalized state
                if (keyIsPressed)
                {
                    if (state == KeyCommandState.ReleasePress)
                    {
                        // NOTE: do not call Start on this timer, it is being used in a caller update model
                        timerAutoRepeat.Reset(timeFirstAutoRepeat);
                        state = KeyCommandState.Press;
                    }
                }
                else
                {
                    if (state != KeyCommandState.ReleasePress)
                    {
                        timerAutoRepeat.Clear();
                        state = KeyCommandState.ReleasePress;
                    }
                }

                this.pressedKeys = currentPressedKeys;

                if (timerAutoRepeat.Running)
                {
                    timerAutoRepeat.Update();
                }
            }
            else
            {
                Reset();
            }
        }
コード例 #7
0
 override public void Reset()
 {
     state = KeyCommandState.ReleasePress;
     timerAutoRepeat.Clear();
     pressedKeys = new Keys[0];
 }