OSDN Git Service

CInputKeyboard を、SharpDX.DirectInput.Key ではなく、SlimDX.DirectInput.Key で扱うよう修正。
authorFROM <from@alto.ocn.ne.jp>
Sun, 7 May 2017 14:35:55 +0000 (23:35 +0900)
committerFROM <from@alto.ocn.ne.jp>
Sun, 7 May 2017 14:35:55 +0000 (23:35 +0900)
SlimDX 版の DTXMania とキーアサインの番号をあわせるため。

FDK17プロジェクト/コード/02.入力/CInputKeyboard.cs
実行時フォルダ/DTXCreator.exe
実行時フォルダ/DTXManiaGR.exe
実行時フォルダ/dll/FDK.dll
実行時フォルダ/ja-JP/DTXCreator.resources.dll
実行時フォルダ/ja-JP/DTXManiaGR.resources.dll

index c1d8845..e9d5d6a 100644 (file)
@@ -87,20 +87,23 @@ namespace FDK
                                        var bufferedData = this.devKeyboard.GetBufferedData();\r
                                        //if ( Result.Last.IsSuccess && bufferedData != null )\r
                                        {\r
-                                               foreach ( KeyboardUpdate data in bufferedData )\r
+                                               foreach( KeyboardUpdate data in bufferedData )\r
                                                {\r
+                                                       // #xxxxx: 2017.5.7: from: DIK (SharpDX.DirectInput.Key) を SlimDX.DirectInput.Key に変換。\r
+                                                       var key = DeviceConstantConverter.DIKtoKey( data.Key );\r
+                                                       if( SlimDXKey.Unknown == key )\r
+                                                               continue;   // 未対応キーは無視。\r
+\r
                                                        //foreach ( Key key in data.PressedKeys )\r
                                                        if( data.IsPressed )\r
                                                        {\r
-                                                               var key = data.Key;\r
                                                                // #23708 2016.3.19 yyagi; Even if we remove ALT+ENTER key input by SuppressKeyPress = true in Form,\r
                                                                // it doesn't affect to DirectInput (ALT+ENTER does not remove)\r
                                                                // So we ignore ENTER input in ALT+ENTER combination here.\r
                                                                // Note: ENTER will be alived if you keyup ALT after ALT+ENTER.\r
-                                                               if( key != Key.Return || ( bKeyState[ (int)Key.LeftAlt ] == false && bKeyState[ (int)Key.RightAlt ] == false ) )\r
+                                                               if( key != SlimDXKey.Return || ( bKeyState[ (int) SlimDXKey.LeftAlt ] == false && bKeyState[ (int) SlimDXKey.RightAlt ] == false ) )\r
                                                                {\r
-                                                                       STInputEvent item = new STInputEvent()\r
-                                                                       {\r
+                                                                       STInputEvent item = new STInputEvent() {\r
                                                                                nKey = (int) key,\r
                                                                                b押された = true,\r
                                                                                b離された = false,\r
@@ -112,7 +115,7 @@ namespace FDK
                                                                        this.bKeyState[ (int) key ] = true;\r
                                                                        this.bKeyPushDown[ (int) key ] = true;\r
                                                                }\r
-                                                               //if ( item.nKey == (int) SharpDX.DirectInput.Key.Space )\r
+                                                               //if ( item.nKey == (int) SlimDXKey.Space )\r
                                                                //{\r
                                                                //    Trace.TraceInformation( "FDK(buffered): SPACE key registered. " + ct.nシステム時刻 );\r
                                                                //}\r
@@ -120,9 +123,7 @@ namespace FDK
                                                        //foreach ( Key key in data.ReleasedKeys )\r
                                                        if( data.IsReleased )\r
                                                        {\r
-                                                               var key = data.Key;\r
-                                                               STInputEvent item = new STInputEvent()\r
-                                                               {\r
+                                                               STInputEvent item = new STInputEvent() {\r
                                                                        nKey = (int) key,\r
                                                                        b押された = false,\r
                                                                        b離された = true,\r
@@ -146,18 +147,22 @@ namespace FDK
                                        KeyboardState currentState = this.devKeyboard.GetCurrentState();\r
                                        //if ( Result.Last.IsSuccess && currentState != null )\r
                                        {\r
-                                               foreach ( Key key in currentState.PressedKeys )\r
+                                               foreach( SharpDXKey dik in currentState.PressedKeys )\r
                                                {\r
-                                                       if ( this.bKeyState[ (int) key ] == false )\r
+                                                       // #xxxxx: 2017.5.7: from: DIK (SharpDX.DirectInput.Key) を SlimDX.DirectInput.Key に変換。\r
+                                                       var key = DeviceConstantConverter.DIKtoKey( dik );\r
+                                                       if( SlimDXKey.Unknown == key )\r
+                                                               continue;   // 未対応キーは無視。\r
+\r
+                                                       if( this.bKeyState[ (int) key ] == false )\r
                                                        {\r
-                                                               if ( key != Key.Return || ( bKeyState[ (int) Key.LeftAlt ] == false && bKeyState[ (int) Key.RightAlt ] == false ) )     // #23708 2016.3.19 yyagi\r
+                                                               if( key != SlimDXKey.Return || ( bKeyState[ (int) SlimDXKey.LeftAlt ] == false && bKeyState[ (int) SlimDXKey.RightAlt ] == false ) )    // #23708 2016.3.19 yyagi\r
                                                                {\r
-                                                                       var ev = new STInputEvent()\r
-                                                                       {\r
+                                                                       var ev = new STInputEvent() {\r
                                                                                nKey = (int) key,\r
                                                                                b押された = true,\r
                                                                                b離された = false,\r
-                                                                               nTimeStamp = CSound管理.rc演奏用タイマ.nシステム時刻,     // 演奏用タイマと同じタイマを使うことで、BGMと譜面、入力ずれを防ぐ。\r
+                                                                               nTimeStamp = CSound管理.rc演奏用タイマ.nシステム時刻, // 演奏用タイマと同じタイマを使うことで、BGMと譜面、入力ずれを防ぐ。\r
                                                                                nVelocity = CInput管理.n通常音量,\r
                                                                        };\r
                                                                        this.list入力イベント.Add( ev );\r
@@ -166,16 +171,21 @@ namespace FDK
                                                                        this.bKeyPushDown[ (int) key ] = true;\r
                                                                }\r
 \r
-                                                               //if ( (int) key == (int) SharpDX.DirectInput.Key.Space )\r
+                                                               //if ( (int) key == (int) SlimDXKey.Space )\r
                                                                //{\r
                                                                //    Trace.TraceInformation( "FDK(direct): SPACE key registered. " + ct.nシステム時刻 );\r
                                                                //}\r
                                                        }\r
                                                }\r
                                                //foreach ( Key key in currentState.ReleasedKeys )\r
-                                               foreach( Key key in currentState.AllKeys )\r
+                                               foreach( SharpDXKey dik in currentState.AllKeys )\r
                                                {\r
-                                                       if( this.bKeyState[ (int) key ] == true && !currentState.IsPressed( key ) ) // 前回は押されているのに今回は押されていない → 離された\r
+                                                       // DIK (SharpDX.DirectInput.Key) を SlimDX.DirectInput.Key に変換。\r
+                                                       var key = DeviceConstantConverter.DIKtoKey( dik );\r
+                                                       if( SlimDXKey.Unknown == key )\r
+                                                               continue;   // 未対応キーは無視。\r
+\r
+                                                       if( this.bKeyState[ (int) key ] == true && !currentState.IsPressed( dik ) ) // 前回は押されているのに今回は押されていない → 離された\r
                                                        {\r
                                                                var ev = new STInputEvent() {\r
                                                                        nKey = (int) key,\r
@@ -195,10 +205,10 @@ namespace FDK
                                        #endregion\r
                                }\r
                                #region [#23708 2011.4.8 yyagi Altが押されているときは、Enter押下情報を削除する -> 副作用が見つかり削除]\r
-                               //if ( this.bKeyState[ (int) SharpDX.DirectInput.Key.RightAlt ] ||\r
-                               //     this.bKeyState[ (int) SharpDX.DirectInput.Key.LeftAlt ] )\r
+                               //if ( this.bKeyState[ (int) SlimDXKey.RightAlt ] ||\r
+                               //     this.bKeyState[ (int) SlimDXKey.LeftAlt ] )\r
                                //{\r
-                               //    int cr = (int) SharpDX.DirectInput.Key.Return;\r
+                               //    int cr = (int) SlimDXKey.Return;\r
                                //    this.bKeyPushDown[ cr ] = false;\r
                                //    this.bKeyPullUp[ cr ] = false;\r
                                //    this.bKeyState[ cr ] = false;\r
@@ -206,18 +216,34 @@ namespace FDK
                                #endregion\r
                        }\r
                }\r
+\r
+               /// <param name="nKey">\r
+               ///             調べる SlimDX.DirectInput.Key を int にキャストした値。(SharpDX.DirectInput.Key ではないので注意。)\r
+               /// </param>\r
                public bool bキーが押された( int nKey )\r
                {\r
                        return this.bKeyPushDown[ nKey ];\r
                }\r
+\r
+               /// <param name="nKey">\r
+               ///             調べる SlimDX.DirectInput.Key を int にキャストした値。(SharpDX.DirectInput.Key ではないので注意。)\r
+               /// </param>\r
                public bool bキーが押されている( int nKey )\r
                {\r
                        return this.bKeyState[ nKey ];\r
                }\r
+\r
+               /// <param name="nKey">\r
+               ///             調べる SlimDX.DirectInput.Key を int にキャストした値。(SharpDX.DirectInput.Key ではないので注意。)\r
+               /// </param>\r
                public bool bキーが離された( int nKey )\r
                {\r
                        return this.bKeyPullUp[ nKey ];\r
                }\r
+\r
+               /// <param name="nKey">\r
+               ///             調べる SlimDX.DirectInput.Key を int にキャストした値。(SharpDX.DirectInput.Key ではないので注意。)\r
+               /// </param>\r
                public bool bキーが離されている( int nKey )\r
                {\r
                        return !this.bKeyState[ nKey ];\r
@@ -257,9 +283,9 @@ namespace FDK
                #region [ private ]\r
                //-----------------\r
                private bool bDispose完了済み;\r
-               private bool[] bKeyPullUp = new bool[ 0x100 ];\r
-               private bool[] bKeyPushDown = new bool[ 0x100 ];\r
-               private bool[] bKeyState = new bool[ 0x100 ];\r
+               private bool[] bKeyPullUp = new bool[ 256 ];\r
+               private bool[] bKeyPushDown = new bool[ 256 ];\r
+               private bool[] bKeyState = new bool[ 256 ];\r
                private Keyboard devKeyboard;\r
                //private CTimer timer;\r
                //private CTimer ct;\r
index db016b4..72eab4c 100644 (file)
Binary files a/実行時フォルダ/DTXCreator.exe and b/実行時フォルダ/DTXCreator.exe differ
index 7a6a380..d863d34 100644 (file)
Binary files a/実行時フォルダ/DTXManiaGR.exe and b/実行時フォルダ/DTXManiaGR.exe differ
index dcb01a5..16523fa 100644 (file)
Binary files a/実行時フォルダ/dll/FDK.dll and b/実行時フォルダ/dll/FDK.dll differ
index 46765ef..9b6eef4 100644 (file)
Binary files a/実行時フォルダ/ja-JP/DTXCreator.resources.dll and b/実行時フォルダ/ja-JP/DTXCreator.resources.dll differ
index 720c918..e2e09c8 100644 (file)
Binary files a/実行時フォルダ/ja-JP/DTXManiaGR.resources.dll and b/実行時フォルダ/ja-JP/DTXManiaGR.resources.dll differ