OSDN Git Service

#23580 InputAdjustで設定できる値の範囲を-99~0msまでに狭めた。
[dtxmania/dtxmania.git] / DTXManiaプロジェクト / コード / ステージ / 03.オプション / CActOptionList.cs
1 using System;\r
2 using System.Collections.Generic;\r
3 using System.Text;\r
4 using System.Drawing;\r
5 using FDK;\r
6 \r
7 namespace DTXMania\r
8 {\r
9         internal class CActOptionList : CActivity\r
10         {\r
11                 // プロパティ\r
12 \r
13                 public int n現在の選択項目;\r
14                 public bool b現在選択されている項目はReturnToMenuである\r
15                 {\r
16                         get\r
17                         {\r
18                                 CItemBase currentItem = this.list項目リスト[ this.n現在の選択項目 ];\r
19                                 if (currentItem == this.iCommonReturnToMenu || currentItem == this.iDrumsReturnToMenu ||\r
20                                         currentItem == this.iGuitarReturnToMenu || currentItem == this.iBassReturnToMenu)\r
21                                 {\r
22                                         return true;\r
23                                 }\r
24                                 else\r
25                                 {\r
26                                         return false;\r
27                                 }\r
28                         }\r
29                 }\r
30                 public CItemBase ib現在の選択項目\r
31                 {\r
32                         get\r
33                         {\r
34                                 return this.list項目リスト[ this.n現在の選択項目 ];\r
35                         }\r
36                 }\r
37 \r
38 \r
39                 // メソッド\r
40 \r
41                 public void t項目リストの設定・Bass()\r
42                 {\r
43                         this.tConfigIniへ記録する();\r
44                         this.list項目リスト.Clear();\r
45 \r
46                         this.iBassReturnToMenu = new CItemBase( "<< Return To Menu", CItemBase.Eパネル種別.その他,\r
47                                 "左側のメニューに戻ります。",\r
48                                 "Return to left menu.");\r
49                         this.list項目リスト.Add(this.iBassReturnToMenu);\r
50                         this.iBassAutoPlay = new CItemToggle( "AutoPlay", CDTXMania.ConfigIni.bAutoPlay.Bass,\r
51                                 "ベースパートを自動で演奏します。",\r
52                                 "To play the bass part automatically.");\r
53                         this.list項目リスト.Add( this.iBassAutoPlay );\r
54                         this.iBassScrollSpeed = new CItemInteger( "ScrollSpeed", 0, 0x7cf, CDTXMania.ConfigIni.n譜面スクロール速度.Bass,\r
55                                 "演奏時のベース譜面のスクロールの\n速度を指定します。\nx0.5 ~ x1000.0 までを指定可能です。",\r
56                                 "To change the scroll speed for the\nbass lanes.\nYou can set it from x0.5 to x1000.0.\n(ScrollSpeed=x0.5 means half speed)");\r
57                         this.list項目リスト.Add( this.iBassScrollSpeed );\r
58                         this.iBassSudden = new CItemToggle( "Sudden", CDTXMania.ConfigIni.bSudden.Bass,\r
59                                 "ベースチップがヒットバー付近にくる\nまで表示されなくなります。",\r
60                                 "Bass chips are disappered until they\ncome near the hit bar, and suddenly\nappears.");\r
61                         this.list項目リスト.Add( this.iBassSudden );\r
62                         this.iBassHidden = new CItemToggle("Hidden", CDTXMania.ConfigIni.bHidden.Bass,\r
63                                 "ベースチップがヒットバー付近で表示\nされなくなります。",\r
64                                 "Bass chips are hidden by approaching\nto the hit bar.");\r
65                         this.list項目リスト.Add( this.iBassHidden );\r
66                         this.iBassReverse = new CItemToggle( "Reverse", CDTXMania.ConfigIni.bReverse.Bass,\r
67                                 "ベースチップが譜面の上から下に流\nれるようになります。",\r
68                                 "The scroll way is reversed. Bass chips\nflow from the top to the bottom.");\r
69                         this.list項目リスト.Add( this.iBassReverse );\r
70                         this.iBassPosition = new CItemList( "Position", CItemBase.Eパネル種別.通常,\r
71                                 (int) CDTXMania.ConfigIni.判定文字表示位置.Bass,\r
72                                 "ベースの判定文字の表示位置を指定\nします。\n  P-A: レーン上\n  P-B: COMBO の下\n  OFF: 表示しない",\r
73                                 "The position to show judgement mark.\n(Perfect, Great, ...)\n\n P-A: on the lanes.\n P-B: under the COMBO indication.\n OFF: no judgement mark.",\r
74                                 new string[] { "P-A", "P-B", "OFF" });\r
75                         this.list項目リスト.Add( this.iBassPosition );\r
76                         this.iBassRandom = new CItemList( "Random", CItemBase.Eパネル種別.通常,\r
77                                 (int) CDTXMania.ConfigIni.eRandom.Bass,\r
78                                 "ベースのチップがランダムに降ってき\nます。\n  Part: 小節・レーン単位で交換\n  Super: チップ単位で交換\n  Hyper: 全部完全に変更",\r
79                                 "Bass chips come randomly.\n\n Part: swapping lanes randomly for each\n  measures.\n Super: swapping chip randomly\n Hyper: swapping randomly\n  (number of lanes also changes)",\r
80                                 new string[] { "OFF", "Part", "Super", "Hyper" });\r
81                         this.list項目リスト.Add( this.iBassRandom );\r
82                         this.iBassLight = new CItemToggle( "Light", CDTXMania.ConfigIni.bLight.Bass,\r
83                                 "ベースチップのないところでピッキン\nグしても BAD になりません。",\r
84                                 "Even if you pick without any chips,\nit doesn't become BAD.");\r
85                         this.list項目リスト.Add( this.iBassLight );\r
86                         this.iBassLeft = new CItemToggle( "Left", CDTXMania.ConfigIni.bLeft.Bass,\r
87                                 "ベースの RGB の並びが左右反転し\nます。(左利きモード)",\r
88                                 "Lane order 'R-G-B' becomes 'B-G-R'\nfor lefty.");\r
89                         this.list項目リスト.Add( this.iBassLeft );\r
90                                                                                                                                                                                 // #23580 2011.1.3 yyagi\r
91                         this.iBassInputAdjustTimeMs = new CItemInteger("InputAdjust", -99, 0, CDTXMania.ConfigIni.nInputAdjustTimeMs.Bass,\r
92                                 "ベースの入力タイミングの微調整を\n行います。\n-99 ~ 0ms まで指定可能です。入力ラグを軽減するためには、負の\n値を指定してください。",\r
93                                 "To adjust the bass input timing.\nYou can set from -99 to 0ms.\nTo decrease input lag, set minus value.");\r
94                         this.list項目リスト.Add(this.iBassInputAdjustTimeMs);\r
95 \r
96                         this.n現在の選択項目 = 0;\r
97                         this.eメニュー種別 = Eメニュー種別.Bass;\r
98                 }\r
99                 public void t項目リストの設定・Common()\r
100                 {\r
101                         this.tConfigIniへ記録する();\r
102                         this.list項目リスト.Clear();\r
103                         this.iCommonReturnToMenu = new CItemBase( "<< Return To Menu", CItemBase.Eパネル種別.その他,\r
104                                 "左側のメニューに戻ります。",\r
105                                 "Return to left menu.");\r
106                         this.list項目リスト.Add(this.iCommonReturnToMenu);\r
107                         this.iCommonDark = new CItemList( "DARK", CItemBase.Eパネル種別.通常, (int) CDTXMania.ConfigIni.eDark,\r
108                                 "HALF: 背景、レーン、ゲージが表示\nされなくなります。\nFULL: さらに小節線、拍線、判定ラ\nイン、パッドも表示されなくなります。",\r
109                                 "OFF: all display parts are shown.\nHALF: wallpaper, lanes and gauge are\n disappeared.\nFULL: additionaly to HALF, bar/beat\n lines, hit bar, pads are disappeared.",\r
110                                 new string[] { "OFF", "HALF", "FULL" } );\r
111                         this.list項目リスト.Add( this.iCommonDark );\r
112                         this.iCommonPlaySpeed = new CItemInteger( "PlaySpeed", 5, 40, CDTXMania.ConfigIni.n演奏速度,\r
113                                 "曲の演奏速度を、速くしたり遅くした\nりすることができます。\n(※一部のサウンドカードでは正しく\n 再生できない可能性があります。)",\r
114                                 "It changes the song speed.\nFor example, you can play in half\n speed by setting PlaySpeed = x0.5\n for your practice.\nNote: It also changes the songs' pitch.");\r
115                         this.list項目リスト.Add( this.iCommonPlaySpeed );\r
116                         this.n現在の選択項目 = 0;\r
117                         this.eメニュー種別 = Eメニュー種別.Common;\r
118                 }\r
119                 public void t項目リストの設定・Drums()\r
120                 {\r
121                         this.tConfigIniへ記録する();\r
122                         this.list項目リスト.Clear();\r
123                         this.iDrumsReturnToMenu = new CItemBase( "<< Return To Menu", CItemBase.Eパネル種別.その他,\r
124                                 "左側のメニューに戻ります。",\r
125                                 "Return to left menu.");\r
126                         this.list項目リスト.Add(this.iDrumsReturnToMenu);\r
127                         this.iDrumsAutoPlayAll = new CItemThreeState( "AutoPlay (All)", CItemThreeState.E状態.不定,\r
128                                 "全パッドの自動演奏の ON/OFF を\nまとめて切り替えます。",\r
129                                 "You can change whether Auto or not\n for all drums lanes at once.");\r
130                         this.list項目リスト.Add( this.iDrumsAutoPlayAll );\r
131                         this.iDrumsLeftCymbal = new CItemToggle( "    LeftCymbal", CDTXMania.ConfigIni.bAutoPlay.LC,\r
132                                 "左シンバルを自動で演奏します。",\r
133                                 "To play LeftCymbal automatically.");\r
134                         this.list項目リスト.Add( this.iDrumsLeftCymbal );\r
135                         this.iDrumsHiHat = new CItemToggle( "    HiHat", CDTXMania.ConfigIni.bAutoPlay.HH,\r
136                                 "ハイハットを自動で演奏します。\n(クローズ、オープンとも)",\r
137                                 "To play HiHat automatically.\n(It effects to both HH-close and\n HH-open)");\r
138                         this.list項目リスト.Add( this.iDrumsHiHat );\r
139                         this.iDrumsSnare = new CItemToggle( "    Snare", CDTXMania.ConfigIni.bAutoPlay.SD,\r
140                                 "スネアを自動で演奏します。",\r
141                                 "To play Snare automatically.");\r
142                         this.list項目リスト.Add( this.iDrumsSnare );\r
143                         this.iDrumsBass = new CItemToggle( "    BassDrum", CDTXMania.ConfigIni.bAutoPlay.BD,\r
144                                 "バスドラムを自動で演奏します。",\r
145                                 "To play Bass Drum automatically.");\r
146                         this.list項目リスト.Add( this.iDrumsBass );\r
147                         this.iDrumsHighTom = new CItemToggle( "    HighTom", CDTXMania.ConfigIni.bAutoPlay.HT,\r
148                                 "ハイタムを自動で演奏します。",\r
149                                 "To play High Tom automatically.");\r
150                         this.list項目リスト.Add( this.iDrumsHighTom );\r
151                         this.iDrumsLowTom = new CItemToggle( "    LowTom", CDTXMania.ConfigIni.bAutoPlay.LT,\r
152                                 "ロータムを自動で演奏します。",\r
153                                 "To play Low Tom automatically.");\r
154                         this.list項目リスト.Add( this.iDrumsLowTom );\r
155                         this.iDrumsFloorTom = new CItemToggle( "    FloorTom", CDTXMania.ConfigIni.bAutoPlay.FT,\r
156                                 "フロアタムを自動で演奏します。",\r
157                                 "To play Floor Tom automatically.");\r
158                         this.list項目リスト.Add( this.iDrumsFloorTom );\r
159                         this.iDrumsCymbalRide = new CItemToggle( "    Cym/Ride", CDTXMania.ConfigIni.bAutoPlay.CY,\r
160                                 "右シンバルとライドシンバルを自動で\n演奏します。",\r
161                                 "To play both right- and Ride-Cymbal\n automatically.");\r
162                         this.list項目リスト.Add( this.iDrumsCymbalRide );\r
163                         this.iDrumsScrollSpeed = new CItemInteger( "ScrollSpeed", 0, 0x7cf, CDTXMania.ConfigIni.n譜面スクロール速度.Drums,\r
164                                 "演奏時のドラム譜面のスクロールの\n速度を指定します。\nx0.5 ~ x1000.0 を指定可能です。",\r
165                                 "To change the scroll speed for the\ndrums lanes.\nYou can set it from x0.5 to x1000.0.\n(ScrollSpeed=x0.5 means half speed)");\r
166                         this.list項目リスト.Add( this.iDrumsScrollSpeed );\r
167                         this.iDrumsComboPosition = new CItemList( "ComboPosition", CItemBase.Eパネル種別.通常, (int) CDTXMania.ConfigIni.ドラムコンボ文字の表示位置,\r
168                                 "演奏時のドラムコンボ文字列の位置\nを指定します。",\r
169                                 "The display position for Drums Combo.\nNote that it doesn't take effect\n at Autoplay ([Left] is forcely used).",\r
170                                 new string[] { "Left", "Center", "Right", "OFF" } );\r
171                         this.list項目リスト.Add( this.iDrumsComboPosition );\r
172                         this.iDrumsSudden = new CItemToggle("Sudden", CDTXMania.ConfigIni.bSudden.Drums,\r
173                                 "ドラムチップが譜面の下の方から表\n示されるようになります。",\r
174                                 "Drums chips are disappered until they\ncome near the hit bar, and suddenly\nappears.");\r
175                         this.list項目リスト.Add( this.iDrumsSudden );\r
176                         this.iDrumsHidden = new CItemToggle( "Hidden", CDTXMania.ConfigIni.bHidden.Drums,\r
177                                 "ドラムチップが譜面の下の方で表示\nされなくなります。",\r
178                                 "Drums chips are hidden by approaching\nto the hit bar. ");\r
179                         this.list項目リスト.Add( this.iDrumsHidden );\r
180                         this.iDrumsReverse = new CItemToggle( "Reverse", CDTXMania.ConfigIni.bReverse.Drums,\r
181                                 "ドラムチップが譜面の下から上に流\nれるようになります。",\r
182                                 "The scroll way is reversed. Drums chips\nflow from the bottom to the top.");\r
183                         this.list項目リスト.Add( this.iDrumsReverse );\r
184                         this.iDrumsPosition = new CItemList( "Position", CItemBase.Eパネル種別.通常, (int) CDTXMania.ConfigIni.判定文字表示位置.Drums,\r
185                                 "ドラムの判定文字の表示位置を指定\nします。\n  P-A: レーン上\n  P-B: 判定ライン下\n  OFF: 表示しない",\r
186                                 "The position to show judgement mark.\n(Perfect, Great, ...)\n\n P-A: on the lanes.\n P-B: under the hit bar.\n OFF: no judgement mark.",\r
187                                 new string[] { "P-A", "P-B", "OFF" } );\r
188                         this.list項目リスト.Add( this.iDrumsPosition );\r
189                         this.iDrumsTight = new CItemToggle( "Tight", CDTXMania.ConfigIni.bTight,\r
190                                 "ドラムチップのないところでパッドを\n叩くとミスになります。",\r
191                                 "It becomes MISS to hit pad without\n chip.");\r
192                         this.list項目リスト.Add( this.iDrumsTight );\r
193                                                                                                                                                                         // #23580 2011.1.3 yyagi\r
194                         this.iDrumsInputAdjustTimeMs = new CItemInteger("InputAdjust", -99, 0, CDTXMania.ConfigIni.nInputAdjustTimeMs.Drums,\r
195                                 "ドラムの入力タイミングの微調整を\n行います。\n-99 ~ 0ms まで指定可能です。\n入力ラグを軽減するためには、負の\n値を指定してください。",\r
196                                 "To adjust the drums input timing.\nYou can set from -99 to 0ms.\nTo decrease input lag, set minus value.");\r
197                         this.list項目リスト.Add(this.iDrumsInputAdjustTimeMs);\r
198             // #24074 2011.01.23 add ikanick\r
199                         this.iDrumsGraph = new CItemToggle( "Graph", CDTXMania.ConfigIni.bGraph.Drums,\r
200                                 "最高スキルと比較できるグラフを\n表示します。\nオートプレイだと表示されません。",\r
201                                 "To draw Graph \n or not.");\r
202                         this.list項目リスト.Add( this.iDrumsGraph );\r
203 \r
204                         this.n現在の選択項目 = 0;\r
205                         this.eメニュー種別 = Eメニュー種別.Drums;\r
206                 }\r
207                 public void t項目リストの設定・Exit()\r
208                 {\r
209                         this.tConfigIniへ記録する();\r
210                         this.eメニュー種別 = Eメニュー種別.Unknown;\r
211                 }\r
212                 public void t項目リストの設定・Guitar()\r
213                 {\r
214                         this.tConfigIniへ記録する();\r
215                         this.list項目リスト.Clear();\r
216                         this.iGuitarReturnToMenu = new CItemBase( "<< Return To Menu", CItemBase.Eパネル種別.その他,\r
217                                 "左側のメニューに戻ります。",\r
218                                 "Return to left menu.");\r
219                         this.list項目リスト.Add(this.iGuitarReturnToMenu);\r
220                         this.iGuitarAutoPlay = new CItemToggle( "AutoPlay", CDTXMania.ConfigIni.bAutoPlay.Guitar,\r
221                                 "ギターパートを自動で演奏します。",\r
222                                 "To play the guitar part automatically.");\r
223                         this.list項目リスト.Add( this.iGuitarAutoPlay );\r
224                         this.iGuitarScrollSpeed = new CItemInteger( "ScrollSpeed", 0, 0x7cf, CDTXMania.ConfigIni.n譜面スクロール速度.Guitar,\r
225                                 "演奏時のギター譜面のスクロールの\n速度を指定します。\nx0.5 ~ x1000.0 までを指定可能です。",\r
226                                 "To change the scroll speed for the\nguitar lanes.\nYou can set it from x0.5 to x1000.0.\n(ScrollSpeed=x0.5 means half speed)");\r
227                         this.list項目リスト.Add(this.iGuitarScrollSpeed);\r
228                         this.iGuitarSudden = new CItemToggle( "Sudden", CDTXMania.ConfigIni.bSudden.Guitar,\r
229                                 "ギターチップがヒットバー付近にくる\nまで表示されなくなります。",\r
230                                 "Guitar chips are disappered until they\ncome near the hit bar, and suddenly\nappears.");\r
231                         this.list項目リスト.Add( this.iGuitarSudden );\r
232                         this.iGuitarHidden = new CItemToggle( "Hidden", CDTXMania.ConfigIni.bHidden.Guitar,\r
233                                 "ギターチップがヒットバー付近で表示\nされなくなります。",\r
234                                 "Guitar chips are hidden by approaching\nto the hit bar. ");\r
235                         this.list項目リスト.Add( this.iGuitarHidden );\r
236                         this.iGuitarReverse = new CItemToggle( "Reverse", CDTXMania.ConfigIni.bReverse.Guitar,\r
237                                 "ギターチップが譜面の上から下に流\nれるようになります。",\r
238                                 "The scroll way is reversed. Guitar chips\nflow from the top to the bottom.");\r
239                         this.list項目リスト.Add( this.iGuitarReverse );\r
240                         this.iGuitarPosition = new CItemList( "Position", CItemBase.Eパネル種別.通常, (int) CDTXMania.ConfigIni.判定文字表示位置.Guitar,\r
241                                 "ギターの判定文字の表示位置を指定\nします。\n  P-A: レーン上\n  P-B: COMBO の下\n  OFF: 表示しない",\r
242                                 "The position to show judgement mark.\n(Perfect, Great, ...)\n\n P-A: on the lanes.\n P-B: under the COMBO indication.\n OFF: no judgement mark.",\r
243                                 new string[] { "P-A", "P-B", "OFF" } );\r
244                         this.list項目リスト.Add( this.iGuitarPosition );\r
245                         this.iGuitarRandom = new CItemList( "Random", CItemBase.Eパネル種別.通常, (int) CDTXMania.ConfigIni.eRandom.Guitar,\r
246                                 "ギターのチップがランダムに降ってき\nます。\n  Part: 小節・レーン単位で交換\n  Super: チップ単位で交換\n  Hyper: 全部完全に変更",\r
247                                 "Guitar chips come randomly.\n\n Part: swapping lanes randomly for each\n  measures.\n Super: swapping chip randomly\n Hyper: swapping randomly\n  (number of lanes also changes)",\r
248                                 new string[] { "OFF", "Part", "Super", "Hyper" } );\r
249                         this.list項目リスト.Add( this.iGuitarRandom );\r
250                         this.iGuitarLight = new CItemToggle( "Light", CDTXMania.ConfigIni.bLight.Guitar,\r
251                                 "ギターチップのないところでピッキン\nグしても BAD になりません。",\r
252                                 "Even if you pick without any chips,\nit doesn't become BAD.");\r
253                         this.list項目リスト.Add( this.iGuitarLight );\r
254                         this.iGuitarLeft = new CItemToggle( "Left", CDTXMania.ConfigIni.bLeft.Guitar,\r
255                                 "ギターの RGB の並びが左右反転し\nます。(左利きモード)",\r
256                                 "Lane order 'R-G-B' becomes 'B-G-R'\nfor lefty.");\r
257                         this.list項目リスト.Add( this.iGuitarLeft );\r
258                                                                                                                                                                         // #23580 2011.1.3 yyagi\r
259                         this.iGuitarInputAdjustTimeMs= new CItemInteger("InputAdjust", -99, 0, CDTXMania.ConfigIni.nInputAdjustTimeMs.Guitar,\r
260                                 "ギターの入力タイミングの微調整を\n行います。\n-99 ~ 0ms まで指定可能です。\n入力ラグを軽減するためには、負の\n値を指定してください。",\r
261                                 "To adjust the guitar input timing.\nYou can set from -99 to 0ms.\nTo decrease input lag, set minus value." );\r
262                         this.list項目リスト.Add( this.iGuitarInputAdjustTimeMs );\r
263 \r
264                         this.n現在の選択項目 = 0;\r
265                         this.eメニュー種別 = Eメニュー種別.Guitar;\r
266                 }\r
267                 public void tEnter押下()\r
268                 {\r
269                         if( this.b要素値にフォーカス中 )\r
270                         {\r
271                                 this.b要素値にフォーカス中 = false;\r
272                         }\r
273                         else if( this.list項目リスト[ this.n現在の選択項目 ].e種別 == CItemBase.E種別.整数 )\r
274                         {\r
275                                 this.b要素値にフォーカス中 = true;\r
276                         }\r
277                         else if( this.b現在選択されている項目はReturnToMenuである )\r
278                         {\r
279                                 this.tConfigIniへ記録する();\r
280                         }\r
281                         else\r
282                         {\r
283                                 this.list項目リスト[ this.n現在の選択項目 ].tEnter押下();\r
284                                 if( this.list項目リスト[ this.n現在の選択項目 ] == this.iDrumsAutoPlayAll )\r
285                                 {\r
286                                         this.t全部のドラムパッドのAutoを切り替える( this.iDrumsAutoPlayAll.e現在の状態 == CItemThreeState.E状態.ON );\r
287                                 }\r
288                         }\r
289                 }\r
290                 public void t次に移動()\r
291                 {\r
292                         if( this.b要素値にフォーカス中 )\r
293                         {\r
294                                 this.list項目リスト[ this.n現在の選択項目 ].t項目値を前へ移動();\r
295                         }\r
296                         else\r
297                         {\r
298                                 this.n目標のスクロールカウンタ += 100;\r
299                         }\r
300                 }\r
301                 public void t前に移動()\r
302                 {\r
303                         if( this.b要素値にフォーカス中 )\r
304                         {\r
305                                 this.list項目リスト[ this.n現在の選択項目 ].t項目値を次へ移動();\r
306                         }\r
307                         else\r
308                         {\r
309                                 this.n目標のスクロールカウンタ -= 100;\r
310                         }\r
311                 }\r
312 \r
313                 \r
314                 // CActivity 実装\r
315 \r
316                 public override void On活性化()\r
317                 {\r
318                         this.list項目リスト = new List<CItemBase>();\r
319                         this.eメニュー種別 = Eメニュー種別.Unknown;\r
320                         this.t項目リストの設定・Common();\r
321                         this.b要素値にフォーカス中 = false;\r
322                         this.n目標のスクロールカウンタ = 0;\r
323                         this.n現在のスクロールカウンタ = 0;\r
324                         this.nスクロール用タイマ値 = -1;\r
325                         this.ct三角矢印アニメ = new CCounter();\r
326                         base.On活性化();\r
327                 }\r
328                 public override void On非活性化()\r
329                 {\r
330                         this.tConfigIniへ記録する();\r
331                         this.list項目リスト.Clear();\r
332                         this.ct三角矢印アニメ = null;\r
333                         base.On非活性化();\r
334                 }\r
335                 public override void OnManagedリソースの作成()\r
336                 {\r
337                         if( !base.b活性化してない )\r
338                         {\r
339                                 this.tx通常項目行パネル = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenOption itembox.png" ), false );\r
340                                 this.txその他項目行パネル = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenOption itembox other.png" ), false );\r
341                                 this.tx三角矢印 = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\ScreenOption triangle arrow.png" ), false );\r
342                                 base.OnManagedリソースの作成();\r
343                         }\r
344                 }\r
345                 public override void OnManagedリソースの解放()\r
346                 {\r
347                         if( !base.b活性化してない )\r
348                         {\r
349                                 CDTXMania.tテクスチャの解放( ref this.tx通常項目行パネル );\r
350                                 CDTXMania.tテクスチャの解放( ref this.txその他項目行パネル );\r
351                                 CDTXMania.tテクスチャの解放( ref this.tx三角矢印 );\r
352                                 base.OnManagedリソースの解放();\r
353                         }\r
354                 }\r
355                 public override int On進行描画()\r
356                 {\r
357                         throw new InvalidOperationException( "t進行描画(bool)のほうを使用してください。" );\r
358                 }\r
359                 public int t進行描画( bool b項目リスト側にフォーカスがある )\r
360                 {\r
361                         if( !base.b活性化してない )\r
362                         {\r
363                                 if( base.b初めての進行描画 )\r
364                                 {\r
365                                         this.nスクロール用タイマ値 = CDTXMania.Timer.n現在時刻;\r
366                                         this.ct三角矢印アニメ.t開始( 0, 9, 50, CDTXMania.Timer );\r
367                                         base.b初めての進行描画 = false;\r
368                                 }\r
369                                 this.b項目リスト側にフォーカスがある = b項目リスト側にフォーカスがある;\r
370                                 long num = CDTXMania.Timer.n現在時刻;\r
371                                 if( num < this.nスクロール用タイマ値 )\r
372                                 {\r
373                                         this.nスクロール用タイマ値 = num;\r
374                                 }\r
375                                 while( ( num - this.nスクロール用タイマ値 ) >= 2 )\r
376                                 {\r
377                                         int num2 = Math.Abs( (int) ( this.n目標のスクロールカウンタ - this.n現在のスクロールカウンタ ) );\r
378                                         int num3 = 0;\r
379                                         if( num2 <= 100 )\r
380                                         {\r
381                                                 num3 = 2;\r
382                                         }\r
383                                         else if( num2 <= 300 )\r
384                                         {\r
385                                                 num3 = 3;\r
386                                         }\r
387                                         else if( num2 <= 500 )\r
388                                         {\r
389                                                 num3 = 4;\r
390                                         }\r
391                                         else\r
392                                         {\r
393                                                 num3 = 8;\r
394                                         }\r
395                                         if( this.n現在のスクロールカウンタ < this.n目標のスクロールカウンタ )\r
396                                         {\r
397                                                 this.n現在のスクロールカウンタ += num3;\r
398                                                 if( this.n現在のスクロールカウンタ > this.n目標のスクロールカウンタ )\r
399                                                 {\r
400                                                         this.n現在のスクロールカウンタ = this.n目標のスクロールカウンタ;\r
401                                                 }\r
402                                         }\r
403                                         else if( this.n現在のスクロールカウンタ > this.n目標のスクロールカウンタ )\r
404                                         {\r
405                                                 this.n現在のスクロールカウンタ -= num3;\r
406                                                 if( this.n現在のスクロールカウンタ < this.n目標のスクロールカウンタ )\r
407                                                 {\r
408                                                         this.n現在のスクロールカウンタ = this.n目標のスクロールカウンタ;\r
409                                                 }\r
410                                         }\r
411                                         if( this.n現在のスクロールカウンタ >= 100 )\r
412                                         {\r
413                                                 this.n現在の選択項目 = this.t次の項目( this.n現在の選択項目 );\r
414                                                 this.n現在のスクロールカウンタ -= 100;\r
415                                                 this.n目標のスクロールカウンタ -= 100;\r
416                                                 if( this.n目標のスクロールカウンタ == 0 )\r
417                                                 {\r
418                                                         CDTXMania.stageオプション.t項目変更通知();\r
419                                                 }\r
420                                         }\r
421                                         else if( this.n現在のスクロールカウンタ <= -100 )\r
422                                         {\r
423                                                 this.n現在の選択項目 = this.t前の項目( this.n現在の選択項目 );\r
424                                                 this.n現在のスクロールカウンタ += 100;\r
425                                                 this.n目標のスクロールカウンタ += 100;\r
426                                                 if( this.n目標のスクロールカウンタ == 0 )\r
427                                                 {\r
428                                                         CDTXMania.stageオプション.t項目変更通知();\r
429                                                 }\r
430                                         }\r
431                                         this.nスクロール用タイマ値 += 2;\r
432                                 }\r
433                                 if( this.b項目リスト側にフォーカスがある && ( this.n目標のスクロールカウンタ == 0 ) )\r
434                                 {\r
435                                         this.ct三角矢印アニメ.t進行Loop();\r
436                                 }\r
437                                 this.ptパネルの基本座標[ 4 ].X = this.b項目リスト側にフォーカスがある ? 0x114 : 0x12d;\r
438                                 int nItem = this.n現在の選択項目;\r
439                                 for( int i = 0; i < 4; i++ )\r
440                                 {\r
441                                         nItem = this.t前の項目( nItem );\r
442                                 }\r
443                                 for( int j = -4; j < 6; j++ )\r
444                                 {\r
445                                         if( ( ( j == -4 ) && ( this.n現在のスクロールカウンタ > 0 ) ) || ( ( j == 5 ) && ( this.n現在のスクロールカウンタ < 0 ) ) )\r
446                                         {\r
447                                                 nItem = this.t次の項目( nItem );\r
448                                                 continue;\r
449                                         }\r
450                                         int index = j + 4;\r
451                                         int num8 = ( this.n現在のスクロールカウンタ <= 0 ) ? ( ( ( j + 4 ) + 1 ) % 10 ) : ( ( ( ( j + 4 ) - 1 ) + 10 ) % 10 );\r
452                                         int x = this.ptパネルの基本座標[ index ].X + ( (int) ( ( this.ptパネルの基本座標[ num8 ].X - this.ptパネルの基本座標[ index ].X ) * ( ( (double) Math.Abs( this.n現在のスクロールカウンタ ) ) / 100.0 ) ) );\r
453                                         int y = this.ptパネルの基本座標[ index ].Y + ( (int) ( ( this.ptパネルの基本座標[ num8 ].Y - this.ptパネルの基本座標[ index ].Y ) * ( ( (double) Math.Abs( this.n現在のスクロールカウンタ ) ) / 100.0 ) ) );\r
454                                         switch( this.list項目リスト[ nItem ].eパネル種別 )\r
455                                         {\r
456                                                 case CItemBase.Eパネル種別.通常:\r
457                                                         if( this.tx通常項目行パネル != null )\r
458                                                         {\r
459                                                                 this.tx通常項目行パネル.t2D描画( CDTXMania.app.Device, x, y );\r
460                                                         }\r
461                                                         break;\r
462 \r
463                                                 case CItemBase.Eパネル種別.その他:\r
464                                                         if( this.txその他項目行パネル != null )\r
465                                                         {\r
466                                                                 this.txその他項目行パネル.t2D描画( CDTXMania.app.Device, x, y );\r
467                                                         }\r
468                                                         break;\r
469                                         }\r
470                                         CDTXMania.stageオプション.actFont.t文字列描画( x + 0x12, y + 12, this.list項目リスト[ nItem ].str項目名 );\r
471                                         switch( this.list項目リスト[ nItem ].e種別 )\r
472                                         {\r
473                                                 case CItemBase.E種別.ONorOFFトグル:\r
474                                                         CDTXMania.stageオプション.actFont.t文字列描画( x + 210, y + 12, ( (CItemToggle) this.list項目リスト[ nItem ] ).bON ? "ON" : "OFF" );\r
475                                                         break;\r
476 \r
477                                                 case CItemBase.E種別.ONorOFFor不定スリーステート:\r
478                                                         switch( ( (CItemThreeState) this.list項目リスト[ nItem ] ).e現在の状態 )\r
479                                                         {\r
480                                                                 case CItemThreeState.E状態.ON:\r
481                                                                         CDTXMania.stageオプション.actFont.t文字列描画( x + 210, y + 12, "ON" );\r
482                                                                         break;\r
483 \r
484                                                                 case CItemThreeState.E状態.不定:\r
485                                                                         CDTXMania.stageオプション.actFont.t文字列描画( x + 210, y + 12, "- -" );\r
486                                                                         break;\r
487 \r
488                                                                 default:\r
489                                                                         CDTXMania.stageオプション.actFont.t文字列描画( x + 210, y + 12, "OFF" );\r
490                                                                         break;\r
491                                                         }\r
492                                                         break;\r
493 \r
494                                                 case CItemBase.E種別.整数:\r
495                                                         {\r
496                                                                 if( this.list項目リスト[ nItem ] != this.iCommonPlaySpeed )\r
497                                                                 {\r
498                                                                         if( ( ( this.list項目リスト[ nItem ] == this.iDrumsScrollSpeed ) || ( this.list項目リスト[ nItem ] == this.iGuitarScrollSpeed ) ) || ( this.list項目リスト[ nItem ] == this.iBassScrollSpeed ) )\r
499                                                                         {\r
500                                                                                 float num15 = ( ( (CItemInteger) this.list項目リスト[ nItem ] ).n現在の値 + 1 ) * 0.5f;\r
501                                                                                 CDTXMania.stageオプション.actFont.t文字列描画( x + 210, y + 12, num15.ToString( "x0.0" ), ( j == 0 ) && this.b要素値にフォーカス中 );\r
502                                                                         }\r
503                                                                         else\r
504                                                                         {\r
505                                                                                 CDTXMania.stageオプション.actFont.t文字列描画( x + 210, y + 12, ( (CItemInteger) this.list項目リスト[ nItem ] ).n現在の値.ToString(), ( j == 0 ) && this.b要素値にフォーカス中 );\r
506                                                                         }\r
507                                                                         break;\r
508                                                                 }\r
509                                                                 double num14 = ( (double) ( (CItemInteger) this.list項目リスト[ nItem ] ).n現在の値 ) / 20.0;\r
510                                                                 CDTXMania.stageオプション.actFont.t文字列描画( x + 210, y + 12, num14.ToString( "0.000" ), ( j == 0 ) && this.b要素値にフォーカス中 );\r
511                                                                 break;\r
512                                                         }\r
513                                                 case CItemBase.E種別.リスト:\r
514                                                         {\r
515                                                                 CItemList list = (CItemList) this.list項目リスト[ nItem ];\r
516                                                                 CDTXMania.stageオプション.actFont.t文字列描画( x + 210, y + 12, list.list項目値[ list.n現在選択されている項目番号 ] );\r
517                                                                 break;\r
518                                                         }\r
519                                         }\r
520                                         nItem = this.t次の項目( nItem );\r
521                                 }\r
522                                 if( this.b項目リスト側にフォーカスがある && ( this.n目標のスクロールカウンタ == 0 ) )\r
523                                 {\r
524                                         int num11;\r
525                                         int num12;\r
526                                         int num13;\r
527                                         if( !this.b要素値にフォーカス中 )\r
528                                         {\r
529                                                 num11 = 0x114;\r
530                                                 num12 = 0xba - this.ct三角矢印アニメ.n現在の値;\r
531                                                 num13 = 0xfe + this.ct三角矢印アニメ.n現在の値;\r
532                                         }\r
533                                         else\r
534                                         {\r
535                                                 num11 = 0x210;\r
536                                                 num12 = 0xc6 - this.ct三角矢印アニメ.n現在の値;\r
537                                                 num13 = 0xf2 + this.ct三角矢印アニメ.n現在の値;\r
538                                         }\r
539                                         if( this.tx三角矢印 != null )\r
540                                         {\r
541                                                 this.tx三角矢印.t2D描画( CDTXMania.app.Device, num11, num12, new Rectangle( 0, 0, 0x20, 0x10 ) );\r
542                                                 this.tx三角矢印.t2D描画( CDTXMania.app.Device, num11, num13, new Rectangle( 0, 0x10, 0x20, 0x10 ) );\r
543                                         }\r
544                                 }\r
545                         }\r
546                         return 0;\r
547                 }\r
548 \r
549 \r
550                 // その他\r
551 \r
552                 #region [ private ]\r
553                 //-----------------\r
554                 private enum Eメニュー種別\r
555                 {\r
556                         Common,\r
557                         Drums,\r
558                         Guitar,\r
559                         Bass,\r
560                         Unknown\r
561                 }\r
562 \r
563                 private bool b項目リスト側にフォーカスがある;\r
564                 private bool b要素値にフォーカス中;\r
565                 private CCounter ct三角矢印アニメ;\r
566                 private Eメニュー種別 eメニュー種別;\r
567                 private CItemToggle iBassAutoPlay;\r
568                 private CItemToggle iBassHidden;\r
569                 private CItemToggle iBassLeft;\r
570                 private CItemToggle iBassLight;\r
571                 private CItemList iBassPosition;\r
572                 private CItemList iBassRandom;\r
573                 private CItemBase iBassReturnToMenu;\r
574                 private CItemToggle iBassReverse;\r
575                 private CItemInteger iBassScrollSpeed;\r
576                 private CItemToggle iBassSudden;\r
577                 private CItemList iCommonDark;\r
578                 private CItemInteger iCommonPlaySpeed;\r
579                 private CItemBase iCommonReturnToMenu;\r
580                 private CItemThreeState iDrumsAutoPlayAll;\r
581                 private CItemToggle iDrumsBass;\r
582                 private CItemList iDrumsComboPosition;\r
583                 private CItemToggle iDrumsCymbalRide;\r
584                 private CItemToggle iDrumsFloorTom;\r
585                 private CItemToggle iDrumsHidden;\r
586                 private CItemToggle iDrumsHighTom;\r
587                 private CItemToggle iDrumsHiHat;\r
588                 private CItemToggle iDrumsLeftCymbal;\r
589                 private CItemToggle iDrumsLowTom;\r
590                 private CItemList iDrumsPosition;\r
591                 private CItemBase iDrumsReturnToMenu;\r
592                 private CItemToggle iDrumsReverse;\r
593                 private CItemInteger iDrumsScrollSpeed;\r
594                 private CItemToggle iDrumsSnare;\r
595                 private CItemToggle iDrumsSudden;\r
596                 private CItemToggle iDrumsTight;\r
597                 private CItemToggle iDrumsGraph;        // #24074 2011.01.23 add ikanick\r
598                 private CItemToggle iGuitarAutoPlay;\r
599                 private CItemToggle iGuitarHidden;\r
600                 private CItemToggle iGuitarLeft;\r
601                 private CItemToggle iGuitarLight;\r
602                 private CItemList iGuitarPosition;\r
603                 private CItemList iGuitarRandom;\r
604                 private CItemBase iGuitarReturnToMenu;\r
605                 private CItemToggle iGuitarReverse;\r
606                 private CItemInteger iGuitarScrollSpeed;\r
607                 private CItemToggle iGuitarSudden;\r
608                 private CItemInteger iDrumsInputAdjustTimeMs;           // #23580 2011.1.3 yyagi\r
609                 private CItemInteger iGuitarInputAdjustTimeMs;          //\r
610                 private CItemInteger iBassInputAdjustTimeMs;            //\r
611 \r
612 \r
613                 private List<CItemBase> list項目リスト;\r
614                 private long nスクロール用タイマ値;\r
615                 private int n現在のスクロールカウンタ;\r
616                 private int n目標のスクロールカウンタ;\r
617                 private Point[] ptパネルの基本座標 = new Point[] { new Point( 0x12d, 3 ), new Point( 0x12d, 0x35 ), new Point( 0x12d, 0x67 ), new Point( 0x12d, 0x99 ), new Point( 0x114, 0xcb ), new Point( 0x12d, 0xfd ), new Point( 0x12d, 0x12f ), new Point( 0x12d, 0x161 ), new Point( 0x12d, 0x193 ), new Point( 0x12d, 0x1c5 ) };\r
618                 private CTexture txその他項目行パネル;\r
619                 private CTexture tx三角矢印;\r
620                 private CTexture tx通常項目行パネル;\r
621 \r
622                 private int t前の項目( int nItem )\r
623                 {\r
624                         if( --nItem < 0 )\r
625                         {\r
626                                 nItem = this.list項目リスト.Count - 1;\r
627                         }\r
628                         return nItem;\r
629                 }\r
630                 private int t次の項目( int nItem )\r
631                 {\r
632                         if( ++nItem >= this.list項目リスト.Count )\r
633                         {\r
634                                 nItem = 0;\r
635                         }\r
636                         return nItem;\r
637                 }\r
638                 private void t全部のドラムパッドのAutoを切り替える( bool bAutoON )\r
639                 {\r
640                         this.iDrumsLeftCymbal.bON = this.iDrumsHiHat.bON = this.iDrumsSnare.bON = this.iDrumsBass.bON = this.iDrumsHighTom.bON = this.iDrumsLowTom.bON = this.iDrumsFloorTom.bON = this.iDrumsCymbalRide.bON = bAutoON;\r
641                 }\r
642                 private void tConfigIniへ記録する()\r
643                 {\r
644                         switch( this.eメニュー種別 )\r
645                         {\r
646                                 case Eメニュー種別.Common:\r
647                                         this.tConfigIniへ記録する・Common();\r
648                                         return;\r
649 \r
650                                 case Eメニュー種別.Drums:\r
651                                         this.tConfigIniへ記録する・Drums();\r
652                                         return;\r
653 \r
654                                 case Eメニュー種別.Guitar:\r
655                                         this.tConfigIniへ記録する・Guitar();\r
656                                         return;\r
657 \r
658                                 case Eメニュー種別.Bass:\r
659                                         this.tConfigIniへ記録する・Bass();\r
660                                         return;\r
661                         }\r
662                 }\r
663                 private void tConfigIniへ記録する・Bass()\r
664                 {\r
665                         CDTXMania.ConfigIni.bAutoPlay.Bass = this.iBassAutoPlay.bON;\r
666                         CDTXMania.ConfigIni.n譜面スクロール速度.Bass = this.iBassScrollSpeed.n現在の値;\r
667                         CDTXMania.ConfigIni.bSudden.Bass = this.iBassSudden.bON;\r
668                         CDTXMania.ConfigIni.bHidden.Bass = this.iBassHidden.bON;\r
669                         CDTXMania.ConfigIni.bReverse.Bass = this.iBassReverse.bON;\r
670                         CDTXMania.ConfigIni.判定文字表示位置.Bass = (E判定文字表示位置) this.iBassPosition.n現在選択されている項目番号;\r
671                         CDTXMania.ConfigIni.eRandom.Bass = (Eランダムモード) this.iBassRandom.n現在選択されている項目番号;\r
672                         CDTXMania.ConfigIni.bLight.Bass = this.iBassLight.bON;\r
673                         CDTXMania.ConfigIni.bLeft.Bass = this.iBassLeft.bON;\r
674                         CDTXMania.ConfigIni.nInputAdjustTimeMs.Bass = this.iBassInputAdjustTimeMs.n現在の値;                // #23580 2011.1.3 yyagi\r
675                 }\r
676                 private void tConfigIniへ記録する・Common()\r
677                 {\r
678                         CDTXMania.ConfigIni.eDark = (Eダークモード) this.iCommonDark.n現在選択されている項目番号;\r
679                         CDTXMania.ConfigIni.n演奏速度 = this.iCommonPlaySpeed.n現在の値;\r
680                 }\r
681                 private void tConfigIniへ記録する・Drums()\r
682                 {\r
683                         CDTXMania.ConfigIni.bAutoPlay.LC = this.iDrumsLeftCymbal.bON;\r
684                         CDTXMania.ConfigIni.bAutoPlay.HH = this.iDrumsHiHat.bON;\r
685                         CDTXMania.ConfigIni.bAutoPlay.SD = this.iDrumsSnare.bON;\r
686                         CDTXMania.ConfigIni.bAutoPlay.BD = this.iDrumsBass.bON;\r
687                         CDTXMania.ConfigIni.bAutoPlay.HT = this.iDrumsHighTom.bON;\r
688                         CDTXMania.ConfigIni.bAutoPlay.LT = this.iDrumsLowTom.bON;\r
689                         CDTXMania.ConfigIni.bAutoPlay.FT = this.iDrumsFloorTom.bON;\r
690                         CDTXMania.ConfigIni.bAutoPlay.CY = this.iDrumsCymbalRide.bON;\r
691                         CDTXMania.ConfigIni.n譜面スクロール速度.Drums = this.iDrumsScrollSpeed.n現在の値;\r
692                         CDTXMania.ConfigIni.ドラムコンボ文字の表示位置 = (Eドラムコンボ文字の表示位置) this.iDrumsComboPosition.n現在選択されている項目番号;\r
693                         CDTXMania.ConfigIni.bSudden.Drums = this.iDrumsSudden.bON;\r
694                         CDTXMania.ConfigIni.bHidden.Drums = this.iDrumsHidden.bON;\r
695                         CDTXMania.ConfigIni.bReverse.Drums = this.iDrumsReverse.bON;\r
696                         CDTXMania.ConfigIni.判定文字表示位置.Drums = (E判定文字表示位置) this.iDrumsPosition.n現在選択されている項目番号;\r
697                         CDTXMania.ConfigIni.bTight = this.iDrumsTight.bON;\r
698                         CDTXMania.ConfigIni.nInputAdjustTimeMs.Drums = this.iDrumsInputAdjustTimeMs.n現在の値;              // #23580 2011.1.3 yyagi\r
699             CDTXMania.ConfigIni.bGraph.Drums = this.iDrumsGraph.bON;// #24074 2011.01.23 add ikanick\r
700                 }\r
701                 private void tConfigIniへ記録する・Guitar()\r
702                 {\r
703                         CDTXMania.ConfigIni.bAutoPlay.Guitar = this.iGuitarAutoPlay.bON;\r
704                         CDTXMania.ConfigIni.n譜面スクロール速度.Guitar = this.iGuitarScrollSpeed.n現在の値;\r
705                         CDTXMania.ConfigIni.bSudden.Guitar = this.iGuitarSudden.bON;\r
706                         CDTXMania.ConfigIni.bHidden.Guitar = this.iGuitarHidden.bON;\r
707                         CDTXMania.ConfigIni.bReverse.Guitar = this.iGuitarReverse.bON;\r
708                         CDTXMania.ConfigIni.判定文字表示位置.Guitar = (E判定文字表示位置) this.iGuitarPosition.n現在選択されている項目番号;\r
709                         CDTXMania.ConfigIni.eRandom.Guitar = (Eランダムモード) this.iGuitarRandom.n現在選択されている項目番号;\r
710                         CDTXMania.ConfigIni.bLight.Guitar = this.iGuitarLight.bON;\r
711                         CDTXMania.ConfigIni.bLeft.Guitar = this.iGuitarLeft.bON;\r
712                         CDTXMania.ConfigIni.nInputAdjustTimeMs.Guitar = this.iGuitarInputAdjustTimeMs.n現在の値;    // #23580 2011.1.3 yyagi\r
713                 }\r
714                 //-----------------\r
715                 #endregion\r
716         }\r
717 }\r