OSDN Git Service

#40813 キーリピートありのUp/Downを、Sysytem/Input Optionからキーアサインできるようにした。電子ドラム使用時の選曲が楽になるはず...
authoryyagi <yyagi.dtxmania@gmail.com>
Mon, 12 Oct 2020 16:46:59 +0000 (01:46 +0900)
committeryyagi <yyagi.dtxmania@gmail.com>
Mon, 12 Oct 2020 16:46:59 +0000 (01:46 +0900)
DTXMania/コード/ステージ/02.タイトル/CStageタイトル.cs
DTXMania/コード/ステージ/04.コンフィグ/CActConfigList.cs
DTXMania/コード/ステージ/04.コンフィグ/CConfigXml.cs
DTXMania/コード/ステージ/04.コンフィグ/CStageコンフィグ.cs
DTXMania/コード/ステージ/05.選曲/CStage選曲.cs
DTXMania/コード/全体/CDTXMania.cs
DTXMania/コード/全体/C定数.cs

index 46b5eb2..02a4b69 100644 (file)
@@ -203,7 +203,8 @@ namespace DTXMania
                                                new CCounter.DGキー処理( this.tカーソルを上へ移動する ) );
 
                                        this.ctキー反復用.R.tキー反復(
-                                               CDTXMania.Instance.Pad.b押されている( EPad.GtR ) || CDTXMania.Instance.Pad.b押されている( EPad.BsR ),
+                                               CDTXMania.Instance.Pad.b押されている( EPad.GtR ) || CDTXMania.Instance.Pad.b押されている( EPad.BsR ) ||
+                                               CDTXMania.Instance.Pad.b押されている( EPad.Up ),
                                                new CCounter.DGキー処理( this.tカーソルを上へ移動する ) );
 
                                        if( CDTXMania.Instance.Pad.b押された( EPad.SD ) )
@@ -214,7 +215,8 @@ namespace DTXMania
                                                new CCounter.DGキー処理( this.tカーソルを下へ移動する ) );
 
                                        this.ctキー反復用.B.tキー反復(
-                                               CDTXMania.Instance.Pad.b押されている( EPad.GtB ) || CDTXMania.Instance.Pad.b押されている( EPad.BsB ),
+                                               CDTXMania.Instance.Pad.b押されている( EPad.GtB ) || CDTXMania.Instance.Pad.b押されている( EPad.BsB ) ||
+                                               CDTXMania.Instance.Pad.b押されている( EPad.Down ),
                                                new CCounter.DGキー処理( this.tカーソルを下へ移動する ) );
 
                                        if( CDTXMania.Instance.Pad.b押された( EPad.LT ) )
index be4acc0..6cb3c0d 100644 (file)
@@ -376,6 +376,8 @@ namespace DTXMania
                        {
                                list項目リスト.Add(ReturnToMenu.System);
                                list項目リスト.Add(PadNotifier(EPad.Capture, cr.Label("strCfgKeyAssignCapture"), cr.Explanation("strCfgKeyAssignCapture") ));
+                               list項目リスト.Add(PadNotifier(EPad.Up,      cr.Label("strCfgKeyAssignUp"),      cr.Explanation("strCfgKeyAssignUp")));
+                               list項目リスト.Add(PadNotifier(EPad.Down,    cr.Label("strCfgKeyAssignDown"),    cr.Explanation("strCfgKeyAssignDown")));
                        }
                        else if (eMenu == Eメニュー種別.KeyAssignDrums)
                        {
index 7369a6f..07b3920 100644 (file)
@@ -1360,7 +1360,9 @@ namespace DTXMania
                                { "BsWail", EPad.BsWail },
                                { "BsDecide", EPad.BsDecide },
                                { "BsCancel", EPad.BsCancel },
-                               { "Capture", EPad.Capture}
+                               { "Capture", EPad.Capture},
+                               { "Up", EPad.Up},
+                               { "Down", EPad.Down}
                        };
 
                        foreach ( string param in paramLines )
@@ -1379,6 +1381,11 @@ namespace DTXMania
                                        Debug.WriteLine( "デフォルトのキーアサインを設定できませんでした3: " + tmp[ 1 ] );
                                        return;
                                }
+                               else if (keys.Length == 1 && keys[0] == "")             // xxx= (no value)
+                               {
+                                       Debug.WriteLine("デフォルトのキーアサインを設定できませんでした4: " + tmp[ 1 ]);
+                                       return;
+                               }
                                EPad e;
                                bool b = dicStrEPad.TryGetValue( strPad, out e );
                                if ( b == false )
@@ -1441,8 +1448,36 @@ BsDecide=K096
 BsCancel=K097
 
 Capture=K065
+Up=
+Down=
 ";
