public void Key押された受信(KeyEventArgs e) { if (e != null) { var key = DeviceConstantConverter.KeysToKey(e.KeyCode); if (SlimDXKey.Unknown == key) { return; // 未対応キーは無視。 } STInputEvent item = new STInputEvent() { nKey = (int)key, b押された = true, b離された = false, nTimeStamp = CSound管理.rc演奏用タイマ.nシステム時刻ms, }; this.listEventBuffer.Add(item); } }
public void Key離された受信(Keys Code) { var key = DeviceConstantConverter.KeysToKey(Code); if (SlimDXKey.Unknown == key) { return; // 未対応キーは無視。 } if (this.bKeyStateForBuff[(int)key] == true) { STInputEvent item = new STInputEvent() { nKey = (int)key, b押された = false, b離された = true, nTimeStamp = CSound管理.rc演奏用タイマ.nシステム時刻ms, }; this.listEventBuffer.Add(item); this.bKeyStateForBuff[(int)key] = false; } }
public void Key押された受信(Key Code) { var key = DeviceConstantConverter.TKKtoKey(Code); if (SlimDXKey.Unknown == key) { return; // 未対応キーは無視。 } if (this.bKeyStateForBuff[(int)key] == false) { STInputEvent item = new STInputEvent() { nKey = (int)key, bPressed = true, bReleased = false, nTimeStamp = CSoundManager.rc演奏用タイマ.nシステム時刻ms, }; this.listEventBuffer.Add(item); this.bKeyStateForBuff[(int)key] = true; } }
public void tポーリング(bool bWindowがアクティブ中, bool bバッファ入力を使用する) { for (int i = 0; i < 256; i++) { this.bKeyPushDown[i] = false; this.bKeyPullUp[i] = false; } if (((bWindowがアクティブ中 && (this.devKeyboard != null)) && !this.devKeyboard.Acquire().IsFailure) && !this.devKeyboard.Poll().IsFailure) { //this.list入力イベント = new List<STInputEvent>( 32 ); this.list入力イベント.Clear(); // #xxxxx 2012.6.11 yyagi; To optimize, I removed new(); int posEnter = -1; //string d = DateTime.Now.ToString( "yyyy/MM/dd HH:mm:ss.ffff" ); if (bバッファ入力を使用する) { #region [ a.バッファ入力 ] //----------------------------- var length = this.devKeyboard.GetDeviceData(_rawBufferedDataArray, false); if (!Result.Last.IsSuccess) { return; } for (int i = 0; i < length; i++) { var rawBufferedData = _rawBufferedDataArray[i]; var key = DeviceConstantConverter.DIKtoKey(rawBufferedData.Offset); var wasPressed = (rawBufferedData.Data & 128) == 128; STInputEvent item = new STInputEvent() { nKey = (int)key, b押された = wasPressed, nTimeStamp = CSound管理.rc演奏用タイマ.nサウンドタイマーのシステム時刻msへの変換(rawBufferedData.Timestamp), }; this.list入力イベント.Add(item); this.bKeyState[item.nKey] = wasPressed; this.bKeyPushDown[item.nKey] = wasPressed; this.bKeyPullUp[item.nKey] = !wasPressed; } //----------------------------- #endregion } else { #region [ b.状態入力 ] //----------------------------- KeyboardState currentState = this.devKeyboard.GetCurrentState(); if (Result.Last.IsSuccess && currentState != null) { foreach (Key key in currentState.PressedKeys) { if (this.bKeyState[(int)key] == false) { var ev = new STInputEvent() { nKey = (int)key, b押された = true, nTimeStamp = CSound管理.rc演奏用タイマ.nシステム時刻, // 演奏用タイマと同じタイマを使うことで、BGMと譜面、入力ずれを防ぐ。 }; this.list入力イベント.Add(ev); this.bKeyState[(int)key] = true; this.bKeyPushDown[(int)key] = true; //if ( (int) key == (int) SlimDX.DirectInput.Key.Space ) //{ // Trace.TraceInformation( "FDK(direct): SPACE key registered. " + ct.nシステム時刻 ); //} } } foreach (Key key in currentState.ReleasedKeys) { if (this.bKeyState[(int)key] == true) { var ev = new STInputEvent() { nKey = (int)key, b押された = false, nTimeStamp = CSound管理.rc演奏用タイマ.nシステム時刻, // 演奏用タイマと同じタイマを使うことで、BGMと譜面、入力ずれを防ぐ。 }; this.list入力イベント.Add(ev); this.bKeyState[(int)key] = false; this.bKeyPullUp[(int)key] = true; } } } //----------------------------- #endregion } #region [#23708 2011.4.8 yyagi Altが押されているときは、Enter押下情報を削除する -> 副作用が見つかり削除] //if ( this.bKeyState[ (int) SlimDX.DirectInput.Key.RightAlt ] || // this.bKeyState[ (int) SlimDX.DirectInput.Key.LeftAlt ] ) //{ // int cr = (int) SlimDX.DirectInput.Key.Return; // this.bKeyPushDown[ cr ] = false; // this.bKeyPullUp[ cr ] = false; // this.bKeyState[ cr ] = false; //} #endregion } }
public void tポーリング(bool bWindowがアクティブ中, bool bバッファ入力を使用する) { for (int i = 0; i < 256; i++) { this.bKeyPushDown[i] = false; this.bKeyPullUp[i] = false; } if (bWindowがアクティブ中 && (this.devKeyboard != null)) { this.devKeyboard.Acquire(); this.devKeyboard.Poll(); //this.list入力イベント = new List<STInputEvent>( 32 ); this.list入力イベント.Clear(); // #xxxxx 2012.6.11 yyagi; To optimize, I removed new(); int posEnter = -1; //string d = DateTime.Now.ToString( "yyyy/MM/dd HH:mm:ss.ffff" ); if (bバッファ入力を使用する) { #region [ a.バッファ入力 ] //----------------------------- var bufferedData = this.devKeyboard.GetBufferedData(); //if ( Result.Last.IsSuccess && bufferedData != null ) { foreach (KeyboardUpdate data in bufferedData) { // #xxxxx: 2017.5.7: from: DIK (SharpDX.DirectInput.Key) を SlimDX.DirectInput.Key に変換。 var key = DeviceConstantConverter.DIKtoKey(data.Key); if (SlimDXKey.Unknown == key) { continue; // 未対応キーは無視。 } //foreach ( Key key in data.PressedKeys ) if (data.IsPressed) { // #23708 2016.3.19 yyagi; Even if we remove ALT+ENTER key input by SuppressKeyPress = true in Form, // it doesn't affect to DirectInput (ALT+ENTER does not remove) // So we ignore ENTER input in ALT+ENTER combination here. // Note: ENTER will be alived if you keyup ALT after ALT+ENTER. if (key != SlimDXKey.Return || (bKeyState[(int)SlimDXKey.LeftAlt] == false && bKeyState[(int)SlimDXKey.RightAlt] == false)) { STInputEvent item = new STInputEvent() { nKey = (int)key, b押された = true, b離された = false, nTimeStamp = CSound管理.rc演奏用タイマ.nサウンドタイマーのシステム時刻msへの変換(data.Timestamp), nVelocity = CInput管理.n通常音量 }; this.list入力イベント.Add(item); this.bKeyState[(int)key] = true; this.bKeyPushDown[(int)key] = true; } //if ( item.nKey == (int) SlimDXKey.Space ) //{ // Trace.TraceInformation( "FDK(buffered): SPACE key registered. " + ct.nシステム時刻 ); //} } //foreach ( Key key in data.ReleasedKeys ) if (data.IsReleased) { STInputEvent item = new STInputEvent() { nKey = (int)key, b押された = false, b離された = true, nTimeStamp = CSound管理.rc演奏用タイマ.nサウンドタイマーのシステム時刻msへの変換(data.Timestamp), nVelocity = CInput管理.n通常音量 }; this.list入力イベント.Add(item); this.bKeyState[(int)key] = false; this.bKeyPullUp[(int)key] = true; } } } //----------------------------- #endregion } else { #region [ b.状態入力 ] //----------------------------- KeyboardState currentState = this.devKeyboard.GetCurrentState(); //if ( Result.Last.IsSuccess && currentState != null ) { foreach (SharpDXKey dik in currentState.PressedKeys) { // #xxxxx: 2017.5.7: from: DIK (SharpDX.DirectInput.Key) を SlimDX.DirectInput.Key に変換。 var key = DeviceConstantConverter.DIKtoKey(dik); if (SlimDXKey.Unknown == key) { continue; // 未対応キーは無視。 } if (this.bKeyState[(int)key] == false) { if (key != SlimDXKey.Return || (bKeyState[(int)SlimDXKey.LeftAlt] == false && bKeyState[(int)SlimDXKey.RightAlt] == false)) // #23708 2016.3.19 yyagi { var ev = new STInputEvent() { nKey = (int)key, b押された = true, b離された = false, nTimeStamp = CSound管理.rc演奏用タイマ.nシステム時刻, // 演奏用タイマと同じタイマを使うことで、BGMと譜面、入力ずれを防ぐ。 nVelocity = CInput管理.n通常音量, }; this.list入力イベント.Add(ev); this.bKeyState[(int)key] = true; this.bKeyPushDown[(int)key] = true; } //if ( (int) key == (int) SlimDXKey.Space ) //{ // Trace.TraceInformation( "FDK(direct): SPACE key registered. " + ct.nシステム時刻 ); //} } } //foreach ( Key key in currentState.ReleasedKeys ) foreach (SharpDXKey dik in currentState.AllKeys) { // #xxxxx: 2017.5.7: from: DIK (SharpDX.DirectInput.Key) を SlimDX.DirectInput.Key に変換。 var key = DeviceConstantConverter.DIKtoKey(dik); if (SlimDXKey.Unknown == key) { continue; // 未対応キーは無視。 } if (this.bKeyState[(int)key] == true && !currentState.IsPressed(dik)) // 前回は押されているのに今回は押されていない → 離された { var ev = new STInputEvent() { nKey = (int)key, b押された = false, b離された = true, nTimeStamp = CSound管理.rc演奏用タイマ.nシステム時刻, // 演奏用タイマと同じタイマを使うことで、BGMと譜面、入力ずれを防ぐ。 nVelocity = CInput管理.n通常音量, }; this.list入力イベント.Add(ev); this.bKeyState[(int)key] = false; this.bKeyPullUp[(int)key] = true; } } } //----------------------------- #endregion } #region [#23708 2011.4.8 yyagi Altが押されているときは、Enter押下情報を削除する -> 副作用が見つかり削除] //if ( this.bKeyState[ (int) SlimDXKey.RightAlt ] || // this.bKeyState[ (int) SlimDXKey.LeftAlt ] ) //{ // int cr = (int) SlimDXKey.Return; // this.bKeyPushDown[ cr ] = false; // this.bKeyPullUp[ cr ] = false; // this.bKeyState[ cr ] = false; //} #endregion } }
public void tポーリング(bool bWindowがアクティブ中, bool bバッファ入力有効) { for (int i = 0; i < 256; i++) { this.bKeyPushDown[i] = false; this.bKeyPullUp[i] = false; } if (bWindowがアクティブ中) { if (bバッファ入力有効) { this.list入力イベント.Clear(); for (int i = 0; i < this.listEventBuffer.Count; i++) { if (this.listEventBuffer[i].b押された) { this.bKeyState[this.listEventBuffer[i].nKey] = true; this.bKeyPushDown[this.listEventBuffer[i].nKey] = true; } else if (this.listEventBuffer[i].b離された) { this.bKeyState[this.listEventBuffer[i].nKey] = false; this.bKeyPullUp[this.listEventBuffer[i].nKey] = true; } this.list入力イベント.Add(this.listEventBuffer[i]); } this.listEventBuffer.Clear(); } else { this.list入力イベント.Clear(); // #xxxxx 2012.6.11 yyagi; To optimize, I removed new(); //----------------------------- KeyboardState currentState = Keyboard.GetState(); if (currentState.IsConnected) { for (int index = 0; index < Enum.GetNames(typeof(Key)).Length; index++) { if (currentState[(Key)index]) { // #xxxxx: 2017.5.7: from: TKK (OpenTK.Input.Key) を SlimDX.DirectInput.Key に変換。 var key = DeviceConstantConverter.TKKtoKey((Key)index); if (SlimDXKey.Unknown == key) { continue; // 未対応キーは無視。 } if (this.bKeyState[(int)key] == false) { if (key != SlimDXKey.Return || (bKeyState[(int)SlimDXKey.LeftAlt] == false && bKeyState[(int)SlimDXKey.RightAlt] == false)) // #23708 2016.3.19 yyagi { var ev = new STInputEvent() { nKey = (int)key, b押された = true, b離された = false, nTimeStamp = CSound管理.rc演奏用タイマ.nシステム時刻ms, // 演奏用タイマと同じタイマを使うことで、BGMと譜面、入力ずれを防ぐ。 }; this.list入力イベント.Add(ev); this.bKeyState[(int)key] = true; this.bKeyPushDown[(int)key] = true; } } } { // #xxxxx: 2017.5.7: from: TKK (OpenTK.Input.Key) を SlimDX.DirectInput.Key に変換。 var key = DeviceConstantConverter.TKKtoKey((Key)index); if (SlimDXKey.Unknown == key) { continue; // 未対応キーは無視。 } if (this.bKeyState[(int)key] == true && !currentState.IsKeyDown((Key)index)) // 前回は押されているのに今回は押されていない → 離された { var ev = new STInputEvent() { nKey = (int)key, b押された = false, b離された = true, nTimeStamp = CSound管理.rc演奏用タイマ.nシステム時刻ms, // 演奏用タイマと同じタイマを使うことで、BGMと譜面、入力ずれを防ぐ。 }; this.list入力イベント.Add(ev); this.bKeyState[(int)key] = false; this.bKeyPullUp[(int)key] = true; } } } } } //----------------------------- } }
public void tポーリング(bool bWindowがアクティブ中) { for (int i = 0; i < 256; i++) { this.bKeyPushDown[i] = false; this.bKeyPullUp[i] = false; } if (bWindowがアクティブ中) { //this.list入力イベント = new List<STInputEvent>( 32 ); this.list入力イベント.Clear(); // #xxxxx 2012.6.11 yyagi; To optimize, I removed new(); //string d = DateTime.Now.ToString( "yyyy/MM/dd HH:mm:ss.ffff" ); #region [ 入力 ] //----------------------------- OpenTK.Input.KeyboardState currentState = OpenTK.Input.Keyboard.GetState(); if (currentState.IsConnected) { for (int index = 0; index < Enum.GetNames(typeof(OpenTK.Input.Key)).Length; index++) { if (currentState[(OpenTK.Input.Key)index]) { var key = DeviceConstantConverter.TKKtoKey((OpenTK.Input.Key)index); if (SlimDXKey.Unknown == key) { continue; // 未対応キーは無視。 } if (this.bKeyState[(int)key] == false) { if (key != SlimDXKey.Return || (bKeyState[(int)SlimDXKey.LeftAlt] == false && bKeyState[(int)SlimDXKey.RightAlt] == false)) // #23708 2016.3.19 yyagi { var ev = new STInputEvent() { nKey = (int)key, b押された = true, b離された = false, nTimeStamp = CSound管理.rc演奏用タイマ.nシステム時刻, // 演奏用タイマと同じタイマを使うことで、BGMと譜面、入力ずれを防ぐ。 nVelocity = CInput管理.n通常音量, }; this.list入力イベント.Add(ev); this.bKeyState[(int)key] = true; this.bKeyPushDown[(int)key] = true; } //if ( (int) key == (int) SlimDXKey.Space ) //{ // Trace.TraceInformation( "FDK(direct): SPACE key registered. " + ct.nシステム時刻 ); //} } } { // #xxxxx: 2017.5.7: from: DIK (SharpDX.DirectInput.Key) を SlimDX.DirectInput.Key に変換。 var key = DeviceConstantConverter.TKKtoKey((OpenTK.Input.Key)index); if (SlimDXKey.Unknown == key) { continue; // 未対応キーは無視。 } if (this.bKeyState[(int)key] == true && !currentState.IsKeyDown((OpenTK.Input.Key)index)) // 前回は押されているのに今回は押されていない → 離された { var ev = new STInputEvent() { nKey = (int)key, b押された = false, b離された = true, nTimeStamp = CSound管理.rc演奏用タイマ.nシステム時刻, // 演奏用タイマと同じタイマを使うことで、BGMと譜面、入力ずれを防ぐ。 nVelocity = CInput管理.n通常音量, }; this.list入力イベント.Add(ev); this.bKeyState[(int)key] = false; this.bKeyPullUp[(int)key] = true; } } } } //----------------------------- #endregion } }