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.bShowSongPath);
280 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bDebugInfo);
282 else if (eMenu == Eメニュー種別.DisplayDrums)
284 list項目リスト.Add(ReturnToMenu.Drums);
285 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdInstX.Drums.Both);
286 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdInstX.Drums.DrOnly);
287 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdComboX.Drums.Both);
288 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdComboX.Drums.DrOnly);
289 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdJudgeLineY.Drums);
290 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdJudgeY.Drums);
291 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLaneOrder.LC);
292 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLaneOrder.HH);
293 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLaneOrder.SD);
294 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLaneOrder.BD);
295 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLaneOrder.HT);
296 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLaneOrder.LT);
297 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLaneOrder.FT);
298 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLaneOrder.CY);
299 list項目リスト.Add(CDTXMania.Instance.ConfigIni.eSudHidInv.Drums);
300 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bReverse.Drums);
301 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bDisplayCombo.Drums); // 112追加
302 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nMinComboDisp.Drums);
303 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bDisplayJudge.Drums); // 112追加
304 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bGraph.Drums);
306 else if (eMenu == Eメニュー種別.DisplayGuitar)
308 list項目リスト.Add(ReturnToMenu.Guitar);
309 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdInstX.Guitar.Both);
310 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdInstX.Guitar.GBOnly);
311 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdComboX.Guitar.Both);
312 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdComboX.Guitar.GBOnly);
313 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdJudgeLineY.Guitar);
314 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdJudgeY.Guitar);
315 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLaneOrder.GtR);
316 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLaneOrder.GtG);
317 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLaneOrder.GtB);
318 list項目リスト.Add(CDTXMania.Instance.ConfigIni.eSudHidInv.Guitar);
319 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bReverse.Guitar);
320 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bDisplayCombo.Guitar); // 112追加
321 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nMinComboDisp.Guitar);
322 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bDisplayJudge.Guitar); // 112追加
323 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bGraph.Guitar);
325 else if (eMenu == Eメニュー種別.DisplayBass)
327 list項目リスト.Add(ReturnToMenu.Bass);
328 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdInstX.Bass.Both);
329 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdInstX.Bass.GBOnly);
330 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdComboX.Bass.Both);
331 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdComboX.Bass.GBOnly);
332 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdJudgeLineY.Bass);
333 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdJudgeY.Bass);
334 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLaneOrder.BsR);
335 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLaneOrder.BsG);
336 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLaneOrder.BsB);
337 list項目リスト.Add(CDTXMania.Instance.ConfigIni.eSudHidInv.Bass);
338 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bReverse.Bass);
339 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bDisplayCombo.Bass); // 112追加
340 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nMinComboDisp.Bass);
341 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bDisplayJudge.Bass); // 112追加
342 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bGraph.Bass);
344 else if (eMenu == Eメニュー種別.EDrumsSettings)
346 list項目リスト.Add(ReturnToMenu.Drums);
347 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nVelocityMin.LC);
348 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nVelocityMin.HH);
349 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nVelocityMin.SD);
350 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nVelocityMin.BD);
351 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nVelocityMin.HT);
352 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nVelocityMin.LT);
353 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nVelocityMin.FT);
354 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nVelocityMin.CY);
355 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nVelocityMin.RD);
357 else if (eMenu == Eメニュー種別.HitRangeSettings)
359 list項目リスト.Add(ReturnToMenu.System);
360 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nHitRange.Perfect);
361 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nHitRange.Great);
362 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nHitRange.Good);
363 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nHitRange.Poor);
365 else if (eMenu == Eメニュー種別.KeyAssignSystem)
367 list項目リスト.Add(ReturnToMenu.System);
368 list項目リスト.Add(PadNotifier(EPad.Capture, cr.Label("strCfgKeyAssignCapture"), cr.Explanation("strCfgKeyAssignCapture") ));
370 else if (eMenu == Eメニュー種別.KeyAssignDrums)
372 list項目リスト.Add(ReturnToMenu.Drums);
373 list項目リスト.Add(PadNotifier(EPad.LC, cr.Label("strCfgKeyAssignLC"), cr.Explanation("strCfgKeyAssignLC") ));
374 list項目リスト.Add(PadNotifier(EPad.HH, cr.Label("strCfgKeyAssignHH"), cr.Explanation("strCfgKeyAssignHH") ));
375 list項目リスト.Add(PadNotifier(EPad.HHO,cr.Label("strCfgKeyAssignHHO"), cr.Explanation("strCfgKeyAssignHHO") ));
376 list項目リスト.Add(PadNotifier(EPad.SD, cr.Label("strCfgKeyAssignSD"), cr.Explanation("strCfgKeyAssignSD") ));
377 list項目リスト.Add(PadNotifier(EPad.BD, cr.Label("strCfgKeyAssignBD"), cr.Explanation("strCfgKeyAssignBD") ));
378 list項目リスト.Add(PadNotifier(EPad.HT, cr.Label("strCfgKeyAssignHT"), cr.Explanation("strCfgKeyAssignHT") ));
379 list項目リスト.Add(PadNotifier(EPad.LT, cr.Label("strCfgKeyAssignLT"), cr.Explanation("strCfgKeyAssignLT") ));
380 list項目リスト.Add(PadNotifier(EPad.FT, cr.Label("strCfgKeyAssignFT"), cr.Explanation("strCfgKeyAssignFT") ));
381 list項目リスト.Add(PadNotifier(EPad.CY, cr.Label("strCfgKeyAssignCY"), cr.Explanation("strCfgKeyAssignCY") ));
382 list項目リスト.Add(PadNotifier(EPad.RD, cr.Label("strCfgKeyAssignRD"), cr.Explanation("strCfgKeyAssignRD") ));
383 list項目リスト.Add(PadNotifier(EPad.HP, cr.Label("strCfgKeyAssignHP"), cr.Explanation("strCfgKeyAssignHP") ));
384 list項目リスト.Add(CDTXMania.Instance.ConfigIni.eHHGroup);
385 list項目リスト.Add(CDTXMania.Instance.ConfigIni.eFTGroup);
386 list項目リスト.Add(CDTXMania.Instance.ConfigIni.eCYGroup);
387 list項目リスト.Add(CDTXMania.Instance.ConfigIni.eBDGroup);
388 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bCymbalFree);
389 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nInputAdjustTimeMs.Drums);
391 else if (eMenu == Eメニュー種別.KeyAssignGuitar)
393 list項目リスト.Add(ReturnToMenu.Guitar);
394 list項目リスト.Add(PadNotifier(EPad.GtR, cr.Label("strCfgKeyAssignGtR"), cr.Explanation("strCfgKeyAssignGtR") ));
395 list項目リスト.Add(PadNotifier(EPad.GtG, cr.Label("strCfgKeyAssignGtG"), cr.Explanation("strCfgKeyAssignGtG") ));
396 list項目リスト.Add(PadNotifier(EPad.GtB, cr.Label("strCfgKeyAssignGtB"), cr.Explanation("strCfgKeyAssignGtB") ));
397 list項目リスト.Add(PadNotifier(EPad.GtPick, cr.Label("strCfgKeyAssignGtPick"), cr.Explanation("strCfgKeyAssignGtPick") ));
398 list項目リスト.Add(PadNotifier(EPad.GtWail, cr.Label("strCfgKeyAssignGtWailing"), cr.Explanation("strCfgKeyAssignGtWailing") ));
399 list項目リスト.Add(PadNotifier(EPad.GtDecide, cr.Label("strCfgKeyAssignGtDecide"), cr.Explanation("strCfgKeyAssignGtDecide") ));
400 list項目リスト.Add(PadNotifier(EPad.GtCancel, cr.Label("strCfgKeyAssignGtCancel"), cr.Explanation("strCfgKeyAssignGtCancel") ));
401 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nInputAdjustTimeMs.Guitar);
403 else if (eMenu == Eメニュー種別.KeyAssignBass)
405 list項目リスト.Add(ReturnToMenu.Bass);
406 list項目リスト.Add(PadNotifier(EPad.BsR, cr.Label("strCfgKeyAssignBsR"), cr.Explanation("strCfgKeyAssignBsR") ));
407 list項目リスト.Add(PadNotifier(EPad.BsG, cr.Label("strCfgKeyAssignBsG"), cr.Explanation("strCfgKeyAssignBsG") ));
408 list項目リスト.Add(PadNotifier(EPad.BsB, cr.Label("strCfgKeyAssignBsB"), cr.Explanation("strCfgKeyAssignBsB") ));
409 list項目リスト.Add(PadNotifier(EPad.BsPick, cr.Label("strCfgKeyAssignBsPick"), cr.Explanation("strCfgKeyAssignBsPick") ));
410 list項目リスト.Add(PadNotifier(EPad.BsWail, cr.Label("strCfgKeyAssignBsWailing"), cr.Explanation("strCfgKeyAssignBsWailing") ));
411 list項目リスト.Add(PadNotifier(EPad.BsDecide, cr.Label("strCfgKeyAssignBsDecide"), cr.Explanation("strCfgKeyAssignBsDecide") ));
412 list項目リスト.Add(PadNotifier(EPad.BsCancel, cr.Label("strCfgKeyAssignBsCancel"), cr.Explanation("strCfgKeyAssignBsCancel") ));
413 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nInputAdjustTimeMs.Bass);
415 else if (eMenu == Eメニュー種別.System)
417 list項目リスト.Add(ReturnToMenu.System);
418 COptionStringList langlist = new COptionStringList("default");
419 langlist.Initialize( "strCfgLanguage", cr.LanguageDispList );
420 langlist.Index = CDTXMania.Instance.Resources.LanguageCodeIndex;
421 langlist.OnEnterDelegate = () =>
423 int index = langlist.Index;
424 CDTXMania.Instance.ConfigIni.strLanguage.Value = CDTXMania.Instance.Resources.Language = CDTXMania.Instance.Resources.LanguageCodeList[ index ];
427 list項目リスト.Add( langlist );
429 COptionString enumsongs = new COptionString("");
430 enumsongs.Initialize( "strCfgSysEnumSongs" );
431 list項目リスト.Add(enumsongs);
432 list項目リスト.Add(CDTXMania.Instance.ConfigIni.eDark);
433 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nRisky);
434 list項目リスト.Add(CDTXMania.Instance.ConfigIni.eActiveInst);
435 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nPlaySpeed);
436 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nSleepPerFrameMs);
437 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nSleepUnfocusMs);
438 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bForceHighPowerPlan);
439 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bStageFailed);
440 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bRandSubBox);
441 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nPreSoundWeightMs);
442 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nPreImageWeightMs);
443 list項目リスト.Add(CDTXMania.Instance.ConfigIni.eDamageLevel);
444 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bScoreIni);
445 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nChipVolume);
446 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nAutoVolume);
447 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bStoicMode);
448 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bIsAutoResultCapture);
449 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bBufferedInput);
450 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bLog);
451 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bLoadSoundSpeed);
452 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bLoadDTXDetail);// #36177 2016.7.30 ikanick
453 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bUseBoxDefSkin);
454 list項目リスト.Add(skins);
455 list項目リスト.Add(SoundMenu);
456 list項目リスト.Add(DisplayMenu.System);
457 list項目リスト.Add(HitRangeMenu);
458 list項目リスト.Add(KeyAssignMenu.System);
459 enumsongs.OnEnterDelegate = () =>
461 if (CDTXMania.Instance.EnumSongs.IsEnumerating)
463 // Debug.WriteLine( "バックグラウンドでEnumeratingSongs中だったので、一旦中断します。" );
464 CDTXMania.Instance.EnumSongs.Abort();
465 CDTXMania.Instance.actEnumSongs.On非活性化();
468 CDTXMania.Instance.EnumSongs.StartEnumFromDisk();
469 CDTXMania.Instance.EnumSongs.ChangeEnumeratePriority(ThreadPriority.Normal);
470 CDTXMania.Instance.actEnumSongs.bコマンドでの曲データ取得 = true;
471 CDTXMania.Instance.actEnumSongs.On活性化();
474 else if ( eMenu == Eメニュー種別.SoundSettings )
476 list項目リスト.Add( ReturnToMenu.System );
477 list項目リスト.Add( CDTXMania.Instance.ConfigIni.bTimeStretch );
478 list項目リスト.Add( CDTXMania.Instance.ConfigIni.bWaveAdjust );
479 list項目リスト.Add( CDTXMania.Instance.ConfigIni.bBGMPlay );
480 list項目リスト.Add( CDTXMania.Instance.ConfigIni.bAudience );
481 list項目リスト.Add( CDTXMania.Instance.ConfigIni.nChipVolume );
482 list項目リスト.Add( CDTXMania.Instance.ConfigIni.nAutoVolume );
483 list項目リスト.Add( CDTXMania.Instance.ConfigIni.nSoundDeviceType );
484 list項目リスト.Add( CDTXMania.Instance.ConfigIni.nWASAPIBufferSizeMs );
485 list項目リスト.Add( CDTXMania.Instance.ConfigIni.bEventDrivenWASAPI );
486 list項目リスト.Add( CDTXMania.Instance.ConfigIni.strASIODevice );
487 list項目リスト.Add( CDTXMania.Instance.ConfigIni.bUseOSTimer );
488 list項目リスト.Add( CDTXMania.Instance.ConfigIni.nMasterVolume );
489 list項目リスト.Add( CDTXMania.Instance.ConfigIni.nPolyphonicSounds );
490 list項目リスト.Add( CDTXMania.Instance.ConfigIni.eClickType );
491 list項目リスト.Add( CDTXMania.Instance.ConfigIni.nClickHighVolume );
492 list項目リスト.Add( CDTXMania.Instance.ConfigIni.nClickLowVolume );
494 else if ( eMenu == Eメニュー種別.Drums )
496 list項目リスト.Add(ReturnToMenu.Drums);
497 COptionEnum<EThreeState> AllAuto = new COptionEnum<EThreeState>(EThreeState.X);
498 AllAuto.Initialize( "strCfgDrAllAuto", typeof(EThreeState));
499 AllAuto.OnEnterDelegate = () =>
501 if ( AllAuto.Value == EThreeState.X )
505 CDTXMania.Instance.ConfigIni.bAutoPlay.Set( EPart.Drums, AllAuto );
507 list項目リスト.Add(AllAuto);
508 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.LC);
509 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.HH);
510 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.HHO);
511 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.SD);
512 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.BD);
513 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.HT);
514 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.LT);
515 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.FT);
516 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.CY);
517 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.RD);
518 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nScrollSpeed.Drums);
519 list項目リスト.Add(CDTXMania.Instance.ConfigIni.eHitSoundPriorityHH);
520 list項目リスト.Add(CDTXMania.Instance.ConfigIni.eHitSoundPriorityFT);
521 list項目リスト.Add(CDTXMania.Instance.ConfigIni.eHitSoundPriorityCY);
522 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bTight);
523 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bFillin);
524 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bDrumsHitSound);
525 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bEmphasizePlaySound.Drums);
526 list項目リスト.Add(DisplayMenu.Drums);
527 list項目リスト.Add(EDrumsMenu.Drums);
528 list項目リスト.Add(KeyAssignMenu.Drums);
530 else if (eMenu == Eメニュー種別.Guitar)
532 list項目リスト.Add(ReturnToMenu.Guitar);
533 COptionEnum<EThreeState> AllAuto = new COptionEnum<EThreeState>(EThreeState.X);
534 AllAuto.Initialize( "strCfgDrAllAuto", typeof(EThreeState));
535 AllAuto.OnEnterDelegate = () =>
537 if ( AllAuto.Value == EThreeState.X )
541 CDTXMania.Instance.ConfigIni.bAutoPlay.Set( EPart.Guitar, AllAuto );
543 list項目リスト.Add(AllAuto);
544 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.GtR);
545 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.GtG);
546 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.GtB);
547 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.GtPick);
548 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.GtWail);
549 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nScrollSpeed.Guitar);
550 list項目リスト.Add(CDTXMania.Instance.ConfigIni.eRandom.Guitar);
551 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bLight.Guitar);
552 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bEmphasizePlaySound.Guitar);
553 list項目リスト.Add(DisplayMenu.Guitar);
554 list項目リスト.Add(KeyAssignMenu.Guitar);
556 else if (eMenu == Eメニュー種別.Bass)
558 list項目リスト.Add(ReturnToMenu.Bass);
559 COptionEnum<EThreeState> AllAuto = new COptionEnum<EThreeState>(EThreeState.X);
560 AllAuto.Initialize( "strCfgDrAllAuto", typeof(EThreeState));
561 AllAuto.OnEnterDelegate = () =>
563 if ( AllAuto.Value == EThreeState.X )
567 CDTXMania.Instance.ConfigIni.bAutoPlay.Set( EPart.Bass, AllAuto );
569 list項目リスト.Add(AllAuto);
570 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.BsR);
571 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.BsG);
572 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.BsB);
573 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.BsPick);
574 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.BsWail);
575 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nScrollSpeed.Bass);
576 list項目リスト.Add(CDTXMania.Instance.ConfigIni.eRandom.Bass);
577 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bLight.Bass);
578 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bEmphasizePlaySound.Bass);
579 list項目リスト.Add(DisplayMenu.Bass);
580 list項目リスト.Add(KeyAssignMenu.Bass);
589 CDTXMania.Instance.Skin.soundカーソル移動音.t再生する();
592 list項目リスト[n現在の選択項目].OnPrevious();
597 n目標のスクロールカウンタ += 100;
601 public void OnPrevious()
603 CDTXMania.Instance.Skin.soundカーソル移動音.t再生する();
606 list項目リスト[n現在の選択項目].OnNext();
611 n目標のスクロールカウンタ -= 100;
615 private void t要素値を上下に変更中の処理()
617 if (this.list項目リスト[this.n現在の選択項目] == CDTXMania.Instance.ConfigIni.nMasterVolume)
619 // #33700 2014.4.26 yyagi
620 CDTXMania.Instance.Sound管理.nMasterVolume = CDTXMania.Instance.ConfigIni.nMasterVolume;
624 public override void On活性化()
628 this.list項目リスト = new List<COptionBase>();
629 this.eメニュー種別 = Eメニュー種別.Unknown;
631 CResources cr = CDTXMania.Instance.Resources;
632 string fontname = cr.Explanation("strCfgConfigurationItemsFontFileName");
633 string path = Path.Combine(@"Graphics\fonts", fontname);
634 this.prvFont = new CPrivateFastFont(CSkin.Path(path), (int)(18 * Scale.Y));
635 this.b要素値にフォーカス中 = false;
636 this.n目標のスクロールカウンタ = 0;
637 this.n現在のスクロールカウンタ = 0;
638 this.nスクロール用タイマ値 = -1;
639 this.ct三角矢印アニメ = new CCounter();
642 DisplayMenu = new STDGBSValue<COptionLabel>();
643 KeyAssignMenu = new STDGBSValue<COptionLabel>();
644 EDrumsMenu = new STDGBSValue<COptionLabel>();
645 ReturnToMenu = new STDGBSValue<COptionLabel>();
647 //CResources cr = CDTXMania.Instance.Resources;
648 for ( EPart i = EPart.Drums; i <= EPart.System; ++i )
650 DisplayMenu[i] = new COptionLabel( "strCfgDisplayOption" );
651 KeyAssignMenu[i] = new COptionLabel( "strCfgInputOption" );
652 ReturnToMenu[i] = new COptionLabel( "strCfgReturnToMenu" );
655 EDrumsMenu[ EPart.Drums ] = new COptionLabel( "strCfgEDrumsOption" );
656 HitRangeMenu = new COptionLabel( "strCfgHitRangeOption" );
657 SoundMenu = new COptionLabel( "strCfgSoundOption" );
659 DisplayMenu.Drums.OnEnterDelegate = () =>
661 t項目リストの設定(Eメニュー種別.DisplayDrums);
663 DisplayMenu.Guitar.OnEnterDelegate = () =>
665 t項目リストの設定(Eメニュー種別.DisplayGuitar);
667 DisplayMenu.Bass.OnEnterDelegate = () =>
669 t項目リストの設定(Eメニュー種別.DisplayBass);
671 DisplayMenu.System.OnEnterDelegate = () =>
673 t項目リストの設定(Eメニュー種別.DisplaySystem);
675 KeyAssignMenu.Drums.OnEnterDelegate = () =>
677 t項目リストの設定(Eメニュー種別.KeyAssignDrums);
679 KeyAssignMenu.Guitar.OnEnterDelegate = () =>
681 t項目リストの設定(Eメニュー種別.KeyAssignGuitar);
683 KeyAssignMenu.Bass.OnEnterDelegate = () =>
685 t項目リストの設定(Eメニュー種別.KeyAssignBass);
687 KeyAssignMenu.System.OnEnterDelegate = () =>
689 t項目リストの設定(Eメニュー種別.KeyAssignSystem);
692 ReturnToMenu.Drums.OnEnterDelegate = () =>
694 t項目リストの設定(Eメニュー種別.Drums);
696 ReturnToMenu.Guitar.OnEnterDelegate = () =>
698 t項目リストの設定(Eメニュー種別.Guitar);
700 ReturnToMenu.Bass.OnEnterDelegate = () =>
702 t項目リストの設定(Eメニュー種別.Bass);
704 ReturnToMenu.System.OnEnterDelegate = () =>
706 t項目リストの設定(Eメニュー種別.System);
708 EDrumsMenu.Drums.OnEnterDelegate = () =>
710 t項目リストの設定(Eメニュー種別.EDrumsSettings);
712 HitRangeMenu.OnEnterDelegate = () =>
714 t項目リストの設定( Eメニュー種別.HitRangeSettings );
716 SoundMenu.OnEnterDelegate = () =>
718 t項目リストの設定( Eメニュー種別.SoundSettings );
721 #region [ スキン選択肢と、現在選択中のスキン(index)の準備 #28195 2012.5.2 yyagi ]
722 int ns = (CDTXMania.Instance.Skin.strSystemSkinSubfolders == null) ? 0 : CDTXMania.Instance.Skin.strSystemSkinSubfolders.Length;
723 int nb = (CDTXMania.Instance.Skin.strBoxDefSkinSubfolders == null) ? 0 : CDTXMania.Instance.Skin.strBoxDefSkinSubfolders.Length;
725 skinSubFolders = new string[ns + nb];
726 skinInitial = CDTXMania.Instance.Skin.GetCurrentSkinSubfolderFullName(true);
728 for (int i = 0; i < ns; i++)
730 skinSubFolders[i] = CDTXMania.Instance.Skin.strSystemSkinSubfolders[i];
732 for (int i = 0; i < nb; i++)
734 skinSubFolders[ns + i] = CDTXMania.Instance.Skin.strBoxDefSkinSubfolders[i];
736 Array.Sort(skinSubFolders);
737 skinNames = CSkin.GetSkinName(skinSubFolders);
738 initIdx = Array.BinarySearch(skinSubFolders, skinInitial);
743 skins = new COptionStringList(skinNames[initIdx]);
744 skins.Initialize("Skin", Properties.Resources.strCfgSysSkin, skinNames);
746 skins.OnEnterDelegate = () =>
748 CDTXMania.Instance.Skin.SetCurrentSkinSubfolderFullName(skinSubFolders[skins.Index], true);
749 CDTXMania.Instance.ConfigIni.strSystemSkinSubfolderPath.Value = skinSubFolders[skins.Index];
750 tGenerateSkinSample();
754 // CONFIG脱出時にこの値から変更されているようなら
756 this.InitialSystemSoundType = CDTXMania.Instance.ConfigIni.nSoundDeviceType;
757 this.InitialWASAPIBufferSizeMs = CDTXMania.Instance.ConfigIni.nWASAPIBufferSizeMs;
758 this.InitialASIODevice = CDTXMania.Instance.ConfigIni.strASIODevice.Index;
759 this.InitialUseOSTimer = CDTXMania.Instance.ConfigIni.bUseOSTimer;
760 this.InitialWASAPIEventDriven = CDTXMania.Instance.ConfigIni.bEventDrivenWASAPI;
762 this.InitialForceHighPower = CDTXMania.Instance.ConfigIni.bForceHighPowerPlan;
764 // #27795 2012.3.11 yyagi; System設定の中でDrumsの設定を参照しているため、
765 this.t項目リストの設定(Eメニュー種別.Bass);
766 // 活性化の時点でDrumsの設定も入れ込んでおかないと、System設定中に例外発生することがある。
767 this.t項目リストの設定(Eメニュー種別.Guitar);
768 this.t項目リストの設定(Eメニュー種別.Drums);
769 // 順番として、最後にSystemを持ってくること。設定一覧の初期位置がSystemのため。
770 this.t項目リストの設定(Eメニュー種別.System);
776 public override void On非活性化()
780 CDTXMania.Instance.SaveConfig();
781 this.list項目リスト.Clear();
782 this.ct三角矢印アニメ = null;
789 if (CDTXMania.Instance.Skin.GetCurrentSkinSubfolderFullName(true) != this.skinInitial)
791 CDTXMania.Instance.stageChangeSkin.tChangeSkinMain(); // #28195 2012.6.11 yyagi CONFIG脱出時にSkin更新
795 // #24820 2013.1.22 yyagi CONFIGでWASAPI/ASIO/DirectSound関連の設定を変更した場合、サウンドデバイスを再構築する。
796 // #33689 2014.6.17 yyagi CONFIGでSoundTimerTypeの設定を変更した場合も、サウンドデバイスを再構築する。
797 #region [ サウンドデバイス変更 ]
798 if (InitialSystemSoundType != CDTXMania.Instance.ConfigIni.nSoundDeviceType ||
799 InitialWASAPIBufferSizeMs != CDTXMania.Instance.ConfigIni.nWASAPIBufferSizeMs ||
800 InitialASIODevice != CDTXMania.Instance.ConfigIni.strASIODevice.Index ||
801 InitialUseOSTimer != CDTXMania.Instance.ConfigIni.bUseOSTimer ||
802 InitialWASAPIEventDriven != CDTXMania.Instance.ConfigIni.bEventDrivenWASAPI )
804 ESoundDeviceType soundDeviceType;
805 switch (CDTXMania.Instance.ConfigIni.nSoundDeviceType.Value)
807 case ESoundDeviceTypeForConfig.DSound:
808 soundDeviceType = ESoundDeviceType.DirectSound;
810 case ESoundDeviceTypeForConfig.ASIO:
811 soundDeviceType = ESoundDeviceType.ASIO;
813 case ESoundDeviceTypeForConfig.WASAPI_Exclusive:
814 soundDeviceType = ESoundDeviceType.ExclusiveWASAPI;
816 case ESoundDeviceTypeForConfig.WASAPI_Shared:
817 soundDeviceType = ESoundDeviceType.SharedWASAPI;
820 soundDeviceType = ESoundDeviceType.Unknown;
824 CDTXMania.Instance.Sound管理.t初期化(
826 CDTXMania.Instance.ConfigIni.nWASAPIBufferSizeMs,
827 CDTXMania.Instance.ConfigIni.bEventDrivenWASAPI,
829 CDTXMania.Instance.ConfigIni.strASIODevice.Index,
830 CDTXMania.Instance.ConfigIni.bUseOSTimer);
831 CDTXMania.Instance.ShowWindowTitleWithSoundType();
835 #region [ メトロノーム音 音量設定 ]
836 CDTXMania.Instance.Skin.soundClickHigh.n音量 = CDTXMania.Instance.ConfigIni.nClickHighVolume;
837 CDTXMania.Instance.Skin.soundClickLow.n音量 = CDTXMania.Instance.ConfigIni.nClickLowVolume;
840 #region [ サウンドのタイムストレッチモード変更 ]
842 FDK.CSound管理.bIsTimeStretch = CDTXMania.Instance.ConfigIni.bTimeStretch.Value;
846 if ( CDTXMania.Instance.ConfigIni.bForceHighPowerPlan )
848 CPowerPlan.ChangeHighPerformance();
852 // HighPower=OFFを維持したとき、またはONからOFFにしたときは、
854 // 電源プランの復元は、アプリ終了時に行う。
855 // CPowerPlan.RestoreCurrentPowerPlan();
861 public override void OnManagedリソースの作成()
865 this.tx通常項目行パネル = TextureFactory.tテクスチャの生成Af(CSkin.Path(@"Graphics\ScreenConfig itembox.png"), false);
866 this.txその他項目行パネル = TextureFactory.tテクスチャの生成Af(CSkin.Path(@"Graphics\ScreenConfig itembox other.png"), false);
867 this.tx三角矢印 = TextureFactory.tテクスチャの生成(CSkin.Path(@"Graphics\ScreenConfig triangle arrow.png"), false);
868 // スキン選択時に動的に設定するため、ここでは初期化しない
869 this.txSkinSample = null;
871 base.OnManagedリソースの作成();
875 public override void OnManagedリソースの解放()
879 TextureFactory.tテクスチャの解放(ref this.txSkinSample);
880 TextureFactory.tテクスチャの解放(ref this.tx通常項目行パネル);
881 TextureFactory.tテクスチャの解放(ref this.txその他項目行パネル);
882 TextureFactory.tテクスチャの解放(ref this.tx三角矢印);
886 base.OnManagedリソースの解放();
890 private void OnListMenuの初期化()
893 this.listMenu = new stMenuItemRight[this.list項目リスト.Count];
897 /// 事前にレンダリングしておいたテクスチャを解放する。
899 private void OnListMenuの解放()
901 if (listMenu != null)
903 for (int i = 0; i < listMenu.Length; i++)
905 TextureFactory.tテクスチャの解放(ref listMenu[i].txParam);
906 TextureFactory.tテクスチャの解放(ref listMenu[i].txParamColored);
907 TextureFactory.tテクスチャの解放(ref listMenu[i].txMenuItemRight);
909 this.listMenu = null;
913 public override int On進行描画()
915 throw new InvalidOperationException("t進行描画(bool)のほうを使用してください。");
918 public int t進行描画(bool b項目リスト側にフォーカスがある)
926 this.nスクロール用タイマ値 = CSound管理.rc演奏用タイマ.n現在時刻;
927 this.ct三角矢印アニメ.t開始(0, 9, 50, CDTXMania.Instance.Timer);
929 base.b初めての進行描画 = false;
934 this.b項目リスト側にフォーカスがある = b項目リスト側にフォーカスがある; // 記憶
936 #region [ 項目スクロールの進行 ]
938 long n現在時刻 = CDTXMania.Instance.Timer.n現在時刻;
939 if (n現在時刻 < this.nスクロール用タイマ値) this.nスクロール用タイマ値 = n現在時刻;
941 const int INTERVAL = 2; // [ms]
942 while ((n現在時刻 - this.nスクロール用タイマ値) >= INTERVAL)
944 int n目標項目までのスクロール量 = Math.Abs((int)(this.n目標のスクロールカウンタ - this.n現在のスクロールカウンタ));
947 #region [ n加速度の決定;目標まで遠いほど加速する。]
949 if (n目標項目までのスクロール量 <= 100)
953 else if (n目標項目までのスクロール量 <= 300)
957 else if (n目標項目までのスクロール量 <= 500)
967 #region [ this.n現在のスクロールカウンタに n加速度 を加減算。]
969 if (this.n現在のスクロールカウンタ < this.n目標のスクロールカウンタ)
971 this.n現在のスクロールカウンタ += n加速度;
972 if (this.n現在のスクロールカウンタ > this.n目標のスクロールカウンタ)
975 this.n現在のスクロールカウンタ = this.n目標のスクロールカウンタ;
978 else if (this.n現在のスクロールカウンタ > this.n目標のスクロールカウンタ)
980 this.n現在のスクロールカウンタ -= n加速度;
981 if (this.n現在のスクロールカウンタ < this.n目標のスクロールカウンタ)
984 this.n現在のスクロールカウンタ = this.n目標のスクロールカウンタ;
989 #region [ 行超え処理、ならびに目標位置に到達したらスクロールを停止して項目変更通知を発行。]
991 if (this.n現在のスクロールカウンタ >= 100)
993 this.n現在の選択項目 = this.t次の項目(this.n現在の選択項目);
994 this.n現在のスクロールカウンタ -= 100;
995 this.n目標のスクロールカウンタ -= 100;
996 if (this.n目標のスクロールカウンタ == 0)
998 CDTXMania.Instance.stageコンフィグ.t項目変更通知();
1001 else if (this.n現在のスクロールカウンタ <= -100)
1003 this.n現在の選択項目 = this.t前の項目(this.n現在の選択項目);
1004 this.n現在のスクロールカウンタ += 100;
1005 this.n目標のスクロールカウンタ += 100;
1006 if (this.n目標のスクロールカウンタ == 0)
1008 CDTXMania.Instance.stageコンフィグ.t項目変更通知();
1014 this.nスクロール用タイマ値 += INTERVAL;
1019 #region [ ▲印アニメの進行 ]
1020 if (this.b項目リスト側にフォーカスがある && (this.n目標のスクロールカウンタ == 0))
1022 this.ct三角矢印アニメ.t進行Loop();
1029 // メニューにフォーカスがあるなら、項目リストの中央は頭を出さない。
1030 this.ptパネルの基本座標[4].X = this.b項目リスト側にフォーカスがある ? 276 : 301;
1032 #region [ 計11個の項目パネルを描画する。]
1034 int nItem = this.n現在の選択項目;
1035 for (int i = 0; i < 4; i++)
1037 nItem = this.t前の項目(nItem);
1040 for (int n行番号 = -4; n行番号 < 6; n行番号++)
1042 // n行番号 == 0 がフォーカスされている項目パネル。
1043 #region [ 今まさに画面外に飛びだそうとしている項目パネルは描画しない。]
1044 if (((n行番号 == -4) && (this.n現在のスクロールカウンタ > 0)) ||
1045 ((n行番号 == +5) && (this.n現在のスクロールカウンタ < 0)))
1047 nItem = this.t次の項目(nItem);
1052 int n移動元の行の基本位置 = n行番号 + 4;
1053 int n移動先の行の基本位置 = (this.n現在のスクロールカウンタ <= 0) ? ((n移動元の行の基本位置 + 1) % 10) : (((n移動元の行の基本位置 - 1) + 10) % 10);
1054 int x = this.ptパネルの基本座標[n移動元の行の基本位置].X + ((int)((this.ptパネルの基本座標[n移動先の行の基本位置].X - this.ptパネルの基本座標[n移動元の行の基本位置].X) * (((double)Math.Abs(this.n現在のスクロールカウンタ)) / 100.0)));
1055 int y = this.ptパネルの基本座標[n移動元の行の基本位置].Y + ((int)((this.ptパネルの基本座標[n移動先の行の基本位置].Y - this.ptパネルの基本座標[n移動元の行の基本位置].Y) * (((double)Math.Abs(this.n現在のスクロールカウンタ)) / 100.0)));
1057 #region [ 現在の行の項目パネル枠を描画。]
1058 if (this.list項目リスト[nItem].type == EOptionType.Normal)
1060 if (this.tx通常項目行パネル != null)
1062 this.tx通常項目行パネル.t2D描画(CDTXMania.Instance.Device, x * Scale.X, y * Scale.Y);
1065 else if (this.list項目リスト[nItem].type == EOptionType.Other)
1067 if (this.txその他項目行パネル != null)
1069 this.txその他項目行パネル.t2D描画(CDTXMania.Instance.Device, x * Scale.X, y * Scale.Y);
1074 #region [ 現在の行の項目名を描画。]
1075 if (listMenu[nItem].txMenuItemRight != null)
1077 // 自前のキャッシュに含まれているようなら、再レンダリングせずキャッシュを使用
1078 listMenu[nItem].txMenuItemRight.t2D描画(CDTXMania.Instance.Device, (x + 0x12) * Scale.X, (y + 12) * Scale.Y - 20);
1082 using (Bitmap bmpItem = prvFont.DrawPrivateFont(this.list項目リスト[nItem].label, Color.White, Color.Black))
1084 TextureFactory.tテクスチャの解放(ref listMenu[nItem].txMenuItemRight);
1085 listMenu[nItem].txMenuItemRight = TextureFactory.tテクスチャの生成(bmpItem);
1090 #region [ 現在の行の項目の要素を描画。]
1091 string strParam = this.list項目リスト[nItem].ToString();
1094 #region [ 最初にSkinの選択肢にきたとき(Enterを押す前)に限り、サンプル生成が発生する。 #28195 2012.5.2 yyagi ]
1095 if (this.list項目リスト[this.n現在の選択項目] == skins)
1097 if (txSkinSample == null)
1099 tGenerateSkinSample();
1101 if (txSkinSample != null)
1103 txSkinSample.t2D描画(CDTXMania.Instance.Device, 56 * Scale.X, 300 * Scale.Y);
1109 int nIndex = this.list項目リスト[nItem].Index;
1110 bool bColored = list項目リスト[nItem] is COptionInteger && n行番号 == 0 && b要素値にフォーカス中;
1111 if (listMenu[nItem].nParam != nIndex ||
1112 (listMenu[nItem].txParam == null) ||
1113 (bColored && listMenu[nItem].txParamColored == null))
1115 listMenu[nItem].nParam = nIndex;
1116 listMenu[nItem].strParam = this.list項目リスト[nItem].ToString();
1117 using (Bitmap bmpStr = prvFont.DrawPrivateFont(strParam, Color.White, Color.Black))
1119 TextureFactory.tテクスチャの解放(ref listMenu[nItem].txParam);
1120 listMenu[nItem].txParam = TextureFactory.tテクスチャの生成(bmpStr, false);
1123 using (Bitmap bmpStrColored = prvFont.DrawPrivateFont(strParam, Color.White, Color.Black, Color.Yellow, Color.OrangeRed))
1125 TextureFactory.tテクスチャの解放(ref listMenu[nItem].txParamColored);
1126 listMenu[nItem].txParamColored = TextureFactory.tテクスチャの生成(bmpStrColored, false);
1134 listMenu[nItem].txParamColored.t2D描画(CDTXMania.Instance.Device, (x + 210) * Scale.X, (y + 12) * Scale.Y - 20);
1138 listMenu[nItem].txParam.t2D描画(CDTXMania.Instance.Device, (x + 210) * Scale.X, (y + 12) * Scale.Y - 20);
1140 nItem = this.t次の項目(nItem);
1144 #region [ 項目リストにフォーカスがあって、かつスクロールが停止しているなら、パネルの上下に▲印を描画する。]
1145 if (this.b項目リスト側にフォーカスがある && (this.n目標のスクロールカウンタ == 0))
1153 if (this.b要素値にフォーカス中)
1157 y_upper = 198 - this.ct三角矢印アニメ.n現在の値;
1158 y_lower = 242 + this.ct三角矢印アニメ.n現在の値;
1164 y_upper = 186 - this.ct三角矢印アニメ.n現在の値;
1165 y_lower = 254 + this.ct三角矢印アニメ.n現在の値;
1170 if (this.tx三角矢印 != null)
1172 this.tx三角矢印.t2D描画(CDTXMania.Instance.Device, x * Scale.X,
1174 new Rectangle(0, 0, (int)(32 * Scale.X), (int)(16 * Scale.Y)));
1175 this.tx三角矢印.t2D描画(CDTXMania.Instance.Device, x * Scale.X,
1177 new Rectangle(0, (int)(16 * Scale.Y), (int)(32 * Scale.X), (int)(16 * Scale.Y)));
1187 internal enum Eメニュー種別
1193 // #24609 2011.4.12 yyagi: 画面キャプチャキーのアサイン
1208 private int t前の項目(int nItem)
1212 nItem = this.list項目リスト.Count - 1;
1217 private int t次の項目(int nItem)
1219 if (++nItem >= this.list項目リスト.Count)