Пример #1
0
        public void Key離された受信(Key Code)
        {
            var key = DeviceConstantConverter.TKKtoKey(Code);

            if (SlimDXKey.Unknown == key)
            {
                return;                   // 未対応キーは無視。
            }
            if (this.bKeyStateForBuff[(int)key] == true)
            {
                STInputEvent item = new STInputEvent()
                {
                    nKey       = (int)key,
                    b押された      = false,
                    b離された      = true,
                    nTimeStamp = CSoundManager.rc演奏用タイマ.nシステム時刻ms,
                };

                this.listEventBuffer.Add(item);
                this.bKeyStateForBuff[(int)key] = false;
            }
        }
Пример #2
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;
                                }
                            }
                        }
                    }
                }
                //-----------------------------
            }
        }
Пример #3
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
            }
        }