2 using System.Collections.Generic;
3 using System.Diagnostics;
12 internal class CActSelectQuickConfig : CActSelectPopupMenu
14 private readonly string QuickCfgTitle = "Quick Config";
19 public CActSelectQuickConfig()
21 CActSelectQuickConfigMain();
24 private void CActSelectQuickConfigMain()
27 •Target: Drums/Guitar/Bass
28 •Auto Mode: All ON/All OFF/CUSTOM
33 •Hidden/Sudden: None/Hidden/Sudden/Both
34 •AUTO Ghost: Perfect/Last Play/Hi Skill/Hi Score/Online
35 •Target Ghost: None/Perfect/Last Play/Hi Skill/Hi Score/Online
36 •Conf SET: SET-1/SET-2/SET-3
40 lci = new List<List<List<CItemBase>>>(); // この画面に来る度に、メニューを作り直す。
41 for ( int nConfSet = 0; nConfSet < 3; nConfSet++ )
43 lci.Add( new List<List<CItemBase>>() ); // ConfSet用の3つ分の枠。
44 for ( int nInst = 0; nInst < 3; nInst++ )
46 lci[ nConfSet ].Add( null ); // Drum/Guitar/Bassで3つ分、枠を作っておく
47 lci[ nConfSet ][ nInst ] = MakeListCItemBase( nConfSet, nInst );
50 base.Initialize( lci[ nCurrentConfigSet ][ nCurrentTarget ], true, QuickCfgTitle, 2 ); // ConfSet=0, nInst=Drums
53 private List<CItemBase> MakeListCItemBase( int nConfigSet, int nInst )
55 List<CItemBase> l = new List<CItemBase>();
57 #region [ 共通 Target/AutoMode/AutoLane ]
58 l.Add( new CSwitchItemList( "Target", CItemBase.Eパネル種別.通常, nInst, "", "", new string[] { "Drums", "Guitar", "Bass" } ) );
59 List<int> automode = tConfigureAuto_DefaultSettings();
60 if ( nInst == (int) E楽器パート.DRUMS )
62 l.Add( new CItemList( "Auto Mode", CItemBase.Eパネル種別.通常, automode[ nInst ], "", "", new string[] { "All Auto", "Auto LP", "Auto BD", "2Pedal Auto", "XGLaneAuto", "Custom", "OFF" } ) );
66 l.Add( new CItemList( "Auto Mode", CItemBase.Eパネル種別.通常, automode[ nInst ], "", "", new string[] { "All Auto", "Auto Neck", "Auto Pick", "Custom", "OFF" } ) );
69 #region [ 個別 ScrollSpeed ]
70 l.Add( new CItemInteger( "ScrollSpeed", 0, 1999, CDTXMania.ConfigIni.n譜面スクロール速度[ nInst ],
71 "演奏時のドラム譜面のスクロールの\n" +
73 "x0.5 ~ x1000.0 を指定可能です。",
74 "To change the scroll speed for the\n" +
76 "You can set it from x0.5 to x1000.0.\n" +
77 "(ScrollSpeed=x0.5 means half speed)" ) );
79 #region [ 共通 Dark/Risky/PlaySpeed ]
80 l.Add( new CItemList( "Dark", CItemBase.Eパネル種別.通常, (int) CDTXMania.ConfigIni.eDark,
81 "HALF: 背景、レーン、ゲージが表示\n" +
83 "FULL: さらに小節線、拍線、判定ラ\n" +
85 "OFF: all display parts are shown.\n" +
86 "HALF: wallpaper, lanes and gauge are\n" +
88 "FULL: additionaly to HALF, bar/beat\n" +
89 " lines, hit bar, pads are disappeared.",
90 new string[] { "OFF", "HALF", "FULL" } ) );
91 l.Add( new CItemInteger( "Risky", 0, 10, CDTXMania.ConfigIni.nRisky,
93 "1以上の値にすると、その回数分の\n" +
94 "Poor/MissでFAILEDとなります。\n" +
96 "DamageLevelに従ったゲージ増減と\n" +
98 "StageFailedの設定と併用できます。",
100 "Set over 1, in case you'd like to specify\n" +
101 " the number of Poor/Miss times to be\n" +
103 "Set 0 to disable Risky mode." ) );
104 l.Add( new CItemInteger( "PlaySpeed", 5, 40, CDTXMania.ConfigIni.n演奏速度,
105 "曲の演奏速度を、速くしたり遅くした\n" +
107 "(※一部のサウンドカードでは正しく\n" +
109 "It changes the song speed.\n" +
110 "For example, you can play in half\n" +
111 " speed by setting PlaySpeed = 0.500\n" +
112 " for your practice.\n" +
113 "Note: It also changes the songs' pitch." ) );
115 #region [ 個別 Sud/Hid ]
117 if ( CDTXMania.ConfigIni.eInvisible[ nInst ] != EInvisible.OFF )
119 nSuddenHidden = (int) CDTXMania.ConfigIni.eInvisible[ nInst ] + 3;
123 nSuddenHidden = ( ( CDTXMania.ConfigIni.bHidden[ nInst ] ) ? 2 : 0 ) + ( ( CDTXMania.ConfigIni.bSudden[ nInst ] ) ? 1 : 0 );
125 l.Add( new CItemList( "Sud/Hid", CItemBase.Eパネル種別.通常, nSuddenHidden, "", "",
126 new string[] { "None", "Sudden", "Hidden", "Sud+Hid", "S-Invisible", "F-Invisible" } ) );
129 l.Add( new CItemList("AUTO Ghost", CItemBase.Eパネル種別.通常, (int)CDTXMania.ConfigIni.eAutoGhost[ nInst ],
130 "AUTOプレーのゴーストを指定します。\n",
131 "Specify Play Ghost data.\n",
132 new string[] {"Perfect", "Last Play", "Hi Skill", "Hi Score", "Online" }
134 l.Add(new CItemList("Target Ghost", CItemBase.Eパネル種別.通常, (int)CDTXMania.ConfigIni.eTargetGhost[ nInst ],
135 "ターゲットゴーストを指定します。\n",
136 "Specify Target Ghost data.\n",
137 new string[] {"None", "Perfect", "Last Play", "Hi Skill", "Hi Score", "Online" }
140 #region [ 共通 SET切り替え/More/Return ]
141 l.Add( new CSwitchItemList( "Config Set", CItemBase.Eパネル種別.通常, nCurrentConfigSet, "", "", new string[] { "SET-1", "SET-2", "SET-3" } ) );
142 l.Add( new CSwitchItemList( "More...", CItemBase.Eパネル種別.通常, 0, "", "", new string[] { "" } ) );
143 l.Add( new CSwitchItemList( "Return", CItemBase.Eパネル種別.通常, 0, "", "", new string[] { "", "" } ) );
150 /// 簡易CONFIGのAUTO設定値の初期値を、ConfigIniクラスから取得・推測する
152 /// <returns>Drums,Guitar,BassのAutoMode値のリスト</returns>
153 private List<int> tConfigureAuto_DefaultSettings()
155 List<int> l = new List<int>();
158 // "All Auto", "Auto LP", "Auto BD", "2Pedal Auto", "3 Auto", "Custom", "OFF"
159 if ( CDTXMania.ConfigIni.bドラムが全部オートプレイである )
161 automode = 0; // All Auto
163 else if ( CDTXMania.ConfigIni.bAutoPlay.LC == false && CDTXMania.ConfigIni.bAutoPlay.HH == false &&
164 CDTXMania.ConfigIni.bAutoPlay.BD == false && CDTXMania.ConfigIni.bAutoPlay.SD == false &&
165 CDTXMania.ConfigIni.bAutoPlay.HT == false && CDTXMania.ConfigIni.bAutoPlay.LT == false &&
166 CDTXMania.ConfigIni.bAutoPlay.FT == false && CDTXMania.ConfigIni.bAutoPlay.CY == false &&
167 CDTXMania.ConfigIni.bAutoPlay.LP == true && CDTXMania.ConfigIni.bAutoPlay.LBD == true )
169 automode = 1; // Auto LP
171 else if ( CDTXMania.ConfigIni.bAutoPlay.LC == false && CDTXMania.ConfigIni.bAutoPlay.HH == false &&
172 CDTXMania.ConfigIni.bAutoPlay.BD == true && CDTXMania.ConfigIni.bAutoPlay.SD == false &&
173 CDTXMania.ConfigIni.bAutoPlay.HT == false && CDTXMania.ConfigIni.bAutoPlay.LT == false &&
174 CDTXMania.ConfigIni.bAutoPlay.FT == false && CDTXMania.ConfigIni.bAutoPlay.CY == false &&
175 CDTXMania.ConfigIni.bAutoPlay.LP == false && CDTXMania.ConfigIni.bAutoPlay.LBD == false)
177 automode = 2; // Auto BD
179 else if ( CDTXMania.ConfigIni.bAutoPlay.LC == false && CDTXMania.ConfigIni.bAutoPlay.HH == false &&
180 CDTXMania.ConfigIni.bAutoPlay.BD == true && CDTXMania.ConfigIni.bAutoPlay.SD == false &&
181 CDTXMania.ConfigIni.bAutoPlay.HT == false && CDTXMania.ConfigIni.bAutoPlay.LT == false &&
182 CDTXMania.ConfigIni.bAutoPlay.FT == false && CDTXMania.ConfigIni.bAutoPlay.CY == false &&
183 CDTXMania.ConfigIni.bAutoPlay.LP == true && CDTXMania.ConfigIni.bAutoPlay.LBD == true )
185 automode = 3; // 2Pedal Auto
187 else if ( CDTXMania.ConfigIni.bAutoPlay.LC == true && CDTXMania.ConfigIni.bAutoPlay.HH == true &&
188 CDTXMania.ConfigIni.bAutoPlay.BD == false && CDTXMania.ConfigIni.bAutoPlay.SD == false &&
189 CDTXMania.ConfigIni.bAutoPlay.HT == false && CDTXMania.ConfigIni.bAutoPlay.LT == false &&
190 CDTXMania.ConfigIni.bAutoPlay.FT == true && CDTXMania.ConfigIni.bAutoPlay.CY == true &&
191 CDTXMania.ConfigIni.bAutoPlay.LP == true && CDTXMania.ConfigIni.bAutoPlay.LBD == true)
193 automode = 4; // 3 Auto
195 else if ( CDTXMania.ConfigIni.bAutoPlay.LC == false && CDTXMania.ConfigIni.bAutoPlay.HH == false &&
196 CDTXMania.ConfigIni.bAutoPlay.BD == false && CDTXMania.ConfigIni.bAutoPlay.SD == false &&
197 CDTXMania.ConfigIni.bAutoPlay.HT == false && CDTXMania.ConfigIni.bAutoPlay.LT == false &&
198 CDTXMania.ConfigIni.bAutoPlay.FT == false && CDTXMania.ConfigIni.bAutoPlay.CY == false &&
199 CDTXMania.ConfigIni.bAutoPlay.LP == false && CDTXMania.ConfigIni.bAutoPlay.LBD == false )
205 automode = 5; // Custom
211 // l.Add( ( CDTXMania.ConfigIni.bAutoPlay.Guitar == true ) ? 1 : 0 );
212 // l.Add( ( CDTXMania.ConfigIni.bAutoPlay.Bass == true ) ? 1 : 0 );
213 if ( CDTXMania.ConfigIni.bギターが全部オートプレイである)
215 automode = 0; // All Auto
217 else if ( CDTXMania.ConfigIni.bAutoPlay.GtR == true && CDTXMania.ConfigIni.bAutoPlay.GtG == true &&
218 CDTXMania.ConfigIni.bAutoPlay.GtB == true && CDTXMania.ConfigIni.bAutoPlay.GtPick == false &&
219 CDTXMania.ConfigIni.bAutoPlay.GtW == false )
221 automode = 1; // Auto Neck
223 else if ( CDTXMania.ConfigIni.bAutoPlay.GtR == false && CDTXMania.ConfigIni.bAutoPlay.GtG == false &&
224 CDTXMania.ConfigIni.bAutoPlay.GtB == false && CDTXMania.ConfigIni.bAutoPlay.GtPick == true &&
225 CDTXMania.ConfigIni.bAutoPlay.GtW == false )
227 automode = 2; // Auto Pick
229 else if ( CDTXMania.ConfigIni.bAutoPlay.GtR == false && CDTXMania.ConfigIni.bAutoPlay.GtG == false &&
230 CDTXMania.ConfigIni.bAutoPlay.GtB == false && CDTXMania.ConfigIni.bAutoPlay.GtPick == false &&
231 CDTXMania.ConfigIni.bAutoPlay.GtW == false )
237 automode = 3; // Custom
242 if ( CDTXMania.ConfigIni.bベースが全部オートプレイである )
244 automode = 0; // All Auto
246 else if ( CDTXMania.ConfigIni.bAutoPlay.BsR == true && CDTXMania.ConfigIni.bAutoPlay.BsG == true &&
247 CDTXMania.ConfigIni.bAutoPlay.BsB == true && CDTXMania.ConfigIni.bAutoPlay.BsPick == false &&
248 CDTXMania.ConfigIni.bAutoPlay.BsW == false )
250 automode = 1; // Auto Neck
252 else if ( CDTXMania.ConfigIni.bAutoPlay.BsR == false && CDTXMania.ConfigIni.bAutoPlay.BsG == false &&
253 CDTXMania.ConfigIni.bAutoPlay.BsB == false && CDTXMania.ConfigIni.bAutoPlay.BsPick == true &&
254 CDTXMania.ConfigIni.bAutoPlay.BsW == false )
256 automode = 2; // Auto Pick
258 else if ( CDTXMania.ConfigIni.bAutoPlay.BsR == false && CDTXMania.ConfigIni.bAutoPlay.BsG == false &&
259 CDTXMania.ConfigIni.bAutoPlay.BsB == false && CDTXMania.ConfigIni.bAutoPlay.BsPick == false &&
260 CDTXMania.ConfigIni.bAutoPlay.BsW == false )
266 automode = 3; // Custom
274 public override void tActivatePopupMenu( E楽器パート einst )
276 this.CActSelectQuickConfigMain();
277 base.tActivatePopupMenu( einst );
279 //public void tDeativatePopupMenu()
281 // base.tDeativatePopupMenu();
285 /// Auto Modeにフォーカスを合わせているときだけ、AUTOの設定状態を表示する。
288 public override void t進行描画sub()
290 if ( base.n現在の選択行 == (int) EOrder.AutoMode )
292 if ( tx文字列パネル == null ) // TagetとAuto Modeを全く変更せずにAuto Modeまで動かした場合限り、ここに来る
297 if ( this.txパネル本体 != null )
299 this.txパネル本体.t2D描画( CDTXMania.app.Device, 213 * Scale.X, 167 * Scale.Y );
301 if ( this.tx文字列パネル != null )
303 int x = ( nCurrentTarget == (int) E楽器パート.DRUMS ) ? 230 : 260;
304 this.tx文字列パネル.t2D描画( CDTXMania.app.Device, x * Scale.X, 190 * Scale.Y);
311 /// DrumsのAUTOパラメータを一覧表示するパネルを作成する
313 private void MakeAutoPanel()
315 Bitmap image = new Bitmap( (int)(300 * Scale.X), (int)(130 * Scale.Y) );
316 Graphics graphics = Graphics.FromImage( image );
318 string header = "", s = "";
319 switch ( nCurrentTarget )
321 case (int) E楽器パート.DRUMS:
322 header = "LHSBHLFCPRB";
324 case (int) E楽器パート.GUITAR:
325 case (int) E楽器パート.BASS:
331 s = GetAutoParameters( nCurrentTarget );
332 for ( int i = 0; i < header.Length; i++ )
334 graphics.DrawString( header[ i ].ToString(), this.ft表示用フォント, Brushes.White, (float) i * 24 * Scale.X, (float) 0f );
335 graphics.DrawString( s[i].ToString(), this.ft表示用フォント, Brushes.White, (float) i * 24 * Scale.X, (float) 24f * Scale.Y );
341 if ( this.tx文字列パネル != null )
343 this.tx文字列パネル.Dispose();
345 this.tx文字列パネル = new CTexture( CDTXMania.app.Device, image, CDTXMania.TextureFormat );
346 this.tx文字列パネル.vc拡大縮小倍率 = new Vector3( 1f, 1f, 1f );
349 catch ( CTextureCreateFailedException )
351 Trace.TraceError( "演奏履歴文字列テクスチャの作成に失敗しました。" );
352 this.tx文字列パネル = null;
356 public override void tEnter押下Main( int nSortOrder )
360 case (int) EOrder.Target:
361 nCurrentTarget = ( nCurrentTarget + 1 ) % 3;
362 // eInst = (E楽器パート) nCurrentTarget; // ここではeInstは変えない。メニューを開いたタイミングでのみeInstを使う
363 Initialize( lci[ nCurrentConfigSet ][ nCurrentTarget ], true, QuickCfgTitle, n現在の選択行 );
367 case (int) EOrder.AutoMode:
371 case (int) EOrder.ScrollSpeed:
372 CDTXMania.ConfigIni.n譜面スクロール速度[ nCurrentTarget ] = (int) GetObj現在値( (int) EOrder.ScrollSpeed );
375 case (int) EOrder.Dark:
377 Eダークモード d = (Eダークモード) GetIndex( (int) EOrder.Dark );
378 CDTXMania.ConfigIni.eDark = d;
379 SetValueToAllTarget( (int) EOrder.Dark, (int) d ); // 全楽器で共有する値のため、全targetに値を展開する
382 case (int) EOrder.Risky:
384 int r = (int) GetObj現在値( (int) EOrder.Risky );
385 CDTXMania.ConfigIni.nRisky = r;
386 SetValueToAllTarget( (int) EOrder.Risky, r ); // 全楽器で共有する値のため、全targetに値を展開する
389 case (int) EOrder.PlaySpeed:
390 CDTXMania.ConfigIni.n演奏速度 = (int) GetObj現在値( (int) EOrder.PlaySpeed );
392 case (int) EOrder.SuddenHidden:
393 int sh = (int) GetIndex( (int) EOrder.SuddenHidden );
396 CDTXMania.ConfigIni.bSudden[ nCurrentTarget ] = ( ( sh & 1 ) > 0 ) ? true : false;
397 CDTXMania.ConfigIni.bHidden[ nCurrentTarget ] = ( ( sh & 2 ) > 0 ) ? true : false;
398 CDTXMania.ConfigIni.eInvisible[ nCurrentTarget ] = EInvisible.OFF;
402 CDTXMania.ConfigIni.bSudden[ nCurrentTarget ] = CDTXMania.ConfigIni.bHidden[ nCurrentTarget ] = false;
403 CDTXMania.ConfigIni.eInvisible[ nCurrentTarget ] = ( EInvisible ) ( sh - 3 );
406 case (int) EOrder.AutoGhost: // #35411 chnmr0 AUTOゴーストデータ
407 EAutoGhostData gd = (EAutoGhostData)GetIndex((int)EOrder.AutoGhost);
408 CDTXMania.ConfigIni.eAutoGhost[ nCurrentTarget ] = gd;
411 case (int)EOrder.TargetGhost: // #35411 chnmr0 ターゲットゴーストデータ
412 ETargetGhostData gtd = (ETargetGhostData)GetIndex((int)EOrder.TargetGhost);
413 CDTXMania.ConfigIni.eTargetGhost[ nCurrentTarget ] = gtd;
416 case (int) EOrder.ConfSet: // CONF-SET切り替え
417 nCurrentConfigSet = (int) GetIndex( (int) EOrder.ConfSet );
418 //Initialize( lci[ nCurrentConfigSet ], true, QuickCfgTitle, pos );
421 case (int) EOrder.More:
422 SetAutoParameters(); // 簡易CONFIGメニュー脱出に伴い、簡易CONFIG内のAUTOの設定をConfigIniクラスに反映する
423 this.bGotoDetailConfig = true;
424 this.tDeativatePopupMenu();
427 case (int) EOrder.Return:
428 SetAutoParameters(); // 簡易CONFIGメニュー脱出に伴い、簡易CONFIG内のAUTOの設定をConfigIniクラスに反映する
429 this.tDeativatePopupMenu();
436 public override void tCancel()
439 // Autoの設定値保持のロジックを書くこと!
440 // (Autoのパラメータ切り替え時は実際に値設定していないため、キャンセルまたはRetern, More...時に値設定する必要有り)
444 /// 1つの値を、全targetに適用する。RiskyやDarkなど、全tatgetで共通の設定となるもので使う。
446 /// <param name="order">設定項目リストの順番</param>
447 /// <param name="index">設定値(index)</param>
448 private void SetValueToAllTarget( int order, int index )
450 for ( int i = 0; i < 3; i++ )
452 lci[ nCurrentConfigSet ][ i ][ order ].SetIndex( index );
458 /// ConfigIni.bAutoPlayに簡易CONFIGの状態を反映する
460 private void SetAutoParameters()
462 for ( int target = 0; target < 3; target++ )
464 string str = GetAutoParameters( target );
465 int[] pa = { (int) Eレーン.LC, (int) Eレーン.GtR, (int) Eレーン.BsR };
466 int start = pa[ target ];
468 for ( int i = 0; i < str.Length; i++ )
470 CDTXMania.ConfigIni.bAutoPlay[ i + start ] = ( str[ i ] == 'A' ) ? true : false;
476 /// 簡易CONFIG内のAUTO状態を、文字列で返す。
478 /// <param name="target">対象楽器</param>
479 /// <returns>AutoならA,さもなくば_。この文字が複数並んだ文字列。</returns>
480 private string GetAutoParameters( int target )
486 case (int) E楽器パート.DRUMS:
487 switch ( lci[ nCurrentConfigSet ][ target ][ (int) EOrder.AutoMode ].GetIndex() )
499 case 3: // 2Pedal Auto
506 for ( int i = 0; i < 11; i++ )
508 s += ( CDTXMania.ConfigIni.bAutoPlay[ i ] ) ? "A" : "_";
515 throw new ArgumentOutOfRangeException();
519 #region [ Guitar / Bass ]
520 case (int) E楽器パート.GUITAR:
521 case (int) E楽器パート.BASS:
522 // s = ( lci[ nCurrentConfigSet ][ target ][ (int) EOrder.AutoMode ].GetIndex() ) == 1 ? "A" : "_";
523 switch ( lci[ nCurrentConfigSet ][ target ][ (int) EOrder.AutoMode ].GetIndex() )
535 int p = (target == (int) E楽器パート.GUITAR ) ? (int) Eレーン.GtR : (int) Eレーン.BsR;
536 int len = (int) Eレーン.GtW - (int) Eレーン.GtR + 1;
537 for ( int i = p; i < p + len; i++ )
539 s += ( CDTXMania.ConfigIni.bAutoPlay[ i ] ) ? "A" : "_";
546 throw new ArgumentOutOfRangeException();
559 public override void On活性化()
561 this.ft表示用フォント = new Font( "Arial", 26f * Scale.Y, FontStyle.Bold, GraphicsUnit.Pixel );
563 this.bGotoDetailConfig = false;
565 public override void On非活性化()
567 if ( this.ft表示用フォント != null )
569 this.ft表示用フォント.Dispose();
570 this.ft表示用フォント = null;
574 public override void OnManagedリソースの作成()
578 string pathパネル本体 = CSkin.Path( @"Graphics\ScreenSelect popup auto settings.png" );
579 if ( File.Exists( pathパネル本体 ) )
581 this.txパネル本体 = CDTXMania.tテクスチャの生成( pathパネル本体, true );
583 base.OnManagedリソースの作成();
586 public override void OnManagedリソースの解放()
588 if ( !base.b活性化してない )
590 CDTXMania.tテクスチャの解放( ref this.txパネル本体 );
591 CDTXMania.tテクスチャの解放( ref this.tx文字列パネル );
592 base.OnManagedリソースの解放();
598 private int nCurrentTarget = 0;
599 private int nCurrentConfigSet = 0;
600 private List<List<List<CItemBase>>> lci; // DrGtBs, ConfSet, 選択肢一覧。都合、3次のListとなる。
601 private enum EOrder : int
619 private Font ft表示用フォント;
620 private CTexture txパネル本体;
621 private CTexture tx文字列パネル;