2 using System.Collections.Generic;
3 using System.Diagnostics;
6 using System.Threading;
10 using Color = System.Drawing.Color;
11 using Point = System.Drawing.Point;
12 using Rectangle = System.Drawing.Rectangle;
16 internal class CActConfigList : CActivity
18 STDGBSValue<COptionLabel> ReturnToMenu;
19 STDGBSValue<COptionLabel> KeyAssignMenu;
20 STDGBSValue<COptionLabel> DisplayMenu;
21 STDGBSValue<COptionLabel> EDrumsMenu;
22 COptionLabel SoundMenu;
23 COptionLabel HitRangeMenu;
24 COptionStringList skins;
26 bool b項目リスト側にフォーカスがある;
30 // #33689 2014.6.17 yyagi
31 bool InitialUseOSTimer;
32 bool InitialWASAPIEventDriven;
33 ESoundDeviceTypeForConfig InitialSystemSoundType;
34 int InitialWASAPIBufferSizeMs;
35 int InitialASIODevice;
36 bool InitialForceHighPower;
37 List<COptionBase> list項目リスト;
41 Point[] ptパネルの基本座標 = new Point[]
43 new Point(0x12d, 3), new Point(0x12d, 0x35), new Point(0x12d, 0x67),
44 new Point(0x12d, 0x99), new Point(0x114, 0xcb), new Point(0x12d, 0xfd),
45 new Point(0x12d, 0x12f), new Point(0x12d, 0x161), new Point(0x12d, 0x193),
46 new Point(0x12d, 0x1c5)
48 CTextureAf txその他項目行パネル;
50 CTextureAf tx通常項目行パネル;
51 // #28195 2012.5.2 yyagi
52 CTexture txSkinSample;
53 string[] skinSubFolders;
56 CPrivateFastFont prvFont;
57 private struct stMenuItemRight
59 public CTexture txMenuItemRight;
61 public string strParam;
62 public CTexture txParam;
63 public CTexture txParamColored;
65 stMenuItemRight[] listMenu;
68 /// #32059 2013.9.17 yyagi
70 public bool bIsFocusingParameter
78 public bool b現在選択されている項目はReturnToMenuである
82 COptionBase sel = this.list項目リスト[this.n現在の選択項目];
84 for (EPart i = EPart.Drums; i <= EPart.System; ++i)
86 if (sel == ReturnToMenu[i])
95 public bool b楽器またはシステム用メニューである
99 return eメニュー種別 == Eメニュー種別.Bass || eメニュー種別 == Eメニュー種別.Drums || eメニュー種別 == Eメニュー種別.Guitar || eメニュー種別 == Eメニュー種別.System;
103 public COptionBase ib現在の選択項目
107 return this.list項目リスト[this.n現在の選択項目];
118 if (this.b要素値にフォーカス中)
120 // #32059 2013.9.17 add yyagi
121 this.b要素値にフォーカス中 = false;
124 if (this.eメニュー種別 == Eメニュー種別.KeyAssignSystem)
126 t項目リストの設定(Eメニュー種別.System);
128 else if (this.eメニュー種別 == Eメニュー種別.KeyAssignDrums)
130 t項目リストの設定(Eメニュー種別.Drums);
132 else if (this.eメニュー種別 == Eメニュー種別.KeyAssignGuitar)
134 t項目リストの設定(Eメニュー種別.Guitar);
136 else if (this.eメニュー種別 == Eメニュー種別.KeyAssignBass)
138 t項目リストの設定(Eメニュー種別.Bass);
140 if (this.eメニュー種別 == Eメニュー種別.DisplaySystem)
142 t項目リストの設定(Eメニュー種別.System);
144 else if (this.eメニュー種別 == Eメニュー種別.DisplayDrums)
146 t項目リストの設定(Eメニュー種別.Drums);
148 else if (this.eメニュー種別 == Eメニュー種別.DisplayGuitar)
150 t項目リストの設定(Eメニュー種別.Guitar);
152 else if (this.eメニュー種別 == Eメニュー種別.DisplayBass)
154 t項目リストの設定(Eメニュー種別.Bass);
156 else if (this.eメニュー種別 == Eメニュー種別.EDrumsSettings)
158 t項目リストの設定(Eメニュー種別.Drums);
160 else if (this.eメニュー種別 == Eメニュー種別.HitRangeSettings)
162 t項目リストの設定(Eメニュー種別.System);
164 else if ( this.eメニュー種別 == Eメニュー種別.SoundSettings)
166 t項目リストの設定(Eメニュー種別.System);
170 public bool tEnter押下()
173 CDTXMania.Instance.Skin.sound決定音.t再生する();
175 if (this.b要素値にフォーカス中)
177 this.b要素値にフォーカス中 = false;
179 else if (this.list項目リスト[this.n現在の選択項目] is COptionInteger)
181 this.b要素値にフォーカス中 = true;
183 else if (this.list項目リスト[this.n現在の選択項目] is IOptionList || this.list項目リスト[this.n現在の選択項目] is COptionBool)
185 this.list項目リスト[this.n現在の選択項目].OnNext();
188 // #27029 2012.1.5 from
190 CDTXMania.Instance.ConfigIni.eBDGroup == EBDGroup.Group &&
192 (this.list項目リスト[this.n現在の選択項目] == CDTXMania.Instance.ConfigIni.eHHGroup ||
193 this.list項目リスト[this.n現在の選択項目] == CDTXMania.Instance.ConfigIni.eHitSoundPriorityHH)))
199 if (b現在選択されている項目はReturnToMenuである && b楽器またはシステム用メニューである)
203 this.list項目リスト[this.n現在の選択項目].OnEnter();
208 private void tGenerateSkinSample()
210 string path = skinSubFolders[skins.Index];
211 path = System.IO.Path.Combine(path, @"Graphics\ScreenTitle background.jpg");
212 using (Bitmap bmSrc = new Bitmap(path))
214 using (Bitmap bmDest = new Bitmap(bmSrc.Width / 4, bmSrc.Height / 4))
216 using (Graphics g = Graphics.FromImage(bmDest))
218 g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
219 g.DrawImage(bmSrc, new Rectangle(0, 0, bmSrc.Width / 4, bmSrc.Height / 4),
220 0, 0, bmSrc.Width, bmSrc.Height, GraphicsUnit.Pixel);
221 TextureFactory.tテクスチャの解放(ref txSkinSample);
222 txSkinSample = TextureFactory.tテクスチャの生成(bmDest, false);
228 // #region [ 項目リストの設定 ( Exit, KeyAssignSystem/Drums/Guitar/Bass) ]
229 public void t項目リストの設定_Exit()
231 CDTXMania.Instance.SaveConfig();
232 this.eメニュー種別 = Eメニュー種別.Unknown;
235 public void t項目リストの設定(Eメニュー種別 eMenu)
237 this.list項目リスト.Clear();
239 Func<EPad, string, string, COptionString> PadNotifier = (pad, lbl, expl) =>
241 COptionString opt = new COptionString("");
242 opt.Initialize(lbl, expl);
243 opt.OnEnterDelegate = () =>
245 CDTXMania.Instance.stageコンフィグ.tパッド選択通知(pad);
250 CResources cr = CDTXMania.Instance.Resources;
252 if (eMenu == Eメニュー種別.DisplaySystem)
254 list項目リスト.Add(ReturnToMenu.System);
255 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bFullScreen);
256 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bBGA);
257 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAVI);
258 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bFullAVI);
259 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bVSyncWait);
260 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdDebugX.Both);
261 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdDebugY.Both);
262 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdDebugX.DrOnly);
263 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdDebugY.DrOnly);
264 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdDebugX.GBOnly);
265 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdDebugY.GBOnly);
266 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdMovieX.Both);
267 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdMovieY.Both);
268 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdMovieX.DrOnly);
269 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdMovieY.DrOnly);
270 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdMovieX.GBOnly);
271 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdMovieY.GBOnly);
272 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nBGAlpha);
273 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nShowLagType);
274 list項目リスト.Add(CDTXMania.Instance.ConfigIni.eJudgePriority);
275 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bDebugInfo);
277 else if (eMenu == Eメニュー種別.DisplayDrums)
279 list項目リスト.Add(ReturnToMenu.Drums);
280 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdInstX.Drums.Both);
281 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdInstX.Drums.DrOnly);
282 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdComboX.Drums.Both);
283 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdComboX.Drums.DrOnly);
284 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdJudgeLineY.Drums);
285 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdJudgeY.Drums);
286 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLaneOrder.LC);
287 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLaneOrder.HH);
288 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLaneOrder.SD);
289 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLaneOrder.BD);
290 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLaneOrder.HT);
291 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLaneOrder.LT);
292 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLaneOrder.FT);
293 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLaneOrder.CY);
294 list項目リスト.Add(CDTXMania.Instance.ConfigIni.eSudHidInv.Drums);
295 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bReverse.Drums);
296 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bDisplayCombo.Drums); // 112追加
297 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nMinComboDisp.Drums);
298 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bDisplayJudge.Drums); // 112追加
299 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bGraph.Drums);
301 else if (eMenu == Eメニュー種別.DisplayGuitar)
303 list項目リスト.Add(ReturnToMenu.Guitar);
304 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdInstX.Guitar.Both);
305 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdInstX.Guitar.GBOnly);
306 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdComboX.Guitar.Both);
307 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdComboX.Guitar.GBOnly);
308 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdJudgeLineY.Guitar);
309 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdJudgeY.Guitar);
310 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLaneOrder.GtR);
311 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLaneOrder.GtG);
312 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLaneOrder.GtB);
313 list項目リスト.Add(CDTXMania.Instance.ConfigIni.eSudHidInv.Guitar);
314 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bReverse.Guitar);
315 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bDisplayCombo.Guitar); // 112追加
316 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nMinComboDisp.Guitar);
317 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bDisplayJudge.Guitar); // 112追加
318 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bGraph.Guitar);
320 else if (eMenu == Eメニュー種別.DisplayBass)
322 list項目リスト.Add(ReturnToMenu.Bass);
323 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdInstX.Bass.Both);
324 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdInstX.Bass.GBOnly);
325 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdComboX.Bass.Both);
326 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdComboX.Bass.GBOnly);
327 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdJudgeLineY.Bass);
328 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdJudgeY.Bass);
329 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLaneOrder.BsR);
330 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLaneOrder.BsG);
331 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLaneOrder.BsB);
332 list項目リスト.Add(CDTXMania.Instance.ConfigIni.eSudHidInv.Bass);
333 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bReverse.Bass);
334 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bDisplayCombo.Bass); // 112追加
335 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nMinComboDisp.Bass);
336 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bDisplayJudge.Bass); // 112追加
337 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bGraph.Bass);
339 else if (eMenu == Eメニュー種別.EDrumsSettings)
341 list項目リスト.Add(ReturnToMenu.Drums);
342 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nVelocityMin.LC);
343 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nVelocityMin.HH);
344 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nVelocityMin.SD);
345 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nVelocityMin.BD);
346 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nVelocityMin.HT);
347 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nVelocityMin.LT);
348 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nVelocityMin.FT);
349 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nVelocityMin.CY);
350 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nVelocityMin.RD);
352 else if (eMenu == Eメニュー種別.HitRangeSettings)
354 list項目リスト.Add(ReturnToMenu.System);
355 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nHitRange.Perfect);
356 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nHitRange.Great);
357 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nHitRange.Good);
358 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nHitRange.Poor);
360 else if (eMenu == Eメニュー種別.KeyAssignSystem)
362 list項目リスト.Add(ReturnToMenu.System);
363 list項目リスト.Add(PadNotifier(EPad.Capture, cr.Label("strCfgKeyAssignCapture"), cr.Explanation("strCfgKeyAssignCapture") ));
365 else if (eMenu == Eメニュー種別.KeyAssignDrums)
367 list項目リスト.Add(ReturnToMenu.Drums);
368 list項目リスト.Add(PadNotifier(EPad.LC, cr.Label("strCfgKeyAssignLC"), cr.Explanation("strCfgKeyAssignLC") ));
369 list項目リスト.Add(PadNotifier(EPad.HH, cr.Label("strCfgKeyAssignHH"), cr.Explanation("strCfgKeyAssignHH") ));
370 list項目リスト.Add(PadNotifier(EPad.HHO,cr.Label("strCfgKeyAssignHHO"), cr.Explanation("strCfgKeyAssignHHO") ));
371 list項目リスト.Add(PadNotifier(EPad.SD, cr.Label("strCfgKeyAssignSD"), cr.Explanation("strCfgKeyAssignSD") ));
372 list項目リスト.Add(PadNotifier(EPad.BD, cr.Label("strCfgKeyAssignBD"), cr.Explanation("strCfgKeyAssignBD") ));
373 list項目リスト.Add(PadNotifier(EPad.HT, cr.Label("strCfgKeyAssignHT"), cr.Explanation("strCfgKeyAssignHT") ));
374 list項目リスト.Add(PadNotifier(EPad.LT, cr.Label("strCfgKeyAssignLT"), cr.Explanation("strCfgKeyAssignLT") ));
375 list項目リスト.Add(PadNotifier(EPad.FT, cr.Label("strCfgKeyAssignFT"), cr.Explanation("strCfgKeyAssignFT") ));
376 list項目リスト.Add(PadNotifier(EPad.CY, cr.Label("strCfgKeyAssignCY"), cr.Explanation("strCfgKeyAssignCY") ));
377 list項目リスト.Add(PadNotifier(EPad.RD, cr.Label("strCfgKeyAssignRD"), cr.Explanation("strCfgKeyAssignRD") ));
378 list項目リスト.Add(PadNotifier(EPad.HP, cr.Label("strCfgKeyAssignHP"), cr.Explanation("strCfgKeyAssignHP") ));
379 list項目リスト.Add(CDTXMania.Instance.ConfigIni.eHHGroup);
380 list項目リスト.Add(CDTXMania.Instance.ConfigIni.eFTGroup);
381 list項目リスト.Add(CDTXMania.Instance.ConfigIni.eCYGroup);
382 list項目リスト.Add(CDTXMania.Instance.ConfigIni.eBDGroup);
383 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bCymbalFree);
384 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nInputAdjustTimeMs.Drums);
386 else if (eMenu == Eメニュー種別.KeyAssignGuitar)
388 list項目リスト.Add(ReturnToMenu.Guitar);
389 list項目リスト.Add(PadNotifier(EPad.GtR, cr.Label("strCfgKeyAssignGtR"), cr.Explanation("strCfgKeyAssignGtR") ));
390 list項目リスト.Add(PadNotifier(EPad.GtG, cr.Label("strCfgKeyAssignGtG"), cr.Explanation("strCfgKeyAssignGtG") ));
391 list項目リスト.Add(PadNotifier(EPad.GtB, cr.Label("strCfgKeyAssignGtB"), cr.Explanation("strCfgKeyAssignGtB") ));
392 list項目リスト.Add(PadNotifier(EPad.GtPick, cr.Label("strCfgKeyAssignGtPick"), cr.Explanation("strCfgKeyAssignGtPick") ));
393 list項目リスト.Add(PadNotifier(EPad.GtWail, cr.Label("strCfgKeyAssignGtWailing"), cr.Explanation("strCfgKeyAssignGtWailing") ));
394 list項目リスト.Add(PadNotifier(EPad.GtDecide, cr.Label("strCfgKeyAssignGtDecide"), cr.Explanation("strCfgKeyAssignGtDecide") ));
395 list項目リスト.Add(PadNotifier(EPad.GtCancel, cr.Label("strCfgKeyAssignGtCancel"), cr.Explanation("strCfgKeyAssignGtCancel") ));
396 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nInputAdjustTimeMs.Guitar);
398 else if (eMenu == Eメニュー種別.KeyAssignBass)
400 list項目リスト.Add(ReturnToMenu.Bass);
401 list項目リスト.Add(PadNotifier(EPad.BsR, cr.Label("strCfgKeyAssignBsR"), cr.Explanation("strCfgKeyAssignBsR") ));
402 list項目リスト.Add(PadNotifier(EPad.BsG, cr.Label("strCfgKeyAssignBsG"), cr.Explanation("strCfgKeyAssignBsG") ));
403 list項目リスト.Add(PadNotifier(EPad.BsB, cr.Label("strCfgKeyAssignBsB"), cr.Explanation("strCfgKeyAssignBsB") ));
404 list項目リスト.Add(PadNotifier(EPad.BsPick, cr.Label("strCfgKeyAssignBsPick"), cr.Explanation("strCfgKeyAssignBsPick") ));
405 list項目リスト.Add(PadNotifier(EPad.BsWail, cr.Label("strCfgKeyAssignBsWailing"), cr.Explanation("strCfgKeyAssignBsWailing") ));
406 list項目リスト.Add(PadNotifier(EPad.BsDecide, cr.Label("strCfgKeyAssignBsDecide"), cr.Explanation("strCfgKeyAssignBsDecide") ));
407 list項目リスト.Add(PadNotifier(EPad.BsCancel, cr.Label("strCfgKeyAssignBsCancel"), cr.Explanation("strCfgKeyAssignBsCancel") ));
408 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nInputAdjustTimeMs.Bass);
410 else if (eMenu == Eメニュー種別.System)
412 list項目リスト.Add(ReturnToMenu.System);
413 COptionStringList langlist = new COptionStringList("default");
414 langlist.Initialize( "strCfgLanguage", cr.LanguageDispList );
415 langlist.Index = CDTXMania.Instance.Resources.LanguageCodeIndex;
416 langlist.OnEnterDelegate = () =>
418 int index = langlist.Index;
419 CDTXMania.Instance.ConfigIni.strLanguage.Value = CDTXMania.Instance.Resources.Language = CDTXMania.Instance.Resources.LanguageCodeList[ index ];
422 list項目リスト.Add( langlist );
424 COptionString enumsongs = new COptionString("");
425 enumsongs.Initialize( "strCfgSysEnumSongs" );
426 list項目リスト.Add(enumsongs);
427 list項目リスト.Add(CDTXMania.Instance.ConfigIni.eDark);
428 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nRisky);
429 list項目リスト.Add(CDTXMania.Instance.ConfigIni.eActiveInst);
430 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nPlaySpeed);
431 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nSleepPerFrameMs);
432 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nSleepUnfocusMs);
433 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bForceHighPowerPlan);
434 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bStageFailed);
435 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bRandSubBox);
436 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nPreSoundWeightMs);
437 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nPreImageWeightMs);
438 list項目リスト.Add(CDTXMania.Instance.ConfigIni.eDamageLevel);
439 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bScoreIni);
440 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nChipVolume);
441 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nAutoVolume);
442 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bStoicMode);
443 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bIsAutoResultCapture);
444 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bBufferedInput);
445 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bLog);
446 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bLoadSoundSpeed);
447 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bLoadDTXDetail);// #36177 2016.7.30 ikanick
448 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bUseBoxDefSkin);
449 list項目リスト.Add(skins);
450 list項目リスト.Add(SoundMenu);
451 list項目リスト.Add(DisplayMenu.System);
452 list項目リスト.Add(HitRangeMenu);
453 list項目リスト.Add(KeyAssignMenu.System);
454 enumsongs.OnEnterDelegate = () =>
456 if (CDTXMania.Instance.EnumSongs.IsEnumerating)
458 // Debug.WriteLine( "バックグラウンドでEnumeratingSongs中だったので、一旦中断します。" );
459 CDTXMania.Instance.EnumSongs.Abort();
460 CDTXMania.Instance.actEnumSongs.On非活性化();
463 CDTXMania.Instance.EnumSongs.StartEnumFromDisk();
464 CDTXMania.Instance.EnumSongs.ChangeEnumeratePriority(ThreadPriority.Normal);
465 CDTXMania.Instance.actEnumSongs.bコマンドでの曲データ取得 = true;
466 CDTXMania.Instance.actEnumSongs.On活性化();
469 else if ( eMenu == Eメニュー種別.SoundSettings )
471 list項目リスト.Add( ReturnToMenu.System );
472 list項目リスト.Add( CDTXMania.Instance.ConfigIni.bTimeStretch );
473 list項目リスト.Add( CDTXMania.Instance.ConfigIni.bWaveAdjust );
474 list項目リスト.Add( CDTXMania.Instance.ConfigIni.bBGMPlay );
475 list項目リスト.Add( CDTXMania.Instance.ConfigIni.bAudience );
476 list項目リスト.Add( CDTXMania.Instance.ConfigIni.nChipVolume );
477 list項目リスト.Add( CDTXMania.Instance.ConfigIni.nAutoVolume );
478 list項目リスト.Add( CDTXMania.Instance.ConfigIni.nSoundDeviceType );
479 list項目リスト.Add( CDTXMania.Instance.ConfigIni.nWASAPIBufferSizeMs );
480 list項目リスト.Add( CDTXMania.Instance.ConfigIni.bEventDrivenWASAPI );
481 list項目リスト.Add( CDTXMania.Instance.ConfigIni.strASIODevice );
482 list項目リスト.Add( CDTXMania.Instance.ConfigIni.bUseOSTimer );
483 list項目リスト.Add( CDTXMania.Instance.ConfigIni.nMasterVolume );
484 list項目リスト.Add( CDTXMania.Instance.ConfigIni.nPolyphonicSounds );
485 list項目リスト.Add( CDTXMania.Instance.ConfigIni.eClickType );
486 list項目リスト.Add( CDTXMania.Instance.ConfigIni.nClickHighVolume );
487 list項目リスト.Add( CDTXMania.Instance.ConfigIni.nClickLowVolume );
489 else if ( eMenu == Eメニュー種別.Drums )
491 list項目リスト.Add(ReturnToMenu.Drums);
492 COptionEnum<EThreeState> AllAuto = new COptionEnum<EThreeState>(EThreeState.X);
493 AllAuto.Initialize( "strCfgDrAllAuto", typeof(EThreeState));
494 AllAuto.OnEnterDelegate = () =>
496 if ( AllAuto.Value == EThreeState.X )
500 CDTXMania.Instance.ConfigIni.bAutoPlay.Set( EPart.Drums, AllAuto );
502 list項目リスト.Add(AllAuto);
503 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.LC);
504 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.HH);
505 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.HHO);
506 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.SD);
507 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.BD);
508 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.HT);
509 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.LT);
510 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.FT);
511 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.CY);
512 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.RD);
513 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nScrollSpeed.Drums);
514 list項目リスト.Add(CDTXMania.Instance.ConfigIni.eHitSoundPriorityHH);
515 list項目リスト.Add(CDTXMania.Instance.ConfigIni.eHitSoundPriorityFT);
516 list項目リスト.Add(CDTXMania.Instance.ConfigIni.eHitSoundPriorityCY);
517 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bTight);
518 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bFillin);
519 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bDrumsHitSound);
520 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bEmphasizePlaySound.Drums);
521 list項目リスト.Add(DisplayMenu.Drums);
522 list項目リスト.Add(EDrumsMenu.Drums);
523 list項目リスト.Add(KeyAssignMenu.Drums);
525 else if (eMenu == Eメニュー種別.Guitar)
527 list項目リスト.Add(ReturnToMenu.Guitar);
528 COptionEnum<EThreeState> AllAuto = new COptionEnum<EThreeState>(EThreeState.X);
529 AllAuto.Initialize( "strCfgDrAllAuto", typeof(EThreeState));
530 AllAuto.OnEnterDelegate = () =>
532 if ( AllAuto.Value == EThreeState.X )
536 CDTXMania.Instance.ConfigIni.bAutoPlay.Set( EPart.Guitar, AllAuto );
538 list項目リスト.Add(AllAuto);
539 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.GtR);
540 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.GtG);
541 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.GtB);
542 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.GtPick);
543 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.GtWail);
544 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nScrollSpeed.Guitar);
545 list項目リスト.Add(CDTXMania.Instance.ConfigIni.eRandom.Guitar);
546 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bLight.Guitar);
547 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bEmphasizePlaySound.Guitar);
548 list項目リスト.Add(DisplayMenu.Guitar);
549 list項目リスト.Add(KeyAssignMenu.Guitar);
551 else if (eMenu == Eメニュー種別.Bass)
553 list項目リスト.Add(ReturnToMenu.Bass);
554 COptionEnum<EThreeState> AllAuto = new COptionEnum<EThreeState>(EThreeState.X);
555 AllAuto.Initialize( "strCfgDrAllAuto", typeof(EThreeState));
556 AllAuto.OnEnterDelegate = () =>
558 if ( AllAuto.Value == EThreeState.X )
562 CDTXMania.Instance.ConfigIni.bAutoPlay.Set( EPart.Bass, AllAuto );
564 list項目リスト.Add(AllAuto);
565 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.BsR);
566 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.BsG);
567 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.BsB);
568 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.BsPick);
569 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.BsWail);
570 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nScrollSpeed.Bass);
571 list項目リスト.Add(CDTXMania.Instance.ConfigIni.eRandom.Bass);
572 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bLight.Bass);
573 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bEmphasizePlaySound.Bass);
574 list項目リスト.Add(DisplayMenu.Bass);
575 list項目リスト.Add(KeyAssignMenu.Bass);
584 CDTXMania.Instance.Skin.soundカーソル移動音.t再生する();
587 list項目リスト[n現在の選択項目].OnPrevious();
592 n目標のスクロールカウンタ += 100;
596 public void OnPrevious()
598 CDTXMania.Instance.Skin.soundカーソル移動音.t再生する();
601 list項目リスト[n現在の選択項目].OnNext();
606 n目標のスクロールカウンタ -= 100;
610 private void t要素値を上下に変更中の処理()
612 if (this.list項目リスト[this.n現在の選択項目] == CDTXMania.Instance.ConfigIni.nMasterVolume)
614 // #33700 2014.4.26 yyagi
615 CDTXMania.Instance.Sound管理.nMasterVolume = CDTXMania.Instance.ConfigIni.nMasterVolume;
619 public override void On活性化()
623 this.list項目リスト = new List<COptionBase>();
624 this.eメニュー種別 = Eメニュー種別.Unknown;
625 this.prvFont = new CPrivateFastFont(CSkin.Path(@"Graphics\fonts\mplus-1p-heavy.ttf"), (int)(18 * Scale.Y));
626 this.b要素値にフォーカス中 = false;
627 this.n目標のスクロールカウンタ = 0;
628 this.n現在のスクロールカウンタ = 0;
629 this.nスクロール用タイマ値 = -1;
630 this.ct三角矢印アニメ = new CCounter();
633 DisplayMenu = new STDGBSValue<COptionLabel>();
634 KeyAssignMenu = new STDGBSValue<COptionLabel>();
635 EDrumsMenu = new STDGBSValue<COptionLabel>();
636 ReturnToMenu = new STDGBSValue<COptionLabel>();
638 CResources cr = CDTXMania.Instance.Resources;
639 for ( EPart i = EPart.Drums; i <= EPart.System; ++i )
641 DisplayMenu[i] = new COptionLabel( "strCfgDisplayOption" );
642 KeyAssignMenu[i] = new COptionLabel( "strCfgInputOption" );
643 ReturnToMenu[i] = new COptionLabel( "strCfgReturnToMenu" );
646 EDrumsMenu[ EPart.Drums ] = new COptionLabel( "strCfgEDrumsOption" );
647 HitRangeMenu = new COptionLabel( "strCfgHitRangeOption" );
648 SoundMenu = new COptionLabel( "strCfgSoundOption" );
650 DisplayMenu.Drums.OnEnterDelegate = () =>
652 t項目リストの設定(Eメニュー種別.DisplayDrums);
654 DisplayMenu.Guitar.OnEnterDelegate = () =>
656 t項目リストの設定(Eメニュー種別.DisplayGuitar);
658 DisplayMenu.Bass.OnEnterDelegate = () =>
660 t項目リストの設定(Eメニュー種別.DisplayBass);
662 DisplayMenu.System.OnEnterDelegate = () =>
664 t項目リストの設定(Eメニュー種別.DisplaySystem);
666 KeyAssignMenu.Drums.OnEnterDelegate = () =>
668 t項目リストの設定(Eメニュー種別.KeyAssignDrums);
670 KeyAssignMenu.Guitar.OnEnterDelegate = () =>
672 t項目リストの設定(Eメニュー種別.KeyAssignGuitar);
674 KeyAssignMenu.Bass.OnEnterDelegate = () =>
676 t項目リストの設定(Eメニュー種別.KeyAssignBass);
678 KeyAssignMenu.System.OnEnterDelegate = () =>
680 t項目リストの設定(Eメニュー種別.KeyAssignSystem);
683 ReturnToMenu.Drums.OnEnterDelegate = () =>
685 t項目リストの設定(Eメニュー種別.Drums);
687 ReturnToMenu.Guitar.OnEnterDelegate = () =>
689 t項目リストの設定(Eメニュー種別.Guitar);
691 ReturnToMenu.Bass.OnEnterDelegate = () =>
693 t項目リストの設定(Eメニュー種別.Bass);
695 ReturnToMenu.System.OnEnterDelegate = () =>
697 t項目リストの設定(Eメニュー種別.System);
699 EDrumsMenu.Drums.OnEnterDelegate = () =>
701 t項目リストの設定(Eメニュー種別.EDrumsSettings);
703 HitRangeMenu.OnEnterDelegate = () =>
705 t項目リストの設定( Eメニュー種別.HitRangeSettings );
707 SoundMenu.OnEnterDelegate = () =>
709 t項目リストの設定( Eメニュー種別.SoundSettings );
712 #region [ スキン選択肢と、現在選択中のスキン(index)の準備 #28195 2012.5.2 yyagi ]
713 int ns = (CDTXMania.Instance.Skin.strSystemSkinSubfolders == null) ? 0 : CDTXMania.Instance.Skin.strSystemSkinSubfolders.Length;
714 int nb = (CDTXMania.Instance.Skin.strBoxDefSkinSubfolders == null) ? 0 : CDTXMania.Instance.Skin.strBoxDefSkinSubfolders.Length;
716 skinSubFolders = new string[ns + nb];
717 skinInitial = CDTXMania.Instance.Skin.GetCurrentSkinSubfolderFullName(true);
719 for (int i = 0; i < ns; i++)
721 skinSubFolders[i] = CDTXMania.Instance.Skin.strSystemSkinSubfolders[i];
723 for (int i = 0; i < nb; i++)
725 skinSubFolders[ns + i] = CDTXMania.Instance.Skin.strBoxDefSkinSubfolders[i];
727 Array.Sort(skinSubFolders);
728 skinNames = CSkin.GetSkinName(skinSubFolders);
729 initIdx = Array.BinarySearch(skinSubFolders, skinInitial);
734 skins = new COptionStringList(skinNames[initIdx]);
735 skins.Initialize("Skin", Properties.Resources.strCfgSysSkin, skinNames);
737 skins.OnEnterDelegate = () =>
739 CDTXMania.Instance.Skin.SetCurrentSkinSubfolderFullName(skinSubFolders[skins.Index], true);
740 CDTXMania.Instance.ConfigIni.strSystemSkinSubfolderPath.Value = skinSubFolders[skins.Index];
741 tGenerateSkinSample();
745 // CONFIG脱出時にこの値から変更されているようなら
747 this.InitialSystemSoundType = CDTXMania.Instance.ConfigIni.nSoundDeviceType;
748 this.InitialWASAPIBufferSizeMs = CDTXMania.Instance.ConfigIni.nWASAPIBufferSizeMs;
749 this.InitialASIODevice = CDTXMania.Instance.ConfigIni.strASIODevice.Index;
750 this.InitialUseOSTimer = CDTXMania.Instance.ConfigIni.bUseOSTimer;
751 this.InitialWASAPIEventDriven = CDTXMania.Instance.ConfigIni.bEventDrivenWASAPI;
753 this.InitialForceHighPower = CDTXMania.Instance.ConfigIni.bForceHighPowerPlan;
755 // #27795 2012.3.11 yyagi; System設定の中でDrumsの設定を参照しているため、
756 this.t項目リストの設定(Eメニュー種別.Bass);
757 // 活性化の時点でDrumsの設定も入れ込んでおかないと、System設定中に例外発生することがある。
758 this.t項目リストの設定(Eメニュー種別.Guitar);
759 this.t項目リストの設定(Eメニュー種別.Drums);
760 // 順番として、最後にSystemを持ってくること。設定一覧の初期位置がSystemのため。
761 this.t項目リストの設定(Eメニュー種別.System);
767 public override void On非活性化()
771 CDTXMania.Instance.SaveConfig();
772 this.list項目リスト.Clear();
773 this.ct三角矢印アニメ = null;
780 if (CDTXMania.Instance.Skin.GetCurrentSkinSubfolderFullName(true) != this.skinInitial)
782 CDTXMania.Instance.stageChangeSkin.tChangeSkinMain(); // #28195 2012.6.11 yyagi CONFIG脱出時にSkin更新
786 // #24820 2013.1.22 yyagi CONFIGでWASAPI/ASIO/DirectSound関連の設定を変更した場合、サウンドデバイスを再構築する。
787 // #33689 2014.6.17 yyagi CONFIGでSoundTimerTypeの設定を変更した場合も、サウンドデバイスを再構築する。
788 #region [ サウンドデバイス変更 ]
789 if (InitialSystemSoundType != CDTXMania.Instance.ConfigIni.nSoundDeviceType ||
790 InitialWASAPIBufferSizeMs != CDTXMania.Instance.ConfigIni.nWASAPIBufferSizeMs ||
791 InitialASIODevice != CDTXMania.Instance.ConfigIni.strASIODevice.Index ||
792 InitialUseOSTimer != CDTXMania.Instance.ConfigIni.bUseOSTimer ||
793 InitialWASAPIEventDriven != CDTXMania.Instance.ConfigIni.bEventDrivenWASAPI )
795 ESoundDeviceType soundDeviceType;
796 switch (CDTXMania.Instance.ConfigIni.nSoundDeviceType.Value)
798 case ESoundDeviceTypeForConfig.DSound:
799 soundDeviceType = ESoundDeviceType.DirectSound;
801 case ESoundDeviceTypeForConfig.ASIO:
802 soundDeviceType = ESoundDeviceType.ASIO;
804 case ESoundDeviceTypeForConfig.WASAPI_Exclusive:
805 soundDeviceType = ESoundDeviceType.ExclusiveWASAPI;
807 case ESoundDeviceTypeForConfig.WASAPI_Shared:
808 soundDeviceType = ESoundDeviceType.SharedWASAPI;
811 soundDeviceType = ESoundDeviceType.Unknown;
815 CDTXMania.Instance.Sound管理.t初期化(
817 CDTXMania.Instance.ConfigIni.nWASAPIBufferSizeMs,
818 CDTXMania.Instance.ConfigIni.bEventDrivenWASAPI,
820 CDTXMania.Instance.ConfigIni.strASIODevice.Index,
821 CDTXMania.Instance.ConfigIni.bUseOSTimer);
822 CDTXMania.Instance.ShowWindowTitleWithSoundType();
826 #region [ メトロノーム音 音量設定 ]
827 CDTXMania.Instance.Skin.soundClickHigh.n音量 = CDTXMania.Instance.ConfigIni.nClickHighVolume;
828 CDTXMania.Instance.Skin.soundClickLow.n音量 = CDTXMania.Instance.ConfigIni.nClickLowVolume;
831 #region [ サウンドのタイムストレッチモード変更 ]
833 FDK.CSound管理.bIsTimeStretch = CDTXMania.Instance.ConfigIni.bUseOSTimer;
837 if ( CDTXMania.Instance.ConfigIni.bForceHighPowerPlan )
839 CPowerPlan.ChangeHighPerformance();
843 // HighPower=OFFを維持したとき、またはONからOFFにしたときは、
845 // 電源プランの復元は、アプリ終了時に行う。
846 // CPowerPlan.RestoreCurrentPowerPlan();
852 public override void OnManagedリソースの作成()
856 this.tx通常項目行パネル = TextureFactory.tテクスチャの生成Af(CSkin.Path(@"Graphics\ScreenConfig itembox.png"), false);
857 this.txその他項目行パネル = TextureFactory.tテクスチャの生成Af(CSkin.Path(@"Graphics\ScreenConfig itembox other.png"), false);
858 this.tx三角矢印 = TextureFactory.tテクスチャの生成(CSkin.Path(@"Graphics\ScreenConfig triangle arrow.png"), false);
859 // スキン選択時に動的に設定するため、ここでは初期化しない
860 this.txSkinSample = null;
862 base.OnManagedリソースの作成();
866 public override void OnManagedリソースの解放()
870 TextureFactory.tテクスチャの解放(ref this.txSkinSample);
871 TextureFactory.tテクスチャの解放(ref this.tx通常項目行パネル);
872 TextureFactory.tテクスチャの解放(ref this.txその他項目行パネル);
873 TextureFactory.tテクスチャの解放(ref this.tx三角矢印);
877 base.OnManagedリソースの解放();
881 private void OnListMenuの初期化()
884 this.listMenu = new stMenuItemRight[this.list項目リスト.Count];
888 /// 事前にレンダリングしておいたテクスチャを解放する。
890 private void OnListMenuの解放()
892 if (listMenu != null)
894 for (int i = 0; i < listMenu.Length; i++)
896 TextureFactory.tテクスチャの解放(ref listMenu[i].txParam);
897 TextureFactory.tテクスチャの解放(ref listMenu[i].txParamColored);
898 TextureFactory.tテクスチャの解放(ref listMenu[i].txMenuItemRight);
900 this.listMenu = null;
904 public override int On進行描画()
906 throw new InvalidOperationException("t進行描画(bool)のほうを使用してください。");
909 public int t進行描画(bool b項目リスト側にフォーカスがある)
917 this.nスクロール用タイマ値 = CSound管理.rc演奏用タイマ.n現在時刻;
918 this.ct三角矢印アニメ.t開始(0, 9, 50, CDTXMania.Instance.Timer);
920 base.b初めての進行描画 = false;
925 this.b項目リスト側にフォーカスがある = b項目リスト側にフォーカスがある; // 記憶
927 #region [ 項目スクロールの進行 ]
929 long n現在時刻 = CDTXMania.Instance.Timer.n現在時刻;
930 if (n現在時刻 < this.nスクロール用タイマ値) this.nスクロール用タイマ値 = n現在時刻;
932 const int INTERVAL = 2; // [ms]
933 while ((n現在時刻 - this.nスクロール用タイマ値) >= INTERVAL)
935 int n目標項目までのスクロール量 = Math.Abs((int)(this.n目標のスクロールカウンタ - this.n現在のスクロールカウンタ));
938 #region [ n加速度の決定;目標まで遠いほど加速する。]
940 if (n目標項目までのスクロール量 <= 100)
944 else if (n目標項目までのスクロール量 <= 300)
948 else if (n目標項目までのスクロール量 <= 500)
958 #region [ this.n現在のスクロールカウンタに n加速度 を加減算。]
960 if (this.n現在のスクロールカウンタ < this.n目標のスクロールカウンタ)
962 this.n現在のスクロールカウンタ += n加速度;
963 if (this.n現在のスクロールカウンタ > this.n目標のスクロールカウンタ)
966 this.n現在のスクロールカウンタ = this.n目標のスクロールカウンタ;
969 else if (this.n現在のスクロールカウンタ > this.n目標のスクロールカウンタ)
971 this.n現在のスクロールカウンタ -= n加速度;
972 if (this.n現在のスクロールカウンタ < this.n目標のスクロールカウンタ)
975 this.n現在のスクロールカウンタ = this.n目標のスクロールカウンタ;
980 #region [ 行超え処理、ならびに目標位置に到達したらスクロールを停止して項目変更通知を発行。]
982 if (this.n現在のスクロールカウンタ >= 100)
984 this.n現在の選択項目 = this.t次の項目(this.n現在の選択項目);
985 this.n現在のスクロールカウンタ -= 100;
986 this.n目標のスクロールカウンタ -= 100;
987 if (this.n目標のスクロールカウンタ == 0)
989 CDTXMania.Instance.stageコンフィグ.t項目変更通知();
992 else if (this.n現在のスクロールカウンタ <= -100)
994 this.n現在の選択項目 = this.t前の項目(this.n現在の選択項目);
995 this.n現在のスクロールカウンタ += 100;
996 this.n目標のスクロールカウンタ += 100;
997 if (this.n目標のスクロールカウンタ == 0)
999 CDTXMania.Instance.stageコンフィグ.t項目変更通知();
1005 this.nスクロール用タイマ値 += INTERVAL;
1010 #region [ ▲印アニメの進行 ]
1011 if (this.b項目リスト側にフォーカスがある && (this.n目標のスクロールカウンタ == 0))
1013 this.ct三角矢印アニメ.t進行Loop();
1020 // メニューにフォーカスがあるなら、項目リストの中央は頭を出さない。
1021 this.ptパネルの基本座標[4].X = this.b項目リスト側にフォーカスがある ? 276 : 301;
1023 #region [ 計11個の項目パネルを描画する。]
1025 int nItem = this.n現在の選択項目;
1026 for (int i = 0; i < 4; i++)
1028 nItem = this.t前の項目(nItem);
1031 for (int n行番号 = -4; n行番号 < 6; n行番号++)
1033 // n行番号 == 0 がフォーカスされている項目パネル。
1034 #region [ 今まさに画面外に飛びだそうとしている項目パネルは描画しない。]
1035 if (((n行番号 == -4) && (this.n現在のスクロールカウンタ > 0)) ||
1036 ((n行番号 == +5) && (this.n現在のスクロールカウンタ < 0)))
1038 nItem = this.t次の項目(nItem);
1043 int n移動元の行の基本位置 = n行番号 + 4;
1044 int n移動先の行の基本位置 = (this.n現在のスクロールカウンタ <= 0) ? ((n移動元の行の基本位置 + 1) % 10) : (((n移動元の行の基本位置 - 1) + 10) % 10);
1045 int x = this.ptパネルの基本座標[n移動元の行の基本位置].X + ((int)((this.ptパネルの基本座標[n移動先の行の基本位置].X - this.ptパネルの基本座標[n移動元の行の基本位置].X) * (((double)Math.Abs(this.n現在のスクロールカウンタ)) / 100.0)));
1046 int y = this.ptパネルの基本座標[n移動元の行の基本位置].Y + ((int)((this.ptパネルの基本座標[n移動先の行の基本位置].Y - this.ptパネルの基本座標[n移動元の行の基本位置].Y) * (((double)Math.Abs(this.n現在のスクロールカウンタ)) / 100.0)));
1048 #region [ 現在の行の項目パネル枠を描画。]
1049 if (this.list項目リスト[nItem].type == EOptionType.Normal)
1051 if (this.tx通常項目行パネル != null)
1053 this.tx通常項目行パネル.t2D描画(CDTXMania.Instance.Device, x * Scale.X, y * Scale.Y);
1056 else if (this.list項目リスト[nItem].type == EOptionType.Other)
1058 if (this.txその他項目行パネル != null)
1060 this.txその他項目行パネル.t2D描画(CDTXMania.Instance.Device, x * Scale.X, y * Scale.Y);
1065 #region [ 現在の行の項目名を描画。]
1066 if (listMenu[nItem].txMenuItemRight != null)
1068 // 自前のキャッシュに含まれているようなら、再レンダリングせずキャッシュを使用
1069 listMenu[nItem].txMenuItemRight.t2D描画(CDTXMania.Instance.Device, (x + 0x12) * Scale.X, (y + 12) * Scale.Y - 20);
1073 using (Bitmap bmpItem = prvFont.DrawPrivateFont(this.list項目リスト[nItem].label, Color.White, Color.Black))
1075 TextureFactory.tテクスチャの解放(ref listMenu[nItem].txMenuItemRight);
1076 listMenu[nItem].txMenuItemRight = TextureFactory.tテクスチャの生成(bmpItem);
1081 #region [ 現在の行の項目の要素を描画。]
1082 string strParam = this.list項目リスト[nItem].ToString();
1085 #region [ 最初にSkinの選択肢にきたとき(Enterを押す前)に限り、サンプル生成が発生する。 #28195 2012.5.2 yyagi ]
1086 if (this.list項目リスト[this.n現在の選択項目] == skins)
1088 if (txSkinSample == null)
1090 tGenerateSkinSample();
1092 if (txSkinSample != null)
1094 txSkinSample.t2D描画(CDTXMania.Instance.Device, 56 * Scale.X, 300 * Scale.Y);
1100 int nIndex = this.list項目リスト[nItem].Index;
1101 bool bColored = list項目リスト[nItem] is COptionInteger && n行番号 == 0 && b要素値にフォーカス中;
1102 if (listMenu[nItem].nParam != nIndex ||
1103 (listMenu[nItem].txParam == null) ||
1104 (bColored && listMenu[nItem].txParamColored == null))
1106 listMenu[nItem].nParam = nIndex;
1107 listMenu[nItem].strParam = this.list項目リスト[nItem].ToString();
1108 using (Bitmap bmpStr = prvFont.DrawPrivateFont(strParam, Color.White, Color.Black))
1110 TextureFactory.tテクスチャの解放(ref listMenu[nItem].txParam);
1111 listMenu[nItem].txParam = TextureFactory.tテクスチャの生成(bmpStr, false);
1114 using (Bitmap bmpStrColored = prvFont.DrawPrivateFont(strParam, Color.White, Color.Black, Color.Yellow, Color.OrangeRed))
1116 TextureFactory.tテクスチャの解放(ref listMenu[nItem].txParamColored);
1117 listMenu[nItem].txParamColored = TextureFactory.tテクスチャの生成(bmpStrColored, false);
1125 listMenu[nItem].txParamColored.t2D描画(CDTXMania.Instance.Device, (x + 210) * Scale.X, (y + 12) * Scale.Y - 20);
1129 listMenu[nItem].txParam.t2D描画(CDTXMania.Instance.Device, (x + 210) * Scale.X, (y + 12) * Scale.Y - 20);
1131 nItem = this.t次の項目(nItem);
1135 #region [ 項目リストにフォーカスがあって、かつスクロールが停止しているなら、パネルの上下に▲印を描画する。]
1136 if (this.b項目リスト側にフォーカスがある && (this.n目標のスクロールカウンタ == 0))
1144 if (this.b要素値にフォーカス中)
1148 y_upper = 198 - this.ct三角矢印アニメ.n現在の値;
1149 y_lower = 242 + this.ct三角矢印アニメ.n現在の値;
1155 y_upper = 186 - this.ct三角矢印アニメ.n現在の値;
1156 y_lower = 254 + this.ct三角矢印アニメ.n現在の値;
1161 if (this.tx三角矢印 != null)
1163 this.tx三角矢印.t2D描画(CDTXMania.Instance.Device, x * Scale.X,
1165 new Rectangle(0, 0, (int)(32 * Scale.X), (int)(16 * Scale.Y)));
1166 this.tx三角矢印.t2D描画(CDTXMania.Instance.Device, x * Scale.X,
1168 new Rectangle(0, (int)(16 * Scale.Y), (int)(32 * Scale.X), (int)(16 * Scale.Y)));
1178 internal enum Eメニュー種別
1184 // #24609 2011.4.12 yyagi: 画面キャプチャキーのアサイン
1199 private int t前の項目(int nItem)
1203 nItem = this.list項目リスト.Count - 1;
1208 private int t次の項目(int nItem)
1210 if (++nItem >= this.list項目リスト.Count)