}//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()
public KKeyCommand(string command_) { commandString = command_; keyCursor = 0; keyState = KeyCommandState.Idle; keyTimer = 0.0; }//KKeyCommand
}//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()
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; } } }
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; }
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(); } }
override public void Reset() { state = KeyCommandState.ReleasePress; timerAutoRepeat.Clear(); pressedKeys = new Keys[0]; }