-               private string GetRelativePath( string strBasePath, string strTargetPath )
+               /// <summary>
+               /// Config Upgrade support
+               /// </summary>
+               public void UpgradeConfig()
+               {
+                       // For KeyAssign:
+                       // To avoid GPF when adding new entry (== EPad.MAX has been incremented by developper), check KeyAssign array to EPad.MAX
+                       for (EPad j = EPad.Min; j < EPad.Max; ++j)
+                       {
+                               COptionKeyAssign ka;
+                               try
+                               {
+                                       ka = KeyAssign[j][0];
+                               }
+                               catch (NullReferenceException)
+                               {
+                                       KeyAssign[j] = new COptionKeyAssign[AssignableCodes];
+                                       for (int k = 0; k < AssignableCodes; ++k)
+                                       {
+                                               KeyAssign[j][k] = new COptionKeyAssign();
+                                       }
+                               }
+                       }
+               }
+
+
+       private string GetRelativePath( string strBasePath, string strTargetPath )
                {
                        string strRelativePath = strTargetPath;
                        try
index 44371c7..442433c 100644 (file)
@@ -495,7 +495,8 @@ namespace DTXMania
                                                new CCounter.DGキー処理( this.tカーソルを上へ移動する ) );
 
                                        this.ctキー反復用.R.tキー反復(
-                                               CDTXMania.Instance.Pad.b押されている( EPad.GtR ) || CDTXMania.Instance.Pad.b押されている( EPad.BsR ),
+                                               CDTXMania.Instance.Pad.b押されている( EPad.GtR ) || CDTXMania.Instance.Pad.b押されている( EPad.BsR ) ||
+                                               CDTXMania.Instance.Pad.b押されている( EPad.Up ),
                                                new CCounter.DGキー処理( this.tカーソルを上へ移動する ) );
 
                                        if (CDTXMania.Instance.Pad.b押された(EPad.SD))
@@ -507,7 +508,8 @@ namespace DTXMania
                                                new CCounter.DGキー処理( this.tカーソルを下へ移動する ) );
 
                                        this.ctキー反復用.B.tキー反復(
-                                               CDTXMania.Instance.Pad.b押されている( EPad.GtB ) || CDTXMania.Instance.Pad.b押されている( EPad.BsB ),
+                                               CDTXMania.Instance.Pad.b押されている( EPad.GtB ) || CDTXMania.Instance.Pad.b押されている( EPad.BsB ) ||
+                                               CDTXMania.Instance.Pad.b押されている( EPad.Down ),
                                                new CCounter.DGキー処理( this.tカーソルを下へ移動する ) );
 
                                        if (CDTXMania.Instance.Pad.b押された(EPad.LT))
index a36b0c7..0c3b2e5 100644 (file)
@@ -519,7 +519,8 @@ namespace DTXMania
                                                                new CCounter.DGキー処理( this.tカーソルを上へ移動する ) );
 
                                                        this.ctキー反復用.R.tキー反復(
-                                                               CDTXMania.Instance.Pad.b押されている( EPad.GtR ) || CDTXMania.Instance.Pad.b押されている( EPad.BsR ),
+                                                               CDTXMania.Instance.Pad.b押されている( EPad.GtR ) || CDTXMania.Instance.Pad.b押されている( EPad.BsR ) ||
+                                                               CDTXMania.Instance.Pad.b押されている(EPad.Up),
                                                                new CCounter.DGキー処理( this.tカーソルを上へ移動する ) );
 
                                                        if (CDTXMania.Instance.Pad.b押された(EPad.SD))
@@ -533,7 +534,8 @@ namespace DTXMania
                                                                new CCounter.DGキー処理( this.tカーソルを下へ移動する ) );
 
                                                        this.ctキー反復用.B.tキー反復(
-                                                               CDTXMania.Instance.Pad.b押されている( EPad.GtB ) || CDTXMania.Instance.Pad.b押されている( EPad.BsB ),
+                                                               CDTXMania.Instance.Pad.b押されている( EPad.GtB ) || CDTXMania.Instance.Pad.b押されている( EPad.BsB ) ||
+                                                               CDTXMania.Instance.Pad.b押されている(EPad.Down),
                                                                new CCounter.DGキー処理( this.tカーソルを下へ移動する ) );
 
                                                        if (CDTXMania.Instance.Pad.b押された(EPad.LT))
index 81e0fbd..626b2fb 100644 (file)
@@ -2323,6 +2323,8 @@ namespace DTXMania
                                                Path.Combine( Path.Combine( this.strEXEのあるフォルダ, "System" ), ConfigIni.strSystemSkinSubfolderPath );
                                }
                        }
+
+                       ConfigIni.UpgradeConfig();      // 本体version upに伴ってConfig.xmlの定義が更新される場合の、最低限のフォローアップ
                }
                /// <summary>
                /// 座標値を読み込む。Coordinates メンバ初期化後いつ呼び出しても構わない。
index e8d370a..a01c80b 100644 (file)
@@ -571,7 +571,11 @@ namespace DTXMania
                [EnumMember]
                Capture = 25,
                [EnumMember]
-               Max = 26,
+               Up = 26,
+               [EnumMember]
+               Down = 27,
+               [EnumMember]
+               Max = 28,
                [EnumMember]
                Unknown,
        }
@@ -916,6 +920,12 @@ namespace DTXMania
                [DataMember]
                public T Capture;
 
+               [DataMember]
+               public T Up;
+               [DataMember]
+               public T Down;
+
+
                public T this[EPad e]
                {
                        get
@@ -948,6 +958,8 @@ namespace DTXMania
                                        case EPad.BsCancel: return BsCancel;
                                        case EPad.BsDecide: return BsDecide;
                                        case EPad.Capture: return Capture;
+                                       case EPad.Up: return Up;
+                                       case EPad.Down: return Down;
                                }
                                throw new IndexOutOfRangeException();
                        }
@@ -982,6 +994,8 @@ namespace DTXMania
                                        case EPad.BsCancel: BsCancel = value; return;
                                        case EPad.BsDecide: BsDecide = value; return;
                                        case EPad.Capture: Capture = value; return;
+                                       case EPad.Up: Up= value; return;
+                                       case EPad.Down: Down= value; return;
                                }
                                throw new IndexOutOfRangeException();
                        }