Ejemplo n.º 1
0
 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);
     }
 }
Ejemplo n.º 2
0
        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;
            }
        }
Ejemplo n.º 3
0
        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;
            }
        }
Ejemplo n.º 4
0
        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
            }
        }
Ejemplo n.º 5
0
        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
            }
        }
Ejemplo n.º 6
0
        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;
                                }
                            }
                        }
                    }
                }
                //-----------------------------
            }
        }
Ejemplo n.º 7
0
        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
            }
        }