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.bForceScalingAVI);
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.cdLegacyAVIX.Both);
268 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLegacyAVIY.Both);
269 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLegacyAVIX.DrOnly);
270 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLegacyAVIY.DrOnly);
271 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLegacyAVIX.GBOnly);
272 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLegacyAVIY.GBOnly);
273 //list項目リスト.Add(CDTXMania.Instance.ConfigIni.bForceFullMovieCentering.Both);
274 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdForceScaledMovieX.Both);
275 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdForceScaledMovieY.Both);
276 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdForceScaledMovieW.Both);
277 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdForceScaledMovieH.Both);
278 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdForceScaledMovieX.DrOnly);
279 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdForceScaledMovieY.DrOnly);
280 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdForceScaledMovieW.DrOnly);
281 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdForceScaledMovieH.DrOnly);
282 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdForceScaledMovieX.GBOnly);
283 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdForceScaledMovieY.GBOnly);
284 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdForceScaledMovieW.GBOnly);
285 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdForceScaledMovieH.GBOnly);
286 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nBGAlpha);
287 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nShowLagType);
288 list項目リスト.Add(CDTXMania.Instance.ConfigIni.eJudgePriority);
289 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bShowSongPath);
290 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bDebugInfo);
292 else if (eMenu == Eメニュー種別.DisplayDrums)
294 list項目リスト.Add(ReturnToMenu.Drums);
295 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdInstX.Drums.Both);
296 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdInstX.Drums.DrOnly);
297 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdComboX.Drums.Both);
298 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdComboX.Drums.DrOnly);
299 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdJudgeLineY.Drums);
300 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdJudgeY.Drums);
301 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLaneOrder.LC);
302 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLaneOrder.HH);
303 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLaneOrder.SD);
304 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLaneOrder.BD);
305 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLaneOrder.HT);
306 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLaneOrder.LT);
307 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLaneOrder.FT);
308 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLaneOrder.CY);
309 list項目リスト.Add(CDTXMania.Instance.ConfigIni.eSudHidInv.Drums);
310 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bReverse.Drums);
311 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bDisplayCombo.Drums); // 112追加
312 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nMinComboDisp.Drums);
313 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bDisplayJudge.Drums); // 112追加
314 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bGraph.Drums);
316 else if (eMenu == Eメニュー種別.DisplayGuitar)
318 list項目リスト.Add(ReturnToMenu.Guitar);
319 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdInstX.Guitar.Both);
320 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdInstX.Guitar.GBOnly);
321 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdComboX.Guitar.Both);
322 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdComboX.Guitar.GBOnly);
323 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdJudgeLineY.Guitar);
324 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdJudgeY.Guitar);
325 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLaneOrder.GtR);
326 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLaneOrder.GtG);
327 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLaneOrder.GtB);
328 list項目リスト.Add(CDTXMania.Instance.ConfigIni.eSudHidInv.Guitar);
329 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bReverse.Guitar);
330 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bDisplayCombo.Guitar); // 112追加
331 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nMinComboDisp.Guitar);
332 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bDisplayJudge.Guitar); // 112追加
333 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bGraph.Guitar);
335 else if (eMenu == Eメニュー種別.DisplayBass)
337 list項目リスト.Add(ReturnToMenu.Bass);
338 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdInstX.Bass.Both);
339 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdInstX.Bass.GBOnly);
340 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdComboX.Bass.Both);
341 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdComboX.Bass.GBOnly);
342 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdJudgeLineY.Bass);
343 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdJudgeY.Bass);
344 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLaneOrder.BsR);
345 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLaneOrder.BsG);
346 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLaneOrder.BsB);
347 list項目リスト.Add(CDTXMania.Instance.ConfigIni.eSudHidInv.Bass);
348 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bReverse.Bass);
349 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bDisplayCombo.Bass); // 112追加
350 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nMinComboDisp.Bass);
351 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bDisplayJudge.Bass); // 112追加
352 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bGraph.Bass);
354 else if (eMenu == Eメニュー種別.EDrumsSettings)
356 list項目リスト.Add(ReturnToMenu.Drums);
357 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nVelocityMin.LC);
358 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nVelocityMin.HH);
359 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nVelocityMin.SD);
360 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nVelocityMin.BD);
361 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nVelocityMin.HT);
362 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nVelocityMin.LT);
363 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nVelocityMin.FT);
364 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nVelocityMin.CY);
365 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nVelocityMin.RD);
367 else if (eMenu == Eメニュー種別.HitRangeSettings)
369 list項目リスト.Add(ReturnToMenu.System);
370 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nHitRange.Perfect);
371 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nHitRange.Great);
372 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nHitRange.Good);
373 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nHitRange.Poor);
375 else if (eMenu == Eメニュー種別.KeyAssignSystem)
377 list項目リスト.Add(ReturnToMenu.System);
378 list項目リスト.Add(PadNotifier(EPad.Capture, cr.Label("strCfgKeyAssignCapture"), cr.Explanation("strCfgKeyAssignCapture") ));
379 list項目リスト.Add(PadNotifier(EPad.Up, cr.Label("strCfgKeyAssignUp"), cr.Explanation("strCfgKeyAssignUp")));
380 list項目リスト.Add(PadNotifier(EPad.Down, cr.Label("strCfgKeyAssignDown"), cr.Explanation("strCfgKeyAssignDown")));
382 else if (eMenu == Eメニュー種別.KeyAssignDrums)
384 list項目リスト.Add(ReturnToMenu.Drums);
385 list項目リスト.Add(PadNotifier(EPad.LC, cr.Label("strCfgKeyAssignLC"), cr.Explanation("strCfgKeyAssignLC") ));
386 list項目リスト.Add(PadNotifier(EPad.HH, cr.Label("strCfgKeyAssignHH"), cr.Explanation("strCfgKeyAssignHH") ));
387 list項目リスト.Add(PadNotifier(EPad.HHO,cr.Label("strCfgKeyAssignHHO"), cr.Explanation("strCfgKeyAssignHHO") ));
388 list項目リスト.Add(PadNotifier(EPad.SD, cr.Label("strCfgKeyAssignSD"), cr.Explanation("strCfgKeyAssignSD") ));
389 list項目リスト.Add(PadNotifier(EPad.BD, cr.Label("strCfgKeyAssignBD"), cr.Explanation("strCfgKeyAssignBD") ));
390 list項目リスト.Add(PadNotifier(EPad.HT, cr.Label("strCfgKeyAssignHT"), cr.Explanation("strCfgKeyAssignHT") ));
391 list項目リスト.Add(PadNotifier(EPad.LT, cr.Label("strCfgKeyAssignLT"), cr.Explanation("strCfgKeyAssignLT") ));
392 list項目リスト.Add(PadNotifier(EPad.FT, cr.Label("strCfgKeyAssignFT"), cr.Explanation("strCfgKeyAssignFT") ));
393 list項目リスト.Add(PadNotifier(EPad.CY, cr.Label("strCfgKeyAssignCY"), cr.Explanation("strCfgKeyAssignCY") ));
394 list項目リスト.Add(PadNotifier(EPad.RD, cr.Label("strCfgKeyAssignRD"), cr.Explanation("strCfgKeyAssignRD") ));
395 list項目リスト.Add(PadNotifier(EPad.HP, cr.Label("strCfgKeyAssignHP"), cr.Explanation("strCfgKeyAssignHP") ));
396 list項目リスト.Add(CDTXMania.Instance.ConfigIni.eHHGroup);
397 list項目リスト.Add(CDTXMania.Instance.ConfigIni.eFTGroup);
398 list項目リスト.Add(CDTXMania.Instance.ConfigIni.eCYGroup);
399 list項目リスト.Add(CDTXMania.Instance.ConfigIni.eBDGroup);
400 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bCymbalFree);
401 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nInputAdjustTimeMs.Drums);
403 else if (eMenu == Eメニュー種別.KeyAssignGuitar)
405 list項目リスト.Add(ReturnToMenu.Guitar);
406 list項目リスト.Add(PadNotifier(EPad.GtR, cr.Label("strCfgKeyAssignGtR"), cr.Explanation("strCfgKeyAssignGtR") ));
407 list項目リスト.Add(PadNotifier(EPad.GtG, cr.Label("strCfgKeyAssignGtG"), cr.Explanation("strCfgKeyAssignGtG") ));
408 list項目リスト.Add(PadNotifier(EPad.GtB, cr.Label("strCfgKeyAssignGtB"), cr.Explanation("strCfgKeyAssignGtB") ));
409 list項目リスト.Add(PadNotifier(EPad.GtPick, cr.Label("strCfgKeyAssignGtPick"), cr.Explanation("strCfgKeyAssignGtPick") ));
410 list項目リスト.Add(PadNotifier(EPad.GtWail, cr.Label("strCfgKeyAssignGtWailing"), cr.Explanation("strCfgKeyAssignGtWailing") ));
411 list項目リスト.Add(PadNotifier(EPad.GtDecide, cr.Label("strCfgKeyAssignGtDecide"), cr.Explanation("strCfgKeyAssignGtDecide") ));
412 list項目リスト.Add(PadNotifier(EPad.GtCancel, cr.Label("strCfgKeyAssignGtCancel"), cr.Explanation("strCfgKeyAssignGtCancel") ));
413 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nInputAdjustTimeMs.Guitar);
415 else if (eMenu == Eメニュー種別.KeyAssignBass)
417 list項目リスト.Add(ReturnToMenu.Bass);
418 list項目リスト.Add(PadNotifier(EPad.BsR, cr.Label("strCfgKeyAssignBsR"), cr.Explanation("strCfgKeyAssignBsR") ));
419 list項目リスト.Add(PadNotifier(EPad.BsG, cr.Label("strCfgKeyAssignBsG"), cr.Explanation("strCfgKeyAssignBsG") ));
420 list項目リスト.Add(PadNotifier(EPad.BsB, cr.Label("strCfgKeyAssignBsB"), cr.Explanation("strCfgKeyAssignBsB") ));
421 list項目リスト.Add(PadNotifier(EPad.BsPick, cr.Label("strCfgKeyAssignBsPick"), cr.Explanation("strCfgKeyAssignBsPick") ));
422 list項目リスト.Add(PadNotifier(EPad.BsWail, cr.Label("strCfgKeyAssignBsWailing"), cr.Explanation("strCfgKeyAssignBsWailing") ));
423 list項目リスト.Add(PadNotifier(EPad.BsDecide, cr.Label("strCfgKeyAssignBsDecide"), cr.Explanation("strCfgKeyAssignBsDecide") ));
424 list項目リスト.Add(PadNotifier(EPad.BsCancel, cr.Label("strCfgKeyAssignBsCancel"), cr.Explanation("strCfgKeyAssignBsCancel") ));
425 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nInputAdjustTimeMs.Bass);
427 else if (eMenu == Eメニュー種別.System)
429 list項目リスト.Add(ReturnToMenu.System);
430 COptionStringList langlist = new COptionStringList("default");
431 langlist.Initialize( "strCfgLanguage", cr.LanguageDispList );
432 langlist.Index = CDTXMania.Instance.Resources.LanguageCodeIndex;
433 langlist.OnEnterDelegate = () =>
435 int index = langlist.Index;
436 CDTXMania.Instance.ConfigIni.strLanguage.Value = CDTXMania.Instance.Resources.Language = CDTXMania.Instance.Resources.LanguageCodeList[ index ];
439 list項目リスト.Add( langlist );
441 COptionString enumsongs = new COptionString("");
442 enumsongs.Initialize( "strCfgSysEnumSongs" );
443 list項目リスト.Add(enumsongs);
444 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bEnumerateSongsInBoot);
445 list項目リスト.Add(CDTXMania.Instance.ConfigIni.eDark);
446 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nRisky);
447 list項目リスト.Add(CDTXMania.Instance.ConfigIni.eActiveInst);
448 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nPlaySpeed);
449 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nSleepPerFrameMs);
450 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nSleepUnfocusMs);
451 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bForceHighPowerPlan);
452 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bStageFailed);
453 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bRandSubBox);
454 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nPreSoundWeightMs);
455 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nPreImageWeightMs);
456 list項目リスト.Add(CDTXMania.Instance.ConfigIni.eDamageLevel);
457 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bScoreIni);
458 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nChipVolume);
459 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nAutoVolume);
460 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bStoicMode);
461 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bIsAutoResultCapture);
462 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bBufferedInput);
463 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bLog);
464 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bLogEnumerateSongs);
465 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bLogCreateRelease);
466 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bLogDTX);
467 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bLoadSoundSpeed);
468 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bLoadDTXDetail);// #36177 2016.7.30 ikanick
469 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bUseBoxDefSkin);
470 list項目リスト.Add(skins);
471 list項目リスト.Add(SoundMenu);
472 list項目リスト.Add(DisplayMenu.System);
473 list項目リスト.Add(HitRangeMenu);
474 list項目リスト.Add(KeyAssignMenu.System);
475 enumsongs.OnEnterDelegate = () =>
477 if (CDTXMania.Instance.EnumSongs.IsEnumerating)
479 // Debug.WriteLine( "バックグラウンドでEnumeratingSongs中だったので、一旦中断します。" );
480 CDTXMania.Instance.EnumSongs.Abort();
481 CDTXMania.Instance.actEnumSongs.On非活性化();
484 CDTXMania.Instance.EnumSongs.StartEnumFromDisk();
485 CDTXMania.Instance.EnumSongs.ChangeEnumeratePriority(ThreadPriority.Normal);
486 CDTXMania.Instance.actEnumSongs.bコマンドでの曲データ取得 = true;
487 CDTXMania.Instance.actEnumSongs.On活性化();
490 else if ( eMenu == Eメニュー種別.SoundSettings )
492 list項目リスト.Add( ReturnToMenu.System );
493 list項目リスト.Add( CDTXMania.Instance.ConfigIni.bTimeStretch );
494 list項目リスト.Add( CDTXMania.Instance.ConfigIni.bWaveAdjust );
495 list項目リスト.Add( CDTXMania.Instance.ConfigIni.bBGMPlay );
496 list項目リスト.Add( CDTXMania.Instance.ConfigIni.bAudience );
497 list項目リスト.Add( CDTXMania.Instance.ConfigIni.nChipVolume );
498 list項目リスト.Add( CDTXMania.Instance.ConfigIni.nAutoVolume );
499 list項目リスト.Add( CDTXMania.Instance.ConfigIni.nSoundDeviceType );
500 list項目リスト.Add( CDTXMania.Instance.ConfigIni.nWASAPIBufferSizeMs );
501 list項目リスト.Add( CDTXMania.Instance.ConfigIni.bEventDrivenWASAPI );
502 list項目リスト.Add( CDTXMania.Instance.ConfigIni.strASIODevice );
503 list項目リスト.Add( CDTXMania.Instance.ConfigIni.bUseOSTimer );
504 list項目リスト.Add( CDTXMania.Instance.ConfigIni.bDynamicBassMixerManagement );
505 list項目リスト.Add( CDTXMania.Instance.ConfigIni.nMasterVolume );
506 list項目リスト.Add( CDTXMania.Instance.ConfigIni.nPolyphonicSounds );
507 list項目リスト.Add( CDTXMania.Instance.ConfigIni.nPolyphonicSoundsGB );
508 list項目リスト.Add( CDTXMania.Instance.ConfigIni.eClickType );
509 list項目リスト.Add( CDTXMania.Instance.ConfigIni.nClickHighVolume );
510 list項目リスト.Add( CDTXMania.Instance.ConfigIni.nClickLowVolume );
512 else if ( eMenu == Eメニュー種別.Drums )
514 list項目リスト.Add(ReturnToMenu.Drums);
515 COptionEnum<EThreeState> AllAuto = new COptionEnum<EThreeState>(EThreeState.X);
516 AllAuto.Initialize( "strCfgDrAllAuto", typeof(EThreeState));
517 AllAuto.OnEnterDelegate = () =>
519 if ( AllAuto.Value == EThreeState.X )
523 CDTXMania.Instance.ConfigIni.bAutoPlay.Set( EPart.Drums, AllAuto );
525 list項目リスト.Add(AllAuto);
526 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.LC);
527 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.HH);
528 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.HHO);
529 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.SD);
530 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.BD);
531 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.HT);
532 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.LT);
533 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.FT);
534 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.CY);
535 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.RD);
536 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nScrollSpeed.Drums);
537 list項目リスト.Add(CDTXMania.Instance.ConfigIni.eHitSoundPriorityHH);
538 list項目リスト.Add(CDTXMania.Instance.ConfigIni.eHitSoundPriorityFT);
539 list項目リスト.Add(CDTXMania.Instance.ConfigIni.eHitSoundPriorityCY);
540 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bTight);
541 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bFillin);
542 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bDrumsHitSound);
543 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nStrictHitSoundRange);
544 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bEmphasizePlaySound.Drums);
545 list項目リスト.Add(DisplayMenu.Drums);
546 list項目リスト.Add(EDrumsMenu.Drums);
547 list項目リスト.Add(KeyAssignMenu.Drums);
549 else if (eMenu == Eメニュー種別.Guitar)
551 list項目リスト.Add(ReturnToMenu.Guitar);
552 COptionEnum<EThreeState> AllAuto = new COptionEnum<EThreeState>(EThreeState.X);
553 AllAuto.Initialize( "strCfgDrAllAuto", typeof(EThreeState));
554 AllAuto.OnEnterDelegate = () =>
556 if ( AllAuto.Value == EThreeState.X )
560 CDTXMania.Instance.ConfigIni.bAutoPlay.Set( EPart.Guitar, AllAuto );
562 list項目リスト.Add(AllAuto);
563 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.GtR);
564 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.GtG);
565 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.GtB);
566 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.GtPick);
567 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.GtWail);
568 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nScrollSpeed.Guitar);
569 list項目リスト.Add(CDTXMania.Instance.ConfigIni.eRandom.Guitar);
570 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bLight.Guitar);
571 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bEmphasizePlaySound.Guitar);
572 list項目リスト.Add(DisplayMenu.Guitar);
573 list項目リスト.Add(KeyAssignMenu.Guitar);
575 else if (eMenu == Eメニュー種別.Bass)
577 list項目リスト.Add(ReturnToMenu.Bass);
578 COptionEnum<EThreeState> AllAuto = new COptionEnum<EThreeState>(EThreeState.X);
579 AllAuto.Initialize( "strCfgDrAllAuto", typeof(EThreeState));
580 AllAuto.OnEnterDelegate = () =>
582 if ( AllAuto.Value == EThreeState.X )
586 CDTXMania.Instance.ConfigIni.bAutoPlay.Set( EPart.Bass, AllAuto );
588 list項目リスト.Add(AllAuto);
589 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.BsR);
590 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.BsG);
591 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.BsB);
592 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.BsPick);
593 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.BsWail);
594 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nScrollSpeed.Bass);
595 list項目リスト.Add(CDTXMania.Instance.ConfigIni.eRandom.Bass);
596 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bLight.Bass);
597 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bEmphasizePlaySound.Bass);
598 list項目リスト.Add(DisplayMenu.Bass);
599 list項目リスト.Add(KeyAssignMenu.Bass);
608 CDTXMania.Instance.Skin.soundカーソル移動音.t再生する();
611 list項目リスト[n現在の選択項目].OnPrevious();
616 n目標のスクロールカウンタ += 100;
620 public void OnPrevious()
622 CDTXMania.Instance.Skin.soundカーソル移動音.t再生する();
625 list項目リスト[n現在の選択項目].OnNext();
630 n目標のスクロールカウンタ -= 100;
634 private void t要素値を上下に変更中の処理()
636 if (this.list項目リスト[this.n現在の選択項目] == CDTXMania.Instance.ConfigIni.nMasterVolume)
638 // #33700 2014.4.26 yyagi
639 CDTXMania.Instance.Sound管理.nMasterVolume = CDTXMania.Instance.ConfigIni.nMasterVolume;
643 public override void On活性化()
647 this.list項目リスト = new List<COptionBase>();
648 this.eメニュー種別 = Eメニュー種別.Unknown;
650 CResources cr = CDTXMania.Instance.Resources;
651 string fontname = cr.Explanation("strCfgConfigurationItemsFontFileName");
652 string path = Path.Combine(@"Graphics\fonts", fontname);
653 this.prvFont = new CPrivateFastFont(CSkin.Path(path), (int)(18 * Scale.Y));
654 this.b要素値にフォーカス中 = false;
655 this.n目標のスクロールカウンタ = 0;
656 this.n現在のスクロールカウンタ = 0;
657 this.nスクロール用タイマ値 = -1;
658 this.ct三角矢印アニメ = new CCounter();
661 DisplayMenu = new STDGBSValue<COptionLabel>();
662 KeyAssignMenu = new STDGBSValue<COptionLabel>();
663 EDrumsMenu = new STDGBSValue<COptionLabel>();
664 ReturnToMenu = new STDGBSValue<COptionLabel>();
666 //CResources cr = CDTXMania.Instance.Resources;
667 for ( EPart i = EPart.Drums; i <= EPart.System; ++i )
669 DisplayMenu[i] = new COptionLabel( "strCfgDisplayOption" );
670 KeyAssignMenu[i] = new COptionLabel( "strCfgInputOption" );
671 ReturnToMenu[i] = new COptionLabel( "strCfgReturnToMenu" );
674 EDrumsMenu[ EPart.Drums ] = new COptionLabel( "strCfgEDrumsOption" );
675 HitRangeMenu = new COptionLabel( "strCfgHitRangeOption" );
676 SoundMenu = new COptionLabel( "strCfgSoundOption" );
678 DisplayMenu.Drums.OnEnterDelegate = () =>
680 t項目リストの設定(Eメニュー種別.DisplayDrums);
682 DisplayMenu.Guitar.OnEnterDelegate = () =>
684 t項目リストの設定(Eメニュー種別.DisplayGuitar);
686 DisplayMenu.Bass.OnEnterDelegate = () =>
688 t項目リストの設定(Eメニュー種別.DisplayBass);
690 DisplayMenu.System.OnEnterDelegate = () =>
692 t項目リストの設定(Eメニュー種別.DisplaySystem);
694 KeyAssignMenu.Drums.OnEnterDelegate = () =>
696 t項目リストの設定(Eメニュー種別.KeyAssignDrums);
698 KeyAssignMenu.Guitar.OnEnterDelegate = () =>
700 t項目リストの設定(Eメニュー種別.KeyAssignGuitar);
702 KeyAssignMenu.Bass.OnEnterDelegate = () =>
704 t項目リストの設定(Eメニュー種別.KeyAssignBass);
706 KeyAssignMenu.System.OnEnterDelegate = () =>
708 t項目リストの設定(Eメニュー種別.KeyAssignSystem);
711 ReturnToMenu.Drums.OnEnterDelegate = () =>
713 t項目リストの設定(Eメニュー種別.Drums);
715 ReturnToMenu.Guitar.OnEnterDelegate = () =>
717 t項目リストの設定(Eメニュー種別.Guitar);
719 ReturnToMenu.Bass.OnEnterDelegate = () =>
721 t項目リストの設定(Eメニュー種別.Bass);
723 ReturnToMenu.System.OnEnterDelegate = () =>
725 t項目リストの設定(Eメニュー種別.System);
727 EDrumsMenu.Drums.OnEnterDelegate = () =>
729 t項目リストの設定(Eメニュー種別.EDrumsSettings);
731 HitRangeMenu.OnEnterDelegate = () =>
733 t項目リストの設定( Eメニュー種別.HitRangeSettings );
735 SoundMenu.OnEnterDelegate = () =>
737 t項目リストの設定( Eメニュー種別.SoundSettings );
740 #region [ スキン選択肢と、現在選択中のスキン(index)の準備 #28195 2012.5.2 yyagi ]
741 int ns = (CDTXMania.Instance.Skin.strSystemSkinSubfolders == null) ? 0 : CDTXMania.Instance.Skin.strSystemSkinSubfolders.Length;
742 int nb = (CDTXMania.Instance.Skin.strBoxDefSkinSubfolders == null) ? 0 : CDTXMania.Instance.Skin.strBoxDefSkinSubfolders.Length;
744 skinSubFolders = new string[ns + nb];
745 skinInitial = CDTXMania.Instance.Skin.GetCurrentSkinSubfolderFullName(true);
747 for (int i = 0; i < ns; i++)
749 skinSubFolders[i] = CDTXMania.Instance.Skin.strSystemSkinSubfolders[i];
751 for (int i = 0; i < nb; i++)
753 skinSubFolders[ns + i] = CDTXMania.Instance.Skin.strBoxDefSkinSubfolders[i];
755 Array.Sort(skinSubFolders);
756 skinNames = CSkin.GetSkinName(skinSubFolders);
757 initIdx = Array.BinarySearch(skinSubFolders, skinInitial);
762 skins = new COptionStringList(skinNames[initIdx]);
763 skins.Initialize("Skin", Properties.Resources.strCfgSysSkin, skinNames);
765 skins.OnEnterDelegate = () =>
767 CDTXMania.Instance.Skin.SetCurrentSkinSubfolderFullName(skinSubFolders[skins.Index], true);
768 CDTXMania.Instance.ConfigIni.strSystemSkinSubfolderPath.Value = skinSubFolders[skins.Index];
769 tGenerateSkinSample();
773 // CONFIG脱出時にこの値から変更されているようなら
775 this.InitialSystemSoundType = CDTXMania.Instance.ConfigIni.nSoundDeviceType;
776 this.InitialWASAPIBufferSizeMs = CDTXMania.Instance.ConfigIni.nWASAPIBufferSizeMs;
777 this.InitialASIODevice = CDTXMania.Instance.ConfigIni.strASIODevice.Index;
778 this.InitialUseOSTimer = CDTXMania.Instance.ConfigIni.bUseOSTimer;
779 this.InitialWASAPIEventDriven = CDTXMania.Instance.ConfigIni.bEventDrivenWASAPI;
781 this.InitialForceHighPower = CDTXMania.Instance.ConfigIni.bForceHighPowerPlan;
783 // #27795 2012.3.11 yyagi; System設定の中でDrumsの設定を参照しているため、
784 this.t項目リストの設定(Eメニュー種別.Bass);
785 // 活性化の時点でDrumsの設定も入れ込んでおかないと、System設定中に例外発生することがある。
786 this.t項目リストの設定(Eメニュー種別.Guitar);
787 this.t項目リストの設定(Eメニュー種別.Drums);
788 // 順番として、最後にSystemを持ってくること。設定一覧の初期位置がSystemのため。
789 this.t項目リストの設定(Eメニュー種別.System);
795 public override void On非活性化()
799 CDTXMania.Instance.SaveConfig();
800 this.list項目リスト.Clear();
801 this.ct三角矢印アニメ = null;
808 if (CDTXMania.Instance.Skin.GetCurrentSkinSubfolderFullName(true) != this.skinInitial)
810 CDTXMania.Instance.stageChangeSkin.tChangeSkinMain(); // #28195 2012.6.11 yyagi CONFIG脱出時にSkin更新
814 // #24820 2013.1.22 yyagi CONFIGでWASAPI/ASIO/DirectSound関連の設定を変更した場合、サウンドデバイスを再構築する。
815 // #33689 2014.6.17 yyagi CONFIGでSoundTimerTypeの設定を変更した場合も、サウンドデバイスを再構築する。
816 #region [ サウンドデバイス変更 ]
817 if (InitialSystemSoundType != CDTXMania.Instance.ConfigIni.nSoundDeviceType ||
818 InitialWASAPIBufferSizeMs != CDTXMania.Instance.ConfigIni.nWASAPIBufferSizeMs ||
819 InitialASIODevice != CDTXMania.Instance.ConfigIni.strASIODevice.Index ||
820 InitialUseOSTimer != CDTXMania.Instance.ConfigIni.bUseOSTimer ||
821 InitialWASAPIEventDriven != CDTXMania.Instance.ConfigIni.bEventDrivenWASAPI )
823 ESoundDeviceType soundDeviceType;
824 switch (CDTXMania.Instance.ConfigIni.nSoundDeviceType.Value)
826 case ESoundDeviceTypeForConfig.DSound:
827 soundDeviceType = ESoundDeviceType.DirectSound;
829 case ESoundDeviceTypeForConfig.ASIO:
830 soundDeviceType = ESoundDeviceType.ASIO;
832 case ESoundDeviceTypeForConfig.WASAPI_Exclusive:
833 soundDeviceType = ESoundDeviceType.ExclusiveWASAPI;
835 case ESoundDeviceTypeForConfig.WASAPI_Shared:
836 soundDeviceType = ESoundDeviceType.SharedWASAPI;
839 soundDeviceType = ESoundDeviceType.Unknown;
843 CDTXMania.Instance.Sound管理.t初期化(
845 CDTXMania.Instance.ConfigIni.nWASAPIBufferSizeMs,
846 CDTXMania.Instance.ConfigIni.bEventDrivenWASAPI,
848 CDTXMania.Instance.ConfigIni.strASIODevice.Index,
849 CDTXMania.Instance.ConfigIni.bUseOSTimer);
850 CDTXMania.Instance.ShowWindowTitleWithSoundType();
854 #region [ メトロノーム音 音量設定 ]
855 CDTXMania.Instance.Skin.soundClickHigh.n音量 = CDTXMania.Instance.ConfigIni.nClickHighVolume;
856 CDTXMania.Instance.Skin.soundClickLow.n音量 = CDTXMania.Instance.ConfigIni.nClickLowVolume;
857 CDTXMania.Instance.Skin.soundClickBottom.n音量 = CDTXMania.Instance.ConfigIni.nClickLowVolume;
860 #region [ サウンドのタイムストレッチモード変更 ]
862 FDK.CSound管理.bIsTimeStretch = CDTXMania.Instance.ConfigIni.bTimeStretch.Value;
866 if ( CDTXMania.Instance.ConfigIni.bForceHighPowerPlan )
868 CPowerPlan.ChangeHighPerformance();
872 // HighPower=OFFを維持したとき、またはONからOFFにしたときは、
874 // 電源プランの復元は、アプリ終了時に行う。
875 // CPowerPlan.RestoreCurrentPowerPlan();
881 public override void OnManagedリソースの作成()
885 this.tx通常項目行パネル = TextureFactory.tテクスチャの生成Af(CSkin.Path(@"Graphics\ScreenConfig itembox.png"), false);
886 this.txその他項目行パネル = TextureFactory.tテクスチャの生成Af(CSkin.Path(@"Graphics\ScreenConfig itembox other.png"), false);
887 this.tx三角矢印 = TextureFactory.tテクスチャの生成(CSkin.Path(@"Graphics\ScreenConfig triangle arrow.png"), false);
888 // スキン選択時に動的に設定するため、ここでは初期化しない
889 this.txSkinSample = null;
891 base.OnManagedリソースの作成();
895 public override void OnManagedリソースの解放()
899 TextureFactory.tテクスチャの解放(ref this.txSkinSample);
900 TextureFactory.tテクスチャの解放(ref this.tx通常項目行パネル);
901 TextureFactory.tテクスチャの解放(ref this.txその他項目行パネル);
902 TextureFactory.tテクスチャの解放(ref this.tx三角矢印);
906 base.OnManagedリソースの解放();
910 private void OnListMenuの初期化()
913 this.listMenu = new stMenuItemRight[this.list項目リスト.Count];
917 /// 事前にレンダリングしておいたテクスチャを解放する。
919 private void OnListMenuの解放()
921 if (listMenu != null)
923 for (int i = 0; i < listMenu.Length; i++)
925 TextureFactory.tテクスチャの解放(ref listMenu[i].txParam);
926 TextureFactory.tテクスチャの解放(ref listMenu[i].txParamColored);
927 TextureFactory.tテクスチャの解放(ref listMenu[i].txMenuItemRight);
929 this.listMenu = null;
933 public override int On進行描画()
935 throw new InvalidOperationException("t進行描画(bool)のほうを使用してください。");
938 public int t進行描画(bool b項目リスト側にフォーカスがある)
946 this.nスクロール用タイマ値 = CSound管理.rc演奏用タイマ.n現在時刻;
947 this.ct三角矢印アニメ.t開始(0, 9, 50, CDTXMania.Instance.Timer);
949 base.b初めての進行描画 = false;
954 this.b項目リスト側にフォーカスがある = b項目リスト側にフォーカスがある; // 記憶
956 #region [ 項目スクロールの進行 ]
958 long n現在時刻 = CDTXMania.Instance.Timer.n現在時刻;
959 if (n現在時刻 < this.nスクロール用タイマ値) this.nスクロール用タイマ値 = n現在時刻;
961 const int INTERVAL = 2; // [ms]
962 while ((n現在時刻 - this.nスクロール用タイマ値) >= INTERVAL)
964 int n目標項目までのスクロール量 = Math.Abs((int)(this.n目標のスクロールカウンタ - this.n現在のスクロールカウンタ));
967 #region [ n加速度の決定;目標まで遠いほど加速する。]
969 if (n目標項目までのスクロール量 <= 100)
973 else if (n目標項目までのスクロール量 <= 300)
977 else if (n目標項目までのスクロール量 <= 500)
987 #region [ this.n現在のスクロールカウンタに n加速度 を加減算。]
989 if (this.n現在のスクロールカウンタ < this.n目標のスクロールカウンタ)
991 this.n現在のスクロールカウンタ += n加速度;
992 if (this.n現在のスクロールカウンタ > this.n目標のスクロールカウンタ)
995 this.n現在のスクロールカウンタ = this.n目標のスクロールカウンタ;
998 else if (this.n現在のスクロールカウンタ > this.n目標のスクロールカウンタ)
1000 this.n現在のスクロールカウンタ -= n加速度;
1001 if (this.n現在のスクロールカウンタ < this.n目標のスクロールカウンタ)
1004 this.n現在のスクロールカウンタ = this.n目標のスクロールカウンタ;
1009 #region [ 行超え処理、ならびに目標位置に到達したらスクロールを停止して項目変更通知を発行。]
1011 if (this.n現在のスクロールカウンタ >= 100)
1013 this.n現在の選択項目 = this.t次の項目(this.n現在の選択項目);
1014 this.n現在のスクロールカウンタ -= 100;
1015 this.n目標のスクロールカウンタ -= 100;
1016 if (this.n目標のスクロールカウンタ == 0)
1018 CDTXMania.Instance.stageコンフィグ.t項目変更通知();
1021 else if (this.n現在のスクロールカウンタ <= -100)
1023 this.n現在の選択項目 = this.t前の項目(this.n現在の選択項目);
1024 this.n現在のスクロールカウンタ += 100;
1025 this.n目標のスクロールカウンタ += 100;
1026 if (this.n目標のスクロールカウンタ == 0)
1028 CDTXMania.Instance.stageコンフィグ.t項目変更通知();
1034 this.nスクロール用タイマ値 += INTERVAL;
1039 #region [ ▲印アニメの進行 ]
1040 if (this.b項目リスト側にフォーカスがある && (this.n目標のスクロールカウンタ == 0))
1042 this.ct三角矢印アニメ.t進行Loop();
1049 // メニューにフォーカスがあるなら、項目リストの中央は頭を出さない。
1050 this.ptパネルの基本座標[4].X = this.b項目リスト側にフォーカスがある ? 276 : 301;
1052 #region [ 計11個の項目パネルを描画する。]
1054 int nItem = this.n現在の選択項目;
1055 for (int i = 0; i < 4; i++)
1057 nItem = this.t前の項目(nItem);
1060 for (int n行番号 = -4; n行番号 < 6; n行番号++)
1062 // n行番号 == 0 がフォーカスされている項目パネル。
1063 #region [ 今まさに画面外に飛びだそうとしている項目パネルは描画しない。]
1064 if (((n行番号 == -4) && (this.n現在のスクロールカウンタ > 0)) ||
1065 ((n行番号 == +5) && (this.n現在のスクロールカウンタ < 0)))
1067 nItem = this.t次の項目(nItem);
1072 int n移動元の行の基本位置 = n行番号 + 4;
1073 int n移動先の行の基本位置 = (this.n現在のスクロールカウンタ <= 0) ? ((n移動元の行の基本位置 + 1) % 10) : (((n移動元の行の基本位置 - 1) + 10) % 10);
1074 int x = this.ptパネルの基本座標[n移動元の行の基本位置].X + ((int)((this.ptパネルの基本座標[n移動先の行の基本位置].X - this.ptパネルの基本座標[n移動元の行の基本位置].X) * (((double)Math.Abs(this.n現在のスクロールカウンタ)) / 100.0)));
1075 int y = this.ptパネルの基本座標[n移動元の行の基本位置].Y + ((int)((this.ptパネルの基本座標[n移動先の行の基本位置].Y - this.ptパネルの基本座標[n移動元の行の基本位置].Y) * (((double)Math.Abs(this.n現在のスクロールカウンタ)) / 100.0)));
1077 #region [ 現在の行の項目パネル枠を描画。]
1078 if (this.list項目リスト[nItem].type == EOptionType.Normal)
1080 if (this.tx通常項目行パネル != null)
1082 this.tx通常項目行パネル.t2D描画(CDTXMania.Instance.Device, x * Scale.X, y * Scale.Y);
1085 else if (this.list項目リスト[nItem].type == EOptionType.Other)
1087 if (this.txその他項目行パネル != null)
1089 this.txその他項目行パネル.t2D描画(CDTXMania.Instance.Device, x * Scale.X, y * Scale.Y);
1094 #region [ 現在の行の項目名を描画。]
1095 if (listMenu[nItem].txMenuItemRight != null)
1097 // 自前のキャッシュに含まれているようなら、再レンダリングせずキャッシュを使用
1098 listMenu[nItem].txMenuItemRight.t2D描画(CDTXMania.Instance.Device, (x + 0x12) * Scale.X, (y + 12) * Scale.Y - 20);
1102 using (Bitmap bmpItem = prvFont.DrawPrivateFont(this.list項目リスト[nItem].label, Color.White, Color.Black))
1104 TextureFactory.tテクスチャの解放(ref listMenu[nItem].txMenuItemRight);
1105 listMenu[nItem].txMenuItemRight = TextureFactory.tテクスチャの生成(bmpItem);
1110 #region [ 現在の行の項目の要素を描画。]
1111 string strParam = this.list項目リスト[nItem].ToString();
1114 #region [ 最初にSkinの選択肢にきたとき(Enterを押す前)に限り、サンプル生成が発生する。 #28195 2012.5.2 yyagi ]
1115 if (this.list項目リスト[this.n現在の選択項目] == skins)
1117 if (txSkinSample == null)
1119 tGenerateSkinSample();
1121 if (txSkinSample != null)
1123 txSkinSample.t2D描画(CDTXMania.Instance.Device, 56 * Scale.X, 300 * Scale.Y);
1129 int nIndex = this.list項目リスト[nItem].Index;
1130 bool bColored = list項目リスト[nItem] is COptionInteger && n行番号 == 0 && b要素値にフォーカス中;
1131 if (listMenu[nItem].nParam != nIndex ||
1132 (listMenu[nItem].txParam == null) ||
1133 (bColored && listMenu[nItem].txParamColored == null))
1135 listMenu[nItem].nParam = nIndex;
1136 listMenu[nItem].strParam = this.list項目リスト[nItem].ToString();
1137 using (Bitmap bmpStr = prvFont.DrawPrivateFont(strParam, Color.White, Color.Black))
1139 TextureFactory.tテクスチャの解放(ref listMenu[nItem].txParam);
1140 listMenu[nItem].txParam = TextureFactory.tテクスチャの生成(bmpStr, false);
1143 using (Bitmap bmpStrColored = prvFont.DrawPrivateFont(strParam, Color.White, Color.Black, Color.Yellow, Color.OrangeRed))
1145 TextureFactory.tテクスチャの解放(ref listMenu[nItem].txParamColored);
1146 listMenu[nItem].txParamColored = TextureFactory.tテクスチャの生成(bmpStrColored, false);
1154 listMenu[nItem].txParamColored.t2D描画(CDTXMania.Instance.Device, (x + 210) * Scale.X, (y + 12) * Scale.Y - 20);
1158 listMenu[nItem].txParam.t2D描画(CDTXMania.Instance.Device, (x + 210) * Scale.X, (y + 12) * Scale.Y - 20);
1160 nItem = this.t次の項目(nItem);
1164 #region [ 項目リストにフォーカスがあって、かつスクロールが停止しているなら、パネルの上下に▲印を描画する。]
1165 if (this.b項目リスト側にフォーカスがある && (this.n目標のスクロールカウンタ == 0))
1173 if (this.b要素値にフォーカス中)
1177 y_upper = 198 - this.ct三角矢印アニメ.n現在の値;
1178 y_lower = 242 + this.ct三角矢印アニメ.n現在の値;
1184 y_upper = 186 - this.ct三角矢印アニメ.n現在の値;
1185 y_lower = 254 + this.ct三角矢印アニメ.n現在の値;
1190 if (this.tx三角矢印 != null)
1192 this.tx三角矢印.t2D描画(CDTXMania.Instance.Device, x * Scale.X,
1194 new Rectangle(0, 0, (int)(32 * Scale.X), (int)(16 * Scale.Y)));
1195 this.tx三角矢印.t2D描画(CDTXMania.Instance.Device, x * Scale.X,
1197 new Rectangle(0, (int)(16 * Scale.Y), (int)(32 * Scale.X), (int)(16 * Scale.Y)));
1207 internal enum Eメニュー種別
1213 // #24609 2011.4.12 yyagi: 画面キャプチャキーのアサイン
1228 private int t前の項目(int nItem)
1232 nItem = this.list項目リスト.Count - 1;
1237 private int t次の項目(int nItem)
1239 if (++nItem >= this.list項目リスト.Count)