OSDN Git Service

#32713 初コミット。SVNrev567時点での、ファイルはbranch/140707(ReBuild XGVersion)から移行したもの。
[dtxmaniaxg-verk/dtxmaniaxg-verk-git.git] / DTXManiaプロジェクト / コード / ステージ / 05.選曲 / CActSelectQuickConfig.cs
1 using System;
2 using System.Collections.Generic;
3 using System.Diagnostics;
4 using System.Text;
5 using System.Drawing;
6 using System.IO;
7 using SlimDX;
8 using FDK;
9
10 namespace DTXMania
11 {
12         internal class CActSelectQuickConfig : CActSelectPopupMenu
13         {
14                 private readonly string QuickCfgTitle = "Quick Config";
15
16
17                 // コンストラクタ
18
19                 public CActSelectQuickConfig()
20                 {
21                         CActSelectQuickConfigMain();
22                 }
23
24                 private void CActSelectQuickConfigMain()
25                 {
26 /*
27 •Target: Drums/Guitar/Bass 
28 •Auto Mode: All ON/All OFF/CUSTOM 
29 •Auto Lane: 
30 •Scroll Speed: 
31 •Play Speed: 
32 •Risky: 
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 
37 •More... 
38 •EXIT 
39 */
40                         lci = new List<List<List<CItemBase>>>();                                                                        // この画面に来る度に、メニューを作り直す。
41                         for ( int nConfSet = 0; nConfSet < 3; nConfSet++ )
42                         {
43                                 lci.Add( new List<List<CItemBase>>() );                                                                 // ConfSet用の3つ分の枠。
44                                 for ( int nInst = 0; nInst < 3; nInst++ )
45                                 {
46                                         lci[ nConfSet ].Add( null );                                                                            // Drum/Guitar/Bassで3つ分、枠を作っておく
47                                         lci[ nConfSet ][ nInst ] = MakeListCItemBase( nConfSet, nInst );
48                                 }
49                         }
50                         base.Initialize( lci[ nCurrentConfigSet ][ nCurrentTarget ], true, QuickCfgTitle, 2 );  // ConfSet=0, nInst=Drums
51                 }
52
53                 private List<CItemBase> MakeListCItemBase( int nConfigSet, int nInst )
54                 {
55                         List<CItemBase> l = new List<CItemBase>();
56
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 )
61                         {
62                                 l.Add( new CItemList( "Auto Mode", CItemBase.Eパネル種別.通常, automode[ nInst ], "", "", new string[] { "All Auto", "Auto LP", "Auto BD", "2Pedal Auto", "XGLaneAuto", "Custom", "OFF" } ) );
63                         }
64                         else
65                         {
66                                 l.Add( new CItemList( "Auto Mode", CItemBase.Eパネル種別.通常, automode[ nInst ], "", "", new string[] { "All Auto", "Auto Neck", "Auto Pick", "Custom", "OFF"  } ) );
67                         }
68                         #endregion
69                         #region [ 個別 ScrollSpeed ]
70                         l.Add( new CItemInteger( "ScrollSpeed", 0, 1999, CDTXMania.ConfigIni.n譜面スクロール速度[ nInst ],
71                                 "演奏時のドラム譜面のスクロールの\n" +
72                                 "速度を指定します。\n" +
73                                 "x0.5 ~ x1000.0 を指定可能です。",
74                                 "To change the scroll speed for the\n" +
75                                 "drums lanes.\n" +
76                                 "You can set it from x0.5 to x1000.0.\n" +
77                                 "(ScrollSpeed=x0.5 means half speed)" ) );
78                         #endregion
79                         #region [ 共通 Dark/Risky/PlaySpeed ]
80                         l.Add( new CItemList( "Dark", CItemBase.Eパネル種別.通常, (int) CDTXMania.ConfigIni.eDark,
81                                 "HALF: 背景、レーン、ゲージが表示\n" +
82                                 "されなくなります。\n" +
83                                 "FULL: さらに小節線、拍線、判定ラ\n" +
84                                 "イン、パッドも表示されなくなります。",
85                                 "OFF: all display parts are shown.\n" +
86                                 "HALF: wallpaper, lanes and gauge are\n" +
87                                 " disappeared.\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,
92                                 "Riskyモードの設定:\n" +
93                                 "1以上の値にすると、その回数分の\n" +
94                                 "Poor/MissでFAILEDとなります。\n" +
95                                 "0にすると無効になり、\n" +
96                                 "DamageLevelに従ったゲージ増減と\n" +
97                                 "なります。\n" +
98                                 "StageFailedの設定と併用できます。",
99                                 "Risky mode:\n" +
100                                 "Set over 1, in case you'd like to specify\n" +
101                                 " the number of Poor/Miss times to be\n" +
102                                 " FAILED.\n" +
103                                 "Set 0 to disable Risky mode." ) );
104                         l.Add( new CItemInteger( "PlaySpeed", 5, 40, CDTXMania.ConfigIni.n演奏速度,
105                                 "曲の演奏速度を、速くしたり遅くした\n" +
106                                 "りすることができます。\n" +
107                                 "(※一部のサウンドカードでは正しく\n" +
108                                 "再生できない可能性があります。)",
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." ) );
114                         #endregion
115                         #region [ 個別 Sud/Hid ]
116                         int nSuddenHidden;
117                         if ( CDTXMania.ConfigIni.eInvisible[ nInst ] != EInvisible.OFF )
118                         {
119                                 nSuddenHidden = (int) CDTXMania.ConfigIni.eInvisible[ nInst ] + 3;
120                         }
121                         else
122                         {
123                                 nSuddenHidden = ( ( CDTXMania.ConfigIni.bHidden[ nInst ] ) ? 2 : 0 ) + ( ( CDTXMania.ConfigIni.bSudden[ nInst ] ) ? 1 : 0 );
124                         }
125                         l.Add( new CItemList( "Sud/Hid", CItemBase.Eパネル種別.通常, nSuddenHidden, "", "",
126                                 new string[] { "None", "Sudden", "Hidden", "Sud+Hid", "S-Invisible", "F-Invisible" } ) );
127                         #endregion
128             #region [ 個別 Ghost ]
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" }
133                 ));
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" }
138                 ));
139             #endregion
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[] { "", "" } ) );
144                         #endregion
145
146                         return l;
147                 }
148
149                 /// <summary>
150                 /// 簡易CONFIGのAUTO設定値の初期値を、ConfigIniクラスから取得・推測する
151                 /// </summary>
152                 /// <returns>Drums,Guitar,BassのAutoMode値のリスト</returns>
153                 private List<int> tConfigureAuto_DefaultSettings()
154                 {
155                         List<int> l = new List<int>();
156                         int automode;
157                         #region [ Drums ]
158                         // "All Auto", "Auto LP", "Auto BD", "2Pedal Auto", "3 Auto", "Custom", "OFF"
159                         if ( CDTXMania.ConfigIni.bドラムが全部オートプレイである )
160                         {
161                                 automode = 0;   // All Auto
162                         }
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 )
168                         {
169                                 automode = 1;   // Auto LP
170                         }
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)
176                         {
177                                 automode = 2;   // Auto BD
178                         }
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 )
184             {
185                 automode = 3;   // 2Pedal Auto
186             }
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)
192             {
193                 automode = 4;   // 3 Auto
194             }
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 )
200                     {
201                                 automode = 6;   // OFF
202                         }
203                         else
204                         {
205                                 automode = 5;   // Custom
206                         }
207                         l.Add( automode );
208                         #endregion
209                         #region [ Guitar ]
210 // "OFF", "ON" 
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ギターが全部オートプレイである)
214                         {
215                                 automode = 0;   // All Auto
216                         }
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 )
220                         {
221                                 automode = 1;   // Auto Neck
222                         }
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 )
226                         {
227                                 automode = 2;   // Auto Pick
228                         }
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 )
232                         {
233                                 automode = 4;   // OFF
234                         }
235                         else
236                         {
237                                 automode = 3;   // Custom
238                         }
239                         l.Add( automode );
240                         #endregion
241                         #region [ Bass ]
242                         if ( CDTXMania.ConfigIni.bベースが全部オートプレイである )
243                         {
244                                 automode = 0;   // All Auto
245                         }
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 )
249                         {
250                                 automode = 1;   // Auto Neck
251                         }
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 )
255                         {
256                                 automode = 2;   // Auto Pick
257                         }
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 )
261                         {
262                                 automode = 4;   // OFF
263                         }
264                         else
265                         {
266                                 automode = 3;   // Custom
267                         }
268                         l.Add( automode );
269                         #endregion
270                         return l;
271                 }
272
273                 // メソッド
274                 public override void tActivatePopupMenu( E楽器パート einst )
275                 {
276                         this.CActSelectQuickConfigMain();
277                         base.tActivatePopupMenu( einst );
278                 }
279                 //public void tDeativatePopupMenu()
280                 //{
281                 //      base.tDeativatePopupMenu();
282                 //}
283
284                 /// <summary>
285                 /// Auto Modeにフォーカスを合わせているときだけ、AUTOの設定状態を表示する。
286                 /// 現状はDrumでのみ表示。
287                 /// </summary>
288                 public override void t進行描画sub()
289                 {
290                         if ( base.n現在の選択行 == (int) EOrder.AutoMode )
291                         {
292                                         if ( tx文字列パネル == null )             // TagetとAuto Modeを全く変更せずにAuto Modeまで動かした場合限り、ここに来る
293                                         {
294                                                 MakeAutoPanel();
295                                         }
296
297                                         if ( this.txパネル本体 != null )
298                                         {
299                                                 this.txパネル本体.t2D描画( CDTXMania.app.Device, 213 * Scale.X, 167 * Scale.Y );
300                                         }
301                                         if ( this.tx文字列パネル != null )
302                                         {
303                                                 int x = ( nCurrentTarget == (int) E楽器パート.DRUMS ) ? 230 : 260;
304                                                 this.tx文字列パネル.t2D描画( CDTXMania.app.Device, x * Scale.X, 190 * Scale.Y);
305
306                                         }
307                         }
308                 }
309
310                 /// <summary>
311                 /// DrumsのAUTOパラメータを一覧表示するパネルを作成する
312                 /// </summary>
313                 private void MakeAutoPanel()
314                 {
315                         Bitmap image = new Bitmap( (int)(300 * Scale.X), (int)(130 * Scale.Y) );
316                         Graphics graphics = Graphics.FromImage( image );
317
318                         string header = "", s = "";
319                         switch ( nCurrentTarget )
320                         {
321                                 case (int) E楽器パート.DRUMS:
322                     header = "LHSBHLFCPRB";
323                                         break;
324                                 case (int) E楽器パート.GUITAR:
325                                 case (int) E楽器パート.BASS:
326                                         header = "RGBPW";
327                                         break;
328                                 default:
329                                         break;
330                         }
331                         s = GetAutoParameters( nCurrentTarget );
332                         for ( int i = 0; i < header.Length; i++ )
333                         {
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 );
336                         }
337                         graphics.Dispose();
338
339                         try
340                         {
341                                 if ( this.tx文字列パネル != null )
342                                 {
343                                         this.tx文字列パネル.Dispose();
344                                 }
345                                 this.tx文字列パネル = new CTexture( CDTXMania.app.Device, image, CDTXMania.TextureFormat );
346                                 this.tx文字列パネル.vc拡大縮小倍率 = new Vector3( 1f, 1f, 1f );
347                                 image.Dispose();
348                         }
349                         catch ( CTextureCreateFailedException )
350                         {
351                                 Trace.TraceError( "演奏履歴文字列テクスチャの作成に失敗しました。" );
352                                 this.tx文字列パネル = null;
353                         }
354                 }
355
356                 public override void tEnter押下Main( int nSortOrder )
357                 {
358             switch ( n現在の選択行 )
359             {
360                                 case (int) EOrder.Target:
361                                         nCurrentTarget = ( nCurrentTarget + 1 ) % 3;
362                                         // eInst = (E楽器パート) nCurrentTarget;   // ここではeInstは変えない。メニューを開いたタイミングでのみeInstを使う
363                                         Initialize( lci[ nCurrentConfigSet ][ nCurrentTarget ], true, QuickCfgTitle, n現在の選択行 );
364                                         MakeAutoPanel();
365                                         break;
366
367                                 case (int) EOrder.AutoMode:
368                                         MakeAutoPanel();
369                                         break;
370
371                                 case (int) EOrder.ScrollSpeed:
372                                         CDTXMania.ConfigIni.n譜面スクロール速度[ nCurrentTarget ] = (int) GetObj現在値( (int) EOrder.ScrollSpeed );
373                                         break;
374
375                                 case (int) EOrder.Dark:
376                                         {
377                                                 Eダークモード d = (Eダークモード) GetIndex( (int) EOrder.Dark );
378                                                 CDTXMania.ConfigIni.eDark = d;
379                                                 SetValueToAllTarget( (int) EOrder.Dark, (int) d );              // 全楽器で共有する値のため、全targetに値を展開する
380                                         }
381                                         break;
382                                 case (int) EOrder.Risky:
383                                         {
384                                                 int r = (int) GetObj現在値( (int) EOrder.Risky );
385                                                 CDTXMania.ConfigIni.nRisky = r;
386                                                 SetValueToAllTarget( (int) EOrder.Risky, r );                   // 全楽器で共有する値のため、全targetに値を展開する
387                                         }
388                                         break;
389                                 case (int) EOrder.PlaySpeed:
390                                         CDTXMania.ConfigIni.n演奏速度 = (int) GetObj現在値( (int) EOrder.PlaySpeed );
391                                         break;
392                                 case (int) EOrder.SuddenHidden:
393                                         int sh = (int) GetIndex( (int) EOrder.SuddenHidden );
394                                         if ( sh <= 3 )
395                                         {
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;
399                                         }
400                                         else
401                                         {
402                                                 CDTXMania.ConfigIni.bSudden[ nCurrentTarget ] = CDTXMania.ConfigIni.bHidden[ nCurrentTarget ] = false;
403                                                 CDTXMania.ConfigIni.eInvisible[ nCurrentTarget ] = ( EInvisible ) ( sh - 3 );
404                                         }
405                                         break;
406                 case (int) EOrder.AutoGhost: // #35411 chnmr0 AUTOゴーストデータ
407                     EAutoGhostData gd = (EAutoGhostData)GetIndex((int)EOrder.AutoGhost);
408                     CDTXMania.ConfigIni.eAutoGhost[ nCurrentTarget ] = gd;
409                     break;
410
411                 case (int)EOrder.TargetGhost: // #35411 chnmr0 ターゲットゴーストデータ
412                     ETargetGhostData gtd = (ETargetGhostData)GetIndex((int)EOrder.TargetGhost);
413                     CDTXMania.ConfigIni.eTargetGhost[ nCurrentTarget ] = gtd;
414                     break;
415
416                                 case (int) EOrder.ConfSet:                      // CONF-SET切り替え
417                                         nCurrentConfigSet = (int) GetIndex( (int) EOrder.ConfSet );
418                                         //Initialize( lci[ nCurrentConfigSet ], true, QuickCfgTitle, pos );
419                                         break;
420
421                                 case (int) EOrder.More:
422                                         SetAutoParameters();                    // 簡易CONFIGメニュー脱出に伴い、簡易CONFIG内のAUTOの設定をConfigIniクラスに反映する
423                                         this.bGotoDetailConfig = true;
424                                         this.tDeativatePopupMenu();
425                                         break;
426
427                                 case (int) EOrder.Return:
428                                         SetAutoParameters();                    // 簡易CONFIGメニュー脱出に伴い、簡易CONFIG内のAUTOの設定をConfigIniクラスに反映する
429                                         this.tDeativatePopupMenu();
430                     break;
431                 default:
432                     break;
433             }
434                 }
435
436                 public override void tCancel()
437                 {
438                         SetAutoParameters();
439                         // Autoの設定値保持のロジックを書くこと!
440                         // (Autoのパラメータ切り替え時は実際に値設定していないため、キャンセルまたはRetern, More...時に値設定する必要有り)
441                 }
442
443                 /// <summary>
444                 /// 1つの値を、全targetに適用する。RiskyやDarkなど、全tatgetで共通の設定となるもので使う。
445                 /// </summary>
446                 /// <param name="order">設定項目リストの順番</param>
447                 /// <param name="index">設定値(index)</param>
448                 private void SetValueToAllTarget( int order, int index )
449                 {
450                         for ( int i = 0; i < 3; i++ )
451                         {
452                                 lci[ nCurrentConfigSet ][ i ][ order ].SetIndex( index );
453                         }
454                 }
455                 
456
457                 /// <summary>
458                 /// ConfigIni.bAutoPlayに簡易CONFIGの状態を反映する
459                 /// </summary>
460                 private void SetAutoParameters()
461                 {
462                         for ( int target = 0; target < 3; target++ )
463                         {
464                                 string str = GetAutoParameters( target );
465                                 int[] pa = { (int) Eレーン.LC, (int) Eレーン.GtR, (int) Eレーン.BsR };
466                                 int start = pa[ target ];
467
468                                 for ( int i = 0; i < str.Length; i++ )
469                                 {
470                                         CDTXMania.ConfigIni.bAutoPlay[ i + start ] = ( str[ i ] == 'A' ) ? true : false;
471                                 }
472                         }
473                 }
474
475                 /// <summary>
476                 /// 簡易CONFIG内のAUTO状態を、文字列で返す。
477                 /// </summary>
478                 /// <param name="target">対象楽器</param>
479                 /// <returns>AutoならA,さもなくば_。この文字が複数並んだ文字列。</returns>
480                 private string GetAutoParameters( int target )
481                 {
482                         string s = "";
483                         switch ( target )
484                         {
485                                 #region [ DRUMS ]
486                                 case (int) E楽器パート.DRUMS:
487                                         switch ( lci[ nCurrentConfigSet ][ target ][ (int) EOrder.AutoMode ].GetIndex() )
488                                         {
489                         //LHPSBHLFCR
490                                                 case 0: // All Auto
491                                                         s = "AAAAAAAAAAA";
492                                                         break;
493                                                 case 1: // Auto LP
494                                                         s = "________A_A";
495                                                         break;
496                                                 case 2: // Auto BD
497                                                         s = "___A_______";
498                                                         break;
499                         case 3: // 2Pedal Auto
500                             s = "___A____A_A";
501                             break;
502                         case 4: // 3 Auto
503                             s = "A_____A_A_A";
504                             break;
505                                                 case 5: // Custom
506                                                         for ( int i = 0; i < 11; i++ )
507                                                         {
508                                                                 s += ( CDTXMania.ConfigIni.bAutoPlay[ i ] ) ? "A" : "_";
509                                                         }
510                                                         break;
511                                                 case 6: // OFF
512                                                         s = "___________";
513                                                         break;
514                                                 default:
515                                                         throw new ArgumentOutOfRangeException();
516                                         }
517                                         break;
518                                 #endregion
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() )
524                                         {
525                                                 case 0: // All Auto
526                                                         s = "AAAAA";
527                                                         break;
528                                                 case 1: // Auto Neck
529                                                         s = "AAA__";
530                                                         break;
531                                                 case 2: // Auto Pick
532                                                         s = "___A_";
533                                                         break;
534                                                 case 3: // Custom
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++ )
538                                                         {
539                                                                 s += ( CDTXMania.ConfigIni.bAutoPlay[ i ] ) ? "A" : "_";
540                                                         }
541                                                         break;
542                                                 case 4: // OFF
543                                                         s = "_____";
544                                                         break;
545                                                 default:
546                                                         throw new ArgumentOutOfRangeException();
547                                         }
548                                         break;
549                                 default:
550                                         break;
551                                 #endregion
552                         }
553                         return s;
554                 }
555
556
557                 // CActivity 実装
558
559                 public override void On活性化()
560                 {
561                         this.ft表示用フォント = new Font( "Arial", 26f * Scale.Y, FontStyle.Bold, GraphicsUnit.Pixel );
562                         base.On活性化();
563                         this.bGotoDetailConfig = false;
564                 }
565                 public override void On非活性化()
566                 {
567                         if ( this.ft表示用フォント != null )
568                         {
569                                 this.ft表示用フォント.Dispose();
570                                 this.ft表示用フォント = null;
571                         }
572                         base.On非活性化();
573                 }
574                 public override void OnManagedリソースの作成()
575                 {
576                         if( !base.b活性化してない )
577                         {
578                                 string pathパネル本体 = CSkin.Path( @"Graphics\ScreenSelect popup auto settings.png" );
579                                 if ( File.Exists( pathパネル本体 ) )
580                                 {
581                                         this.txパネル本体 = CDTXMania.tテクスチャの生成( pathパネル本体, true );
582                                 }
583                                 base.OnManagedリソースの作成();
584                         }
585                 }
586                 public override void OnManagedリソースの解放()
587                 {
588                         if ( !base.b活性化してない )
589                         {
590                                 CDTXMania.tテクスチャの解放( ref this.txパネル本体 );
591                                 CDTXMania.tテクスチャの解放( ref this.tx文字列パネル );
592                                 base.OnManagedリソースの解放();
593                         }
594                 }
595
596                 #region [ private ]
597                 //-----------------
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
602                 {
603                         Target = 0,
604                         AutoMode,
605                 //      AutoLane,
606                         ScrollSpeed,
607                         Dark,
608                         Risky,
609                         PlaySpeed,
610                         SuddenHidden,
611             AutoGhost,
612             TargetGhost,
613                         ConfSet,
614                         More,
615                         Return, END,
616                         Default = 99
617                 };
618
619                 private Font ft表示用フォント;
620                 private CTexture txパネル本体;
621                 private CTexture tx文字列パネル;
622                 //-----------------
623                 #endregion
624         }
625
626
627 }