2 using System.Collections.Generic;
3 using System.Diagnostics;
6 using System.Threading;
11 using Color = System.Drawing.Color;
12 using Point = System.Drawing.Point;
13 using Rectangle = System.Drawing.Rectangle;
17 internal class CActConfigList : CActivity
19 STDGBSValue<COptionLabel> ReturnToMenu;
20 STDGBSValue<COptionLabel> KeyAssignMenu;
21 STDGBSValue<COptionLabel> DisplayMenu;
22 STDGBSValue<COptionLabel> EDrumsMenu;
23 COptionLabel SoundMenu;
24 COptionLabel HitRangeMenu;
25 COptionStringList skins;
27 bool b項目リスト側にフォーカスがある;
31 // #33689 2014.6.17 yyagi
32 bool InitialUseOSTimer;
33 bool InitialWASAPIEventDriven;
34 ESoundDeviceTypeForConfig InitialSystemSoundType;
35 int InitialWASAPIBufferSizeMs;
36 int InitialASIODevice;
37 bool InitialForceHighPower;
38 List<COptionBase> list項目リスト;
42 Point[] ptパネルの基本座標 = new Point[]
44 new Point(0x12d, 3), new Point(0x12d, 0x35), new Point(0x12d, 0x67),
45 new Point(0x12d, 0x99), new Point(0x114, 0xcb), new Point(0x12d, 0xfd),
46 new Point(0x12d, 0x12f), new Point(0x12d, 0x161), new Point(0x12d, 0x193),
47 new Point(0x12d, 0x1c5)
49 CTextureAf txその他項目行パネル;
51 CTextureAf tx通常項目行パネル;
52 // #28195 2012.5.2 yyagi
53 CTexture txSkinSample;
54 string[] skinSubFolders;
57 CPrivateFastFont prvFont;
58 private struct stMenuItemRight
60 public CTexture txMenuItemRight;
62 public string strParam;
63 public CTexture txParam;
64 public CTexture txParamColored;
66 stMenuItemRight[] listMenu;
69 /// #32059 2013.9.17 yyagi
71 public bool bIsFocusingParameter
79 public bool b現在選択されている項目はReturnToMenuである
83 COptionBase sel = this.list項目リスト[this.n現在の選択項目];
85 for (EPart i = EPart.Drums; i <= EPart.System; ++i)
87 if (sel == ReturnToMenu[i])
96 public bool b楽器またはシステム用メニューである
100 return eメニュー種別 == Eメニュー種別.Bass || eメニュー種別 == Eメニュー種別.Drums || eメニュー種別 == Eメニュー種別.Guitar || eメニュー種別 == Eメニュー種別.System;
104 public COptionBase ib現在の選択項目
108 return this.list項目リスト[this.n現在の選択項目];
119 if (this.b要素値にフォーカス中)
121 // #32059 2013.9.17 add yyagi
122 this.b要素値にフォーカス中 = false;
125 if (this.eメニュー種別 == Eメニュー種別.KeyAssignSystem)
127 t項目リストの設定(Eメニュー種別.System);
129 else if (this.eメニュー種別 == Eメニュー種別.KeyAssignDrums)
131 t項目リストの設定(Eメニュー種別.Drums);
133 else if (this.eメニュー種別 == Eメニュー種別.KeyAssignGuitar)
135 t項目リストの設定(Eメニュー種別.Guitar);
137 else if (this.eメニュー種別 == Eメニュー種別.KeyAssignBass)
139 t項目リストの設定(Eメニュー種別.Bass);
141 if (this.eメニュー種別 == Eメニュー種別.DisplaySystem)
143 t項目リストの設定(Eメニュー種別.System);
145 else if (this.eメニュー種別 == Eメニュー種別.DisplayDrums)
147 t項目リストの設定(Eメニュー種別.Drums);
149 else if (this.eメニュー種別 == Eメニュー種別.DisplayGuitar)
151 t項目リストの設定(Eメニュー種別.Guitar);
153 else if (this.eメニュー種別 == Eメニュー種別.DisplayBass)
155 t項目リストの設定(Eメニュー種別.Bass);
157 else if (this.eメニュー種別 == Eメニュー種別.EDrumsSettings)
159 t項目リストの設定(Eメニュー種別.Drums);
161 else if (this.eメニュー種別 == Eメニュー種別.HitRangeSettings)
163 t項目リストの設定(Eメニュー種別.System);
165 else if ( this.eメニュー種別 == Eメニュー種別.SoundSettings)
167 t項目リストの設定(Eメニュー種別.System);
171 public bool tEnter押下()
174 CDTXMania.Instance.Skin.sound決定音.t再生する();
176 if (this.b要素値にフォーカス中)
178 this.b要素値にフォーカス中 = false;
180 else if (this.list項目リスト[this.n現在の選択項目] is COptionInteger)
182 this.b要素値にフォーカス中 = true;
184 else if (this.list項目リスト[this.n現在の選択項目] is IOptionList || this.list項目リスト[this.n現在の選択項目] is COptionBool)
186 this.list項目リスト[this.n現在の選択項目].OnNext();
189 // #27029 2012.1.5 from
191 CDTXMania.Instance.ConfigIni.eBDGroup == EBDGroup.Group &&
193 (this.list項目リスト[this.n現在の選択項目] == CDTXMania.Instance.ConfigIni.eHHGroup ||
194 this.list項目リスト[this.n現在の選択項目] == CDTXMania.Instance.ConfigIni.eHitSoundPriorityHH)))
200 if (b現在選択されている項目はReturnToMenuである && b楽器またはシステム用メニューである)
204 this.list項目リスト[this.n現在の選択項目].OnEnter();
209 private void tGenerateSkinSample()
211 string path = skinSubFolders[skins.Index];
212 path = System.IO.Path.Combine(path, @"Graphics\ScreenTitle background.jpg");
213 using (Bitmap bmSrc = new Bitmap(path))
215 using (Bitmap bmDest = new Bitmap(bmSrc.Width / 4, bmSrc.Height / 4))
217 using (Graphics g = Graphics.FromImage(bmDest))
219 g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
220 g.DrawImage(bmSrc, new Rectangle(0, 0, bmSrc.Width / 4, bmSrc.Height / 4),
221 0, 0, bmSrc.Width, bmSrc.Height, GraphicsUnit.Pixel);
222 TextureFactory.tテクスチャの解放(ref txSkinSample);
223 txSkinSample = TextureFactory.tテクスチャの生成(bmDest, false);
229 // #region [ 項目リストの設定 ( Exit, KeyAssignSystem/Drums/Guitar/Bass) ]
230 public void t項目リストの設定_Exit()
232 CDTXMania.Instance.SaveConfig();
233 this.eメニュー種別 = Eメニュー種別.Unknown;
236 public void t項目リストの設定(Eメニュー種別 eMenu)
238 this.list項目リスト.Clear();
240 Func<EPad, string, string, COptionString> PadNotifier = (pad, lbl, expl) =>
242 COptionString opt = new COptionString("");
243 opt.Initialize(lbl, expl);
244 opt.OnEnterDelegate = () =>
246 CDTXMania.Instance.stageコンフィグ.tパッド選択通知(pad);
251 CResources cr = CDTXMania.Instance.Resources;
253 if (eMenu == Eメニュー種別.DisplaySystem)
255 list項目リスト.Add(ReturnToMenu.System);
256 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bFullScreen);
257 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bBGA);
258 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAVI);
259 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bFullAVI);
260 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bVSyncWait);
261 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdDebugX.Both);
262 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdDebugY.Both);
263 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdDebugX.DrOnly);
264 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdDebugY.DrOnly);
265 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdDebugX.GBOnly);
266 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdDebugY.GBOnly);
267 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdMovieX.Both);
268 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdMovieY.Both);
269 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdMovieX.DrOnly);
270 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdMovieY.DrOnly);
271 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdMovieX.GBOnly);
272 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdMovieY.GBOnly);
273 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bForceFullMovieCentering.Both);
274 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdForceFullMovieX.Both);
275 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdForceFullMovieY.Both);
276 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nBGAlpha);
277 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nShowLagType);
278 list項目リスト.Add(CDTXMania.Instance.ConfigIni.eJudgePriority);
279 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bDebugInfo);
281 else if (eMenu == Eメニュー種別.DisplayDrums)
283 list項目リスト.Add(ReturnToMenu.Drums);
284 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdInstX.Drums.Both);
285 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdInstX.Drums.DrOnly);
286 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdComboX.Drums.Both);
287 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdComboX.Drums.DrOnly);
288 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdJudgeLineY.Drums);
289 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdJudgeY.Drums);
290 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLaneOrder.LC);
291 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLaneOrder.HH);
292 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLaneOrder.SD);
293 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLaneOrder.BD);
294 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLaneOrder.HT);
295 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLaneOrder.LT);
296 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLaneOrder.FT);
297 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLaneOrder.CY);
298 list項目リスト.Add(CDTXMania.Instance.ConfigIni.eSudHidInv.Drums);
299 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bReverse.Drums);
300 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bDisplayCombo.Drums); // 112追加
301 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nMinComboDisp.Drums);
302 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bDisplayJudge.Drums); // 112追加
303 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bGraph.Drums);
305 else if (eMenu == Eメニュー種別.DisplayGuitar)
307 list項目リスト.Add(ReturnToMenu.Guitar);
308 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdInstX.Guitar.Both);
309 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdInstX.Guitar.GBOnly);
310 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdComboX.Guitar.Both);
311 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdComboX.Guitar.GBOnly);
312 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdJudgeLineY.Guitar);
313 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdJudgeY.Guitar);
314 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLaneOrder.GtR);
315 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLaneOrder.GtG);
316 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLaneOrder.GtB);
317 list項目リスト.Add(CDTXMania.Instance.ConfigIni.eSudHidInv.Guitar);
318 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bReverse.Guitar);
319 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bDisplayCombo.Guitar); // 112追加
320 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nMinComboDisp.Guitar);
321 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bDisplayJudge.Guitar); // 112追加
322 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bGraph.Guitar);
324 else if (eMenu == Eメニュー種別.DisplayBass)
326 list項目リスト.Add(ReturnToMenu.Bass);
327 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdInstX.Bass.Both);
328 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdInstX.Bass.GBOnly);
329 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdComboX.Bass.Both);
330 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdComboX.Bass.GBOnly);
331 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdJudgeLineY.Bass);
332 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdJudgeY.Bass);
333 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLaneOrder.BsR);
334 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLaneOrder.BsG);
335 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLaneOrder.BsB);
336 list項目リスト.Add(CDTXMania.Instance.ConfigIni.eSudHidInv.Bass);
337 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bReverse.Bass);
338 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bDisplayCombo.Bass); // 112追加
339 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nMinComboDisp.Bass);
340 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bDisplayJudge.Bass); // 112追加
341 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bGraph.Bass);
343 else if (eMenu == Eメニュー種別.EDrumsSettings)
345 list項目リスト.Add(ReturnToMenu.Drums);
346 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nVelocityMin.LC);
347 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nVelocityMin.HH);
348 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nVelocityMin.SD);
349 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nVelocityMin.BD);
350 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nVelocityMin.HT);
351 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nVelocityMin.LT);
352 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nVelocityMin.FT);
353 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nVelocityMin.CY);
354 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nVelocityMin.RD);
356 else if (eMenu == Eメニュー種別.HitRangeSettings)
358 list項目リスト.Add(ReturnToMenu.System);
359 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nHitRange.Perfect);
360 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nHitRange.Great);
361 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nHitRange.Good);
362 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nHitRange.Poor);
364 else if (eMenu == Eメニュー種別.KeyAssignSystem)
366 list項目リスト.Add(ReturnToMenu.System);
367 list項目リスト.Add(PadNotifier(EPad.Capture, cr.Label("strCfgKeyAssignCapture"), cr.Explanation("strCfgKeyAssignCapture") ));
369 else if (eMenu == Eメニュー種別.KeyAssignDrums)
371 list項目リスト.Add(ReturnToMenu.Drums);
372 list項目リスト.Add(PadNotifier(EPad.LC, cr.Label("strCfgKeyAssignLC"), cr.Explanation("strCfgKeyAssignLC") ));
373 list項目リスト.Add(PadNotifier(EPad.HH, cr.Label("strCfgKeyAssignHH"), cr.Explanation("strCfgKeyAssignHH") ));
374 list項目リスト.Add(PadNotifier(EPad.HHO,cr.Label("strCfgKeyAssignHHO"), cr.Explanation("strCfgKeyAssignHHO") ));
375 list項目リスト.Add(PadNotifier(EPad.SD, cr.Label("strCfgKeyAssignSD"), cr.Explanation("strCfgKeyAssignSD") ));
376 list項目リスト.Add(PadNotifier(EPad.BD, cr.Label("strCfgKeyAssignBD"), cr.Explanation("strCfgKeyAssignBD") ));
377 list項目リスト.Add(PadNotifier(EPad.HT, cr.Label("strCfgKeyAssignHT"), cr.Explanation("strCfgKeyAssignHT") ));
378 list項目リスト.Add(PadNotifier(EPad.LT, cr.Label("strCfgKeyAssignLT"), cr.Explanation("strCfgKeyAssignLT") ));
379 list項目リスト.Add(PadNotifier(EPad.FT, cr.Label("strCfgKeyAssignFT"), cr.Explanation("strCfgKeyAssignFT") ));
380 list項目リスト.Add(PadNotifier(EPad.CY, cr.Label("strCfgKeyAssignCY"), cr.Explanation("strCfgKeyAssignCY") ));
381 list項目リスト.Add(PadNotifier(EPad.RD, cr.Label("strCfgKeyAssignRD"), cr.Explanation("strCfgKeyAssignRD") ));
382 list項目リスト.Add(PadNotifier(EPad.HP, cr.Label("strCfgKeyAssignHP"), cr.Explanation("strCfgKeyAssignHP") ));
383 list項目リスト.Add(CDTXMania.Instance.ConfigIni.eHHGroup);
384 list項目リスト.Add(CDTXMania.Instance.ConfigIni.eFTGroup);
385 list項目リスト.Add(CDTXMania.Instance.ConfigIni.eCYGroup);
386 list項目リスト.Add(CDTXMania.Instance.ConfigIni.eBDGroup);
387 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bCymbalFree);
388 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nInputAdjustTimeMs.Drums);
390 else if (eMenu == Eメニュー種別.KeyAssignGuitar)
392 list項目リスト.Add(ReturnToMenu.Guitar);
393 list項目リスト.Add(PadNotifier(EPad.GtR, cr.Label("strCfgKeyAssignGtR"), cr.Explanation("strCfgKeyAssignGtR") ));
394 list項目リスト.Add(PadNotifier(EPad.GtG, cr.Label("strCfgKeyAssignGtG"), cr.Explanation("strCfgKeyAssignGtG") ));
395 list項目リスト.Add(PadNotifier(EPad.GtB, cr.Label("strCfgKeyAssignGtB"), cr.Explanation("strCfgKeyAssignGtB") ));
396 list項目リスト.Add(PadNotifier(EPad.GtPick, cr.Label("strCfgKeyAssignGtPick"), cr.Explanation("strCfgKeyAssignGtPick") ));
397 list項目リスト.Add(PadNotifier(EPad.GtWail, cr.Label("strCfgKeyAssignGtWailing"), cr.Explanation("strCfgKeyAssignGtWailing") ));
398 list項目リスト.Add(PadNotifier(EPad.GtDecide, cr.Label("strCfgKeyAssignGtDecide"), cr.Explanation("strCfgKeyAssignGtDecide") ));
399 list項目リスト.Add(PadNotifier(EPad.GtCancel, cr.Label("strCfgKeyAssignGtCancel"), cr.Explanation("strCfgKeyAssignGtCancel") ));
400 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nInputAdjustTimeMs.Guitar);
402 else if (eMenu == Eメニュー種別.KeyAssignBass)
404 list項目リスト.Add(ReturnToMenu.Bass);
405 list項目リスト.Add(PadNotifier(EPad.BsR, cr.Label("strCfgKeyAssignBsR"), cr.Explanation("strCfgKeyAssignBsR") ));
406 list項目リスト.Add(PadNotifier(EPad.BsG, cr.Label("strCfgKeyAssignBsG"), cr.Explanation("strCfgKeyAssignBsG") ));
407 list項目リスト.Add(PadNotifier(EPad.BsB, cr.Label("strCfgKeyAssignBsB"), cr.Explanation("strCfgKeyAssignBsB") ));
408 list項目リスト.Add(PadNotifier(EPad.BsPick, cr.Label("strCfgKeyAssignBsPick"), cr.Explanation("strCfgKeyAssignBsPick") ));
409 list項目リスト.Add(PadNotifier(EPad.BsWail, cr.Label("strCfgKeyAssignBsWailing"), cr.Explanation("strCfgKeyAssignBsWailing") ));
410 list項目リスト.Add(PadNotifier(EPad.BsDecide, cr.Label("strCfgKeyAssignBsDecide"), cr.Explanation("strCfgKeyAssignBsDecide") ));
411 list項目リスト.Add(PadNotifier(EPad.BsCancel, cr.Label("strCfgKeyAssignBsCancel"), cr.Explanation("strCfgKeyAssignBsCancel") ));
412 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nInputAdjustTimeMs.Bass);
414 else if (eMenu == Eメニュー種別.System)
416 list項目リスト.Add(ReturnToMenu.System);
417 COptionStringList langlist = new COptionStringList("default");
418 langlist.Initialize( "strCfgLanguage", cr.LanguageDispList );
419 langlist.Index = CDTXMania.Instance.Resources.LanguageCodeIndex;
420 langlist.OnEnterDelegate = () =>
422 int index = langlist.Index;
423 CDTXMania.Instance.ConfigIni.strLanguage.Value = CDTXMania.Instance.Resources.Language = CDTXMania.Instance.Resources.LanguageCodeList[ index ];
426 list項目リスト.Add( langlist );
428 COptionString enumsongs = new COptionString("");
429 enumsongs.Initialize( "strCfgSysEnumSongs" );
430 list項目リスト.Add(enumsongs);
431 list項目リスト.Add(CDTXMania.Instance.ConfigIni.eDark);
432 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nRisky);
433 list項目リスト.Add(CDTXMania.Instance.ConfigIni.eActiveInst);
434 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nPlaySpeed);
435 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nSleepPerFrameMs);
436 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nSleepUnfocusMs);
437 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bForceHighPowerPlan);
438 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bStageFailed);
439 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bRandSubBox);
440 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nPreSoundWeightMs);
441 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nPreImageWeightMs);
442 list項目リスト.Add(CDTXMania.Instance.ConfigIni.eDamageLevel);
443 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bScoreIni);
444 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nChipVolume);
445 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nAutoVolume);
446 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bStoicMode);
447 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bIsAutoResultCapture);
448 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bBufferedInput);
449 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bLog);
450 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bLoadSoundSpeed);
451 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bLoadDTXDetail);// #36177 2016.7.30 ikanick
452 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bUseBoxDefSkin);
453 list項目リスト.Add(skins);
454 list項目リスト.Add(SoundMenu);
455 list項目リスト.Add(DisplayMenu.System);
456 list項目リスト.Add(HitRangeMenu);
457 list項目リスト.Add(KeyAssignMenu.System);
458 enumsongs.OnEnterDelegate = () =>
460 if (CDTXMania.Instance.EnumSongs.IsEnumerating)
462 // Debug.WriteLine( "バックグラウンドでEnumeratingSongs中だったので、一旦中断します。" );
463 CDTXMania.Instance.EnumSongs.Abort();
464 CDTXMania.Instance.actEnumSongs.On非活性化();
467 CDTXMania.Instance.EnumSongs.StartEnumFromDisk();
468 CDTXMania.Instance.EnumSongs.ChangeEnumeratePriority(ThreadPriority.Normal);
469 CDTXMania.Instance.actEnumSongs.bコマンドでの曲データ取得 = true;
470 CDTXMania.Instance.actEnumSongs.On活性化();
473 else if ( eMenu == Eメニュー種別.SoundSettings )
475 list項目リスト.Add( ReturnToMenu.System );
476 list項目リスト.Add( CDTXMania.Instance.ConfigIni.bTimeStretch );
477 list項目リスト.Add( CDTXMania.Instance.ConfigIni.bWaveAdjust );
478 list項目リスト.Add( CDTXMania.Instance.ConfigIni.bBGMPlay );
479 list項目リスト.Add( CDTXMania.Instance.ConfigIni.bAudience );
480 list項目リスト.Add( CDTXMania.Instance.ConfigIni.nChipVolume );
481 list項目リスト.Add( CDTXMania.Instance.ConfigIni.nAutoVolume );
482 list項目リスト.Add( CDTXMania.Instance.ConfigIni.nSoundDeviceType );
483 list項目リスト.Add( CDTXMania.Instance.ConfigIni.nWASAPIBufferSizeMs );
484 list項目リスト.Add( CDTXMania.Instance.ConfigIni.bEventDrivenWASAPI );
485 list項目リスト.Add( CDTXMania.Instance.ConfigIni.strASIODevice );
486 list項目リスト.Add( CDTXMania.Instance.ConfigIni.bUseOSTimer );
487 list項目リスト.Add( CDTXMania.Instance.ConfigIni.nMasterVolume );
488 list項目リスト.Add( CDTXMania.Instance.ConfigIni.nPolyphonicSounds );
489 list項目リスト.Add( CDTXMania.Instance.ConfigIni.eClickType );
490 list項目リスト.Add( CDTXMania.Instance.ConfigIni.nClickHighVolume );
491 list項目リスト.Add( CDTXMania.Instance.ConfigIni.nClickLowVolume );
493 else if ( eMenu == Eメニュー種別.Drums )
495 list項目リスト.Add(ReturnToMenu.Drums);
496 COptionEnum<EThreeState> AllAuto = new COptionEnum<EThreeState>(EThreeState.X);
497 AllAuto.Initialize( "strCfgDrAllAuto", typeof(EThreeState));
498 AllAuto.OnEnterDelegate = () =>
500 if ( AllAuto.Value == EThreeState.X )
504 CDTXMania.Instance.ConfigIni.bAutoPlay.Set( EPart.Drums, AllAuto );
506 list項目リスト.Add(AllAuto);
507 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.LC);
508 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.HH);
509 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.HHO);
510 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.SD);
511 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.BD);
512 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.HT);
513 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.LT);
514 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.FT);
515 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.CY);
516 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.RD);
517 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nScrollSpeed.Drums);
518 list項目リスト.Add(CDTXMania.Instance.ConfigIni.eHitSoundPriorityHH);
519 list項目リスト.Add(CDTXMania.Instance.ConfigIni.eHitSoundPriorityFT);
520 list項目リスト.Add(CDTXMania.Instance.ConfigIni.eHitSoundPriorityCY);
521 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bTight);
522 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bFillin);
523 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bDrumsHitSound);
524 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bEmphasizePlaySound.Drums);
525 list項目リスト.Add(DisplayMenu.Drums);
526 list項目リスト.Add(EDrumsMenu.Drums);
527 list項目リスト.Add(KeyAssignMenu.Drums);
529 else if (eMenu == Eメニュー種別.Guitar)
531 list項目リスト.Add(ReturnToMenu.Guitar);
532 COptionEnum<EThreeState> AllAuto = new COptionEnum<EThreeState>(EThreeState.X);
533 AllAuto.Initialize( "strCfgDrAllAuto", typeof(EThreeState));
534 AllAuto.OnEnterDelegate = () =>
536 if ( AllAuto.Value == EThreeState.X )
540 CDTXMania.Instance.ConfigIni.bAutoPlay.Set( EPart.Guitar, AllAuto );
542 list項目リスト.Add(AllAuto);
543 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.GtR);
544 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.GtG);
545 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.GtB);
546 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.GtPick);
547 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.GtWail);
548 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nScrollSpeed.Guitar);
549 list項目リスト.Add(CDTXMania.Instance.ConfigIni.eRandom.Guitar);
550 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bLight.Guitar);
551 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bEmphasizePlaySound.Guitar);
552 list項目リスト.Add(DisplayMenu.Guitar);
553 list項目リスト.Add(KeyAssignMenu.Guitar);
555 else if (eMenu == Eメニュー種別.Bass)
557 list項目リスト.Add(ReturnToMenu.Bass);
558 COptionEnum<EThreeState> AllAuto = new COptionEnum<EThreeState>(EThreeState.X);
559 AllAuto.Initialize( "strCfgDrAllAuto", typeof(EThreeState));
560 AllAuto.OnEnterDelegate = () =>
562 if ( AllAuto.Value == EThreeState.X )
566 CDTXMania.Instance.ConfigIni.bAutoPlay.Set( EPart.Bass, AllAuto );
568 list項目リスト.Add(AllAuto);
569 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.BsR);
570 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.BsG);
571 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.BsB);
572 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.BsPick);
573 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.BsWail);
574 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nScrollSpeed.Bass);
575 list項目リスト.Add(CDTXMania.Instance.ConfigIni.eRandom.Bass);
576 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bLight.Bass);
577 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bEmphasizePlaySound.Bass);
578 list項目リスト.Add(DisplayMenu.Bass);
579 list項目リスト.Add(KeyAssignMenu.Bass);
588 CDTXMania.Instance.Skin.soundカーソル移動音.t再生する();
591 list項目リスト[n現在の選択項目].OnPrevious();
596 n目標のスクロールカウンタ += 100;
600 public void OnPrevious()
602 CDTXMania.Instance.Skin.soundカーソル移動音.t再生する();
605 list項目リスト[n現在の選択項目].OnNext();
610 n目標のスクロールカウンタ -= 100;
614 private void t要素値を上下に変更中の処理()
616 if (this.list項目リスト[this.n現在の選択項目] == CDTXMania.Instance.ConfigIni.nMasterVolume)
618 // #33700 2014.4.26 yyagi
619 CDTXMania.Instance.Sound管理.nMasterVolume = CDTXMania.Instance.ConfigIni.nMasterVolume;
623 public override void On活性化()
627 this.list項目リスト = new List<COptionBase>();
628 this.eメニュー種別 = Eメニュー種別.Unknown;
630 CResources cr = CDTXMania.Instance.Resources;
631 string fontname = cr.Explanation("strCfgConfigurationItemsFontFileName");
632 string path = Path.Combine(@"Graphics\fonts", fontname);
633 this.prvFont = new CPrivateFastFont(CSkin.Path(path), (int)(18 * Scale.Y));
634 this.b要素値にフォーカス中 = false;
635 this.n目標のスクロールカウンタ = 0;
636 this.n現在のスクロールカウンタ = 0;
637 this.nスクロール用タイマ値 = -1;
638 this.ct三角矢印アニメ = new CCounter();
641 DisplayMenu = new STDGBSValue<COptionLabel>();
642 KeyAssignMenu = new STDGBSValue<COptionLabel>();
643 EDrumsMenu = new STDGBSValue<COptionLabel>();
644 ReturnToMenu = new STDGBSValue<COptionLabel>();
646 //CResources cr = CDTXMania.Instance.Resources;
647 for ( EPart i = EPart.Drums; i <= EPart.System; ++i )
649 DisplayMenu[i] = new COptionLabel( "strCfgDisplayOption" );
650 KeyAssignMenu[i] = new COptionLabel( "strCfgInputOption" );
651 ReturnToMenu[i] = new COptionLabel( "strCfgReturnToMenu" );
654 EDrumsMenu[ EPart.Drums ] = new COptionLabel( "strCfgEDrumsOption" );
655 HitRangeMenu = new COptionLabel( "strCfgHitRangeOption" );
656 SoundMenu = new COptionLabel( "strCfgSoundOption" );
658 DisplayMenu.Drums.OnEnterDelegate = () =>
660 t項目リストの設定(Eメニュー種別.DisplayDrums);
662 DisplayMenu.Guitar.OnEnterDelegate = () =>
664 t項目リストの設定(Eメニュー種別.DisplayGuitar);
666 DisplayMenu.Bass.OnEnterDelegate = () =>
668 t項目リストの設定(Eメニュー種別.DisplayBass);
670 DisplayMenu.System.OnEnterDelegate = () =>
672 t項目リストの設定(Eメニュー種別.DisplaySystem);
674 KeyAssignMenu.Drums.OnEnterDelegate = () =>
676 t項目リストの設定(Eメニュー種別.KeyAssignDrums);
678 KeyAssignMenu.Guitar.OnEnterDelegate = () =>
680 t項目リストの設定(Eメニュー種別.KeyAssignGuitar);
682 KeyAssignMenu.Bass.OnEnterDelegate = () =>
684 t項目リストの設定(Eメニュー種別.KeyAssignBass);
686 KeyAssignMenu.System.OnEnterDelegate = () =>
688 t項目リストの設定(Eメニュー種別.KeyAssignSystem);
691 ReturnToMenu.Drums.OnEnterDelegate = () =>
693 t項目リストの設定(Eメニュー種別.Drums);
695 ReturnToMenu.Guitar.OnEnterDelegate = () =>
697 t項目リストの設定(Eメニュー種別.Guitar);
699 ReturnToMenu.Bass.OnEnterDelegate = () =>
701 t項目リストの設定(Eメニュー種別.Bass);
703 ReturnToMenu.System.OnEnterDelegate = () =>
705 t項目リストの設定(Eメニュー種別.System);
707 EDrumsMenu.Drums.OnEnterDelegate = () =>
709 t項目リストの設定(Eメニュー種別.EDrumsSettings);
711 HitRangeMenu.OnEnterDelegate = () =>
713 t項目リストの設定( Eメニュー種別.HitRangeSettings );
715 SoundMenu.OnEnterDelegate = () =>
717 t項目リストの設定( Eメニュー種別.SoundSettings );
720 #region [ スキン選択肢と、現在選択中のスキン(index)の準備 #28195 2012.5.2 yyagi ]
721 int ns = (CDTXMania.Instance.Skin.strSystemSkinSubfolders == null) ? 0 : CDTXMania.Instance.Skin.strSystemSkinSubfolders.Length;
722 int nb = (CDTXMania.Instance.Skin.strBoxDefSkinSubfolders == null) ? 0 : CDTXMania.Instance.Skin.strBoxDefSkinSubfolders.Length;
724 skinSubFolders = new string[ns + nb];
725 skinInitial = CDTXMania.Instance.Skin.GetCurrentSkinSubfolderFullName(true);
727 for (int i = 0; i < ns; i++)
729 skinSubFolders[i] = CDTXMania.Instance.Skin.strSystemSkinSubfolders[i];
731 for (int i = 0; i < nb; i++)
733 skinSubFolders[ns + i] = CDTXMania.Instance.Skin.strBoxDefSkinSubfolders[i];
735 Array.Sort(skinSubFolders);
736 skinNames = CSkin.GetSkinName(skinSubFolders);
737 initIdx = Array.BinarySearch(skinSubFolders, skinInitial);
742 skins = new COptionStringList(skinNames[initIdx]);
743 skins.Initialize("Skin", Properties.Resources.strCfgSysSkin, skinNames);
745 skins.OnEnterDelegate = () =>
747 CDTXMania.Instance.Skin.SetCurrentSkinSubfolderFullName(skinSubFolders[skins.Index], true);
748 CDTXMania.Instance.ConfigIni.strSystemSkinSubfolderPath.Value = skinSubFolders[skins.Index];
749 tGenerateSkinSample();
753 // CONFIG脱出時にこの値から変更されているようなら
755 this.InitialSystemSoundType = CDTXMania.Instance.ConfigIni.nSoundDeviceType;
756 this.InitialWASAPIBufferSizeMs = CDTXMania.Instance.ConfigIni.nWASAPIBufferSizeMs;
757 this.InitialASIODevice = CDTXMania.Instance.ConfigIni.strASIODevice.Index;
758 this.InitialUseOSTimer = CDTXMania.Instance.ConfigIni.bUseOSTimer;
759 this.InitialWASAPIEventDriven = CDTXMania.Instance.ConfigIni.bEventDrivenWASAPI;
761 this.InitialForceHighPower = CDTXMania.Instance.ConfigIni.bForceHighPowerPlan;
763 // #27795 2012.3.11 yyagi; System設定の中でDrumsの設定を参照しているため、
764 this.t項目リストの設定(Eメニュー種別.Bass);
765 // 活性化の時点でDrumsの設定も入れ込んでおかないと、System設定中に例外発生することがある。
766 this.t項目リストの設定(Eメニュー種別.Guitar);
767 this.t項目リストの設定(Eメニュー種別.Drums);
768 // 順番として、最後にSystemを持ってくること。設定一覧の初期位置がSystemのため。
769 this.t項目リストの設定(Eメニュー種別.System);
775 public override void On非活性化()
779 CDTXMania.Instance.SaveConfig();
780 this.list項目リスト.Clear();
781 this.ct三角矢印アニメ = null;
788 if (CDTXMania.Instance.Skin.GetCurrentSkinSubfolderFullName(true) != this.skinInitial)
790 CDTXMania.Instance.stageChangeSkin.tChangeSkinMain(); // #28195 2012.6.11 yyagi CONFIG脱出時にSkin更新
794 // #24820 2013.1.22 yyagi CONFIGでWASAPI/ASIO/DirectSound関連の設定を変更した場合、サウンドデバイスを再構築する。
795 // #33689 2014.6.17 yyagi CONFIGでSoundTimerTypeの設定を変更した場合も、サウンドデバイスを再構築する。
796 #region [ サウンドデバイス変更 ]
797 if (InitialSystemSoundType != CDTXMania.Instance.ConfigIni.nSoundDeviceType ||
798 InitialWASAPIBufferSizeMs != CDTXMania.Instance.ConfigIni.nWASAPIBufferSizeMs ||
799 InitialASIODevice != CDTXMania.Instance.ConfigIni.strASIODevice.Index ||
800 InitialUseOSTimer != CDTXMania.Instance.ConfigIni.bUseOSTimer ||
801 InitialWASAPIEventDriven != CDTXMania.Instance.ConfigIni.bEventDrivenWASAPI )
803 ESoundDeviceType soundDeviceType;
804 switch (CDTXMania.Instance.ConfigIni.nSoundDeviceType.Value)
806 case ESoundDeviceTypeForConfig.DSound:
807 soundDeviceType = ESoundDeviceType.DirectSound;
809 case ESoundDeviceTypeForConfig.ASIO:
810 soundDeviceType = ESoundDeviceType.ASIO;
812 case ESoundDeviceTypeForConfig.WASAPI_Exclusive:
813 soundDeviceType = ESoundDeviceType.ExclusiveWASAPI;
815 case ESoundDeviceTypeForConfig.WASAPI_Shared:
816 soundDeviceType = ESoundDeviceType.SharedWASAPI;
819 soundDeviceType = ESoundDeviceType.Unknown;
823 CDTXMania.Instance.Sound管理.t初期化(
825 CDTXMania.Instance.ConfigIni.nWASAPIBufferSizeMs,
826 CDTXMania.Instance.ConfigIni.bEventDrivenWASAPI,
828 CDTXMania.Instance.ConfigIni.strASIODevice.Index,
829 CDTXMania.Instance.ConfigIni.bUseOSTimer);
830 CDTXMania.Instance.ShowWindowTitleWithSoundType();
834 #region [ メトロノーム音 音量設定 ]
835 CDTXMania.Instance.Skin.soundClickHigh.n音量 = CDTXMania.Instance.ConfigIni.nClickHighVolume;
836 CDTXMania.Instance.Skin.soundClickLow.n音量 = CDTXMania.Instance.ConfigIni.nClickLowVolume;
839 #region [ サウンドのタイムストレッチモード変更 ]
841 FDK.CSound管理.bIsTimeStretch = CDTXMania.Instance.ConfigIni.bUseOSTimer;
845 if ( CDTXMania.Instance.ConfigIni.bForceHighPowerPlan )
847 CPowerPlan.ChangeHighPerformance();
851 // HighPower=OFFを維持したとき、またはONからOFFにしたときは、
853 // 電源プランの復元は、アプリ終了時に行う。
854 // CPowerPlan.RestoreCurrentPowerPlan();
860 public override void OnManagedリソースの作成()
864 this.tx通常項目行パネル = TextureFactory.tテクスチャの生成Af(CSkin.Path(@"Graphics\ScreenConfig itembox.png"), false);
865 this.txその他項目行パネル = TextureFactory.tテクスチャの生成Af(CSkin.Path(@"Graphics\ScreenConfig itembox other.png"), false);
866 this.tx三角矢印 = TextureFactory.tテクスチャの生成(CSkin.Path(@"Graphics\ScreenConfig triangle arrow.png"), false);
867 // スキン選択時に動的に設定するため、ここでは初期化しない
868 this.txSkinSample = null;
870 base.OnManagedリソースの作成();
874 public override void OnManagedリソースの解放()
878 TextureFactory.tテクスチャの解放(ref this.txSkinSample);
879 TextureFactory.tテクスチャの解放(ref this.tx通常項目行パネル);
880 TextureFactory.tテクスチャの解放(ref this.txその他項目行パネル);
881 TextureFactory.tテクスチャの解放(ref this.tx三角矢印);
885 base.OnManagedリソースの解放();
889 private void OnListMenuの初期化()
892 this.listMenu = new stMenuItemRight[this.list項目リスト.Count];
896 /// 事前にレンダリングしておいたテクスチャを解放する。
898 private void OnListMenuの解放()
900 if (listMenu != null)
902 for (int i = 0; i < listMenu.Length; i++)
904 TextureFactory.tテクスチャの解放(ref listMenu[i].txParam);
905 TextureFactory.tテクスチャの解放(ref listMenu[i].txParamColored);
906 TextureFactory.tテクスチャの解放(ref listMenu[i].txMenuItemRight);
908 this.listMenu = null;
912 public override int On進行描画()
914 throw new InvalidOperationException("t進行描画(bool)のほうを使用してください。");
917 public int t進行描画(bool b項目リスト側にフォーカスがある)
925 this.nスクロール用タイマ値 = CSound管理.rc演奏用タイマ.n現在時刻;
926 this.ct三角矢印アニメ.t開始(0, 9, 50, CDTXMania.Instance.Timer);
928 base.b初めての進行描画 = false;
933 this.b項目リスト側にフォーカスがある = b項目リスト側にフォーカスがある; // 記憶
935 #region [ 項目スクロールの進行 ]
937 long n現在時刻 = CDTXMania.Instance.Timer.n現在時刻;
938 if (n現在時刻 < this.nスクロール用タイマ値) this.nスクロール用タイマ値 = n現在時刻;
940 const int INTERVAL = 2; // [ms]
941 while ((n現在時刻 - this.nスクロール用タイマ値) >= INTERVAL)
943 int n目標項目までのスクロール量 = Math.Abs((int)(this.n目標のスクロールカウンタ - this.n現在のスクロールカウンタ));
946 #region [ n加速度の決定;目標まで遠いほど加速する。]
948 if (n目標項目までのスクロール量 <= 100)
952 else if (n目標項目までのスクロール量 <= 300)
956 else if (n目標項目までのスクロール量 <= 500)
966 #region [ this.n現在のスクロールカウンタに n加速度 を加減算。]
968 if (this.n現在のスクロールカウンタ < this.n目標のスクロールカウンタ)
970 this.n現在のスクロールカウンタ += n加速度;
971 if (this.n現在のスクロールカウンタ > this.n目標のスクロールカウンタ)
974 this.n現在のスクロールカウンタ = this.n目標のスクロールカウンタ;
977 else if (this.n現在のスクロールカウンタ > this.n目標のスクロールカウンタ)
979 this.n現在のスクロールカウンタ -= n加速度;
980 if (this.n現在のスクロールカウンタ < this.n目標のスクロールカウンタ)
983 this.n現在のスクロールカウンタ = this.n目標のスクロールカウンタ;
988 #region [ 行超え処理、ならびに目標位置に到達したらスクロールを停止して項目変更通知を発行。]
990 if (this.n現在のスクロールカウンタ >= 100)
992 this.n現在の選択項目 = this.t次の項目(this.n現在の選択項目);
993 this.n現在のスクロールカウンタ -= 100;
994 this.n目標のスクロールカウンタ -= 100;
995 if (this.n目標のスクロールカウンタ == 0)
997 CDTXMania.Instance.stageコンフィグ.t項目変更通知();
1000 else if (this.n現在のスクロールカウンタ <= -100)
1002 this.n現在の選択項目 = this.t前の項目(this.n現在の選択項目);
1003 this.n現在のスクロールカウンタ += 100;
1004 this.n目標のスクロールカウンタ += 100;
1005 if (this.n目標のスクロールカウンタ == 0)
1007 CDTXMania.Instance.stageコンフィグ.t項目変更通知();
1013 this.nスクロール用タイマ値 += INTERVAL;
1018 #region [ ▲印アニメの進行 ]
1019 if (this.b項目リスト側にフォーカスがある && (this.n目標のスクロールカウンタ == 0))
1021 this.ct三角矢印アニメ.t進行Loop();
1028 // メニューにフォーカスがあるなら、項目リストの中央は頭を出さない。
1029 this.ptパネルの基本座標[4].X = this.b項目リスト側にフォーカスがある ? 276 : 301;
1031 #region [ 計11個の項目パネルを描画する。]
1033 int nItem = this.n現在の選択項目;
1034 for (int i = 0; i < 4; i++)
1036 nItem = this.t前の項目(nItem);
1039 for (int n行番号 = -4; n行番号 < 6; n行番号++)
1041 // n行番号 == 0 がフォーカスされている項目パネル。
1042 #region [ 今まさに画面外に飛びだそうとしている項目パネルは描画しない。]
1043 if (((n行番号 == -4) && (this.n現在のスクロールカウンタ > 0)) ||
1044 ((n行番号 == +5) && (this.n現在のスクロールカウンタ < 0)))
1046 nItem = this.t次の項目(nItem);
1051 int n移動元の行の基本位置 = n行番号 + 4;
1052 int n移動先の行の基本位置 = (this.n現在のスクロールカウンタ <= 0) ? ((n移動元の行の基本位置 + 1) % 10) : (((n移動元の行の基本位置 - 1) + 10) % 10);
1053 int x = this.ptパネルの基本座標[n移動元の行の基本位置].X + ((int)((this.ptパネルの基本座標[n移動先の行の基本位置].X - this.ptパネルの基本座標[n移動元の行の基本位置].X) * (((double)Math.Abs(this.n現在のスクロールカウンタ)) / 100.0)));
1054 int y = this.ptパネルの基本座標[n移動元の行の基本位置].Y + ((int)((this.ptパネルの基本座標[n移動先の行の基本位置].Y - this.ptパネルの基本座標[n移動元の行の基本位置].Y) * (((double)Math.Abs(this.n現在のスクロールカウンタ)) / 100.0)));
1056 #region [ 現在の行の項目パネル枠を描画。]
1057 if (this.list項目リスト[nItem].type == EOptionType.Normal)
1059 if (this.tx通常項目行パネル != null)
1061 this.tx通常項目行パネル.t2D描画(CDTXMania.Instance.Device, x * Scale.X, y * Scale.Y);
1064 else if (this.list項目リスト[nItem].type == EOptionType.Other)
1066 if (this.txその他項目行パネル != null)
1068 this.txその他項目行パネル.t2D描画(CDTXMania.Instance.Device, x * Scale.X, y * Scale.Y);
1073 #region [ 現在の行の項目名を描画。]
1074 if (listMenu[nItem].txMenuItemRight != null)
1076 // 自前のキャッシュに含まれているようなら、再レンダリングせずキャッシュを使用
1077 listMenu[nItem].txMenuItemRight.t2D描画(CDTXMania.Instance.Device, (x + 0x12) * Scale.X, (y + 12) * Scale.Y - 20);
1081 using (Bitmap bmpItem = prvFont.DrawPrivateFont(this.list項目リスト[nItem].label, Color.White, Color.Black))
1083 TextureFactory.tテクスチャの解放(ref listMenu[nItem].txMenuItemRight);
1084 listMenu[nItem].txMenuItemRight = TextureFactory.tテクスチャの生成(bmpItem);
1089 #region [ 現在の行の項目の要素を描画。]
1090 string strParam = this.list項目リスト[nItem].ToString();
1093 #region [ 最初にSkinの選択肢にきたとき(Enterを押す前)に限り、サンプル生成が発生する。 #28195 2012.5.2 yyagi ]
1094 if (this.list項目リスト[this.n現在の選択項目] == skins)
1096 if (txSkinSample == null)
1098 tGenerateSkinSample();
1100 if (txSkinSample != null)
1102 txSkinSample.t2D描画(CDTXMania.Instance.Device, 56 * Scale.X, 300 * Scale.Y);
1108 int nIndex = this.list項目リスト[nItem].Index;
1109 bool bColored = list項目リスト[nItem] is COptionInteger && n行番号 == 0 && b要素値にフォーカス中;
1110 if (listMenu[nItem].nParam != nIndex ||
1111 (listMenu[nItem].txParam == null) ||
1112 (bColored && listMenu[nItem].txParamColored == null))
1114 listMenu[nItem].nParam = nIndex;
1115 listMenu[nItem].strParam = this.list項目リスト[nItem].ToString();
1116 using (Bitmap bmpStr = prvFont.DrawPrivateFont(strParam, Color.White, Color.Black))
1118 TextureFactory.tテクスチャの解放(ref listMenu[nItem].txParam);
1119 listMenu[nItem].txParam = TextureFactory.tテクスチャの生成(bmpStr, false);
1122 using (Bitmap bmpStrColored = prvFont.DrawPrivateFont(strParam, Color.White, Color.Black, Color.Yellow, Color.OrangeRed))
1124 TextureFactory.tテクスチャの解放(ref listMenu[nItem].txParamColored);
1125 listMenu[nItem].txParamColored = TextureFactory.tテクスチャの生成(bmpStrColored, false);
1133 listMenu[nItem].txParamColored.t2D描画(CDTXMania.Instance.Device, (x + 210) * Scale.X, (y + 12) * Scale.Y - 20);
1137 listMenu[nItem].txParam.t2D描画(CDTXMania.Instance.Device, (x + 210) * Scale.X, (y + 12) * Scale.Y - 20);
1139 nItem = this.t次の項目(nItem);
1143 #region [ 項目リストにフォーカスがあって、かつスクロールが停止しているなら、パネルの上下に▲印を描画する。]
1144 if (this.b項目リスト側にフォーカスがある && (this.n目標のスクロールカウンタ == 0))
1152 if (this.b要素値にフォーカス中)
1156 y_upper = 198 - this.ct三角矢印アニメ.n現在の値;
1157 y_lower = 242 + this.ct三角矢印アニメ.n現在の値;
1163 y_upper = 186 - this.ct三角矢印アニメ.n現在の値;
1164 y_lower = 254 + this.ct三角矢印アニメ.n現在の値;
1169 if (this.tx三角矢印 != null)
1171 this.tx三角矢印.t2D描画(CDTXMania.Instance.Device, x * Scale.X,
1173 new Rectangle(0, 0, (int)(32 * Scale.X), (int)(16 * Scale.Y)));
1174 this.tx三角矢印.t2D描画(CDTXMania.Instance.Device, x * Scale.X,
1176 new Rectangle(0, (int)(16 * Scale.Y), (int)(32 * Scale.X), (int)(16 * Scale.Y)));
1186 internal enum Eメニュー種別
1192 // #24609 2011.4.12 yyagi: 画面キャプチャキーのアサイン
1207 private int t前の項目(int nItem)
1211 nItem = this.list項目リスト.Count - 1;
1216 private int t次の項目(int nItem)
1218 if (++nItem >= this.list項目リスト.Count)