2 using System.Collections.Generic;
\r
3 using System.Diagnostics;
\r
5 using System.Drawing;
\r
6 using System.Threading;
\r
12 internal class CActConfigList : CActivity
\r
14 STDGBSValue<COptionLabel> ReturnToMenu;
\r
15 STDGBSValue<COptionLabel> KeyAssignMenu;
\r
16 STDGBSValue<COptionLabel> DisplayMenu;
\r
17 STDGBSValue<COptionLabel> EDrumsMenu;
\r
18 COptionLabel SoundMenu;
\r
19 COptionLabel HitRangeMenu;
\r
20 COptionStringList skins;
\r
22 bool b項目リスト側にフォーカスがある;
\r
26 // #33689 2014.6.17 yyagi
\r
27 bool InitialUseOSTimer;
\r
28 bool InitialWASAPIEventDriven;
\r
29 ESoundDeviceTypeForConfig InitialSystemSoundType;
\r
30 int InitialWASAPIBufferSizeMs;
\r
31 int InitialASIODevice;
\r
32 bool InitialForceHighPower;
\r
33 List<COptionBase> list項目リスト;
\r
37 Point[] ptパネルの基本座標 = new Point[]
\r
39 new Point(0x12d, 3), new Point(0x12d, 0x35), new Point(0x12d, 0x67),
\r
40 new Point(0x12d, 0x99), new Point(0x114, 0xcb), new Point(0x12d, 0xfd),
\r
41 new Point(0x12d, 0x12f), new Point(0x12d, 0x161), new Point(0x12d, 0x193),
\r
42 new Point(0x12d, 0x1c5)
\r
44 CTextureAf txその他項目行パネル;
\r
46 CTextureAf tx通常項目行パネル;
\r
47 // #28195 2012.5.2 yyagi
\r
48 CTexture txSkinSample;
\r
49 string[] skinSubFolders;
\r
52 CPrivateFastFont prvFont;
\r
53 private struct stMenuItemRight
\r
55 public CTexture txMenuItemRight;
\r
57 public string strParam;
\r
58 public CTexture txParam;
\r
59 public CTexture txParamColored;
\r
61 stMenuItemRight[] listMenu;
\r
64 /// #32059 2013.9.17 yyagi
\r
66 public bool bIsFocusingParameter
\r
74 public bool b現在選択されている項目はReturnToMenuである
\r
78 COptionBase sel = this.list項目リスト[this.n現在の選択項目];
\r
80 for (EPart i = EPart.Drums; i <= EPart.System; ++i)
\r
82 if (sel == ReturnToMenu[i])
\r
91 public bool b楽器またはシステム用メニューである
\r
95 return eメニュー種別 == Eメニュー種別.Bass || eメニュー種別 == Eメニュー種別.Drums || eメニュー種別 == Eメニュー種別.Guitar || eメニュー種別 == Eメニュー種別.System;
\r
99 public COptionBase ib現在の選択項目
\r
103 return this.list項目リスト[this.n現在の選択項目];
\r
107 public int n現在の選択項目;
\r
112 public void tEsc押下()
\r
114 if (this.b要素値にフォーカス中)
\r
116 // #32059 2013.9.17 add yyagi
\r
117 this.b要素値にフォーカス中 = false;
\r
120 if (this.eメニュー種別 == Eメニュー種別.KeyAssignSystem)
\r
122 t項目リストの設定(Eメニュー種別.System);
\r
124 else if (this.eメニュー種別 == Eメニュー種別.KeyAssignDrums)
\r
126 t項目リストの設定(Eメニュー種別.Drums);
\r
128 else if (this.eメニュー種別 == Eメニュー種別.KeyAssignGuitar)
\r
130 t項目リストの設定(Eメニュー種別.Guitar);
\r
132 else if (this.eメニュー種別 == Eメニュー種別.KeyAssignBass)
\r
134 t項目リストの設定(Eメニュー種別.Bass);
\r
136 if (this.eメニュー種別 == Eメニュー種別.DisplaySystem)
\r
138 t項目リストの設定(Eメニュー種別.System);
\r
140 else if (this.eメニュー種別 == Eメニュー種別.DisplayDrums)
\r
142 t項目リストの設定(Eメニュー種別.Drums);
\r
144 else if (this.eメニュー種別 == Eメニュー種別.DisplayGuitar)
\r
146 t項目リストの設定(Eメニュー種別.Guitar);
\r
148 else if (this.eメニュー種別 == Eメニュー種別.DisplayBass)
\r
150 t項目リストの設定(Eメニュー種別.Bass);
\r
152 else if (this.eメニュー種別 == Eメニュー種別.EDrumsSettings)
\r
154 t項目リストの設定(Eメニュー種別.Drums);
\r
156 else if (this.eメニュー種別 == Eメニュー種別.HitRangeSettings)
\r
158 t項目リストの設定(Eメニュー種別.System);
\r
160 else if ( this.eメニュー種別 == Eメニュー種別.SoundSettings)
\r
162 t項目リストの設定(Eメニュー種別.System);
\r
166 public bool tEnter押下()
\r
169 CDTXMania.Instance.Skin.sound決定音.t再生する();
\r
171 if (this.b要素値にフォーカス中)
\r
173 this.b要素値にフォーカス中 = false;
\r
175 else if (this.list項目リスト[this.n現在の選択項目] is COptionInteger)
\r
177 this.b要素値にフォーカス中 = true;
\r
179 else if (this.list項目リスト[this.n現在の選択項目] is IOptionList || this.list項目リスト[this.n現在の選択項目] is COptionBool)
\r
181 this.list項目リスト[this.n現在の選択項目].OnNext();
\r
184 // #27029 2012.1.5 from
\r
186 CDTXMania.Instance.ConfigIni.eBDGroup == EBDGroup.Group &&
\r
188 (this.list項目リスト[this.n現在の選択項目] == CDTXMania.Instance.ConfigIni.eHHGroup ||
\r
189 this.list項目リスト[this.n現在の選択項目] == CDTXMania.Instance.ConfigIni.eHitSoundPriorityHH)))
\r
195 if (b現在選択されている項目はReturnToMenuである && b楽器またはシステム用メニューである)
\r
199 this.list項目リスト[this.n現在の選択項目].OnEnter();
\r
204 private void tGenerateSkinSample()
\r
206 string path = skinSubFolders[skins.Index];
\r
207 path = System.IO.Path.Combine(path, @"Graphics\ScreenTitle background.jpg");
\r
208 using (Bitmap bmSrc = new Bitmap(path))
\r
210 using (Bitmap bmDest = new Bitmap(bmSrc.Width / 4, bmSrc.Height / 4))
\r
212 using (Graphics g = Graphics.FromImage(bmDest))
\r
214 g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
\r
215 g.DrawImage(bmSrc, new Rectangle(0, 0, bmSrc.Width / 4, bmSrc.Height / 4),
\r
216 0, 0, bmSrc.Width, bmSrc.Height, GraphicsUnit.Pixel);
\r
217 TextureFactory.tテクスチャの解放(ref txSkinSample);
\r
218 txSkinSample = TextureFactory.tテクスチャの生成(bmDest, false);
\r
224 // #region [ 項目リストの設定 ( Exit, KeyAssignSystem/Drums/Guitar/Bass) ]
\r
225 public void t項目リストの設定_Exit()
\r
227 CDTXMania.Instance.SaveConfig();
\r
228 this.eメニュー種別 = Eメニュー種別.Unknown;
\r
231 public void t項目リストの設定(Eメニュー種別 eMenu)
\r
233 this.list項目リスト.Clear();
\r
235 Func<EPad, string, string, COptionString> PadNotifier = (pad, lbl, expl) =>
\r
237 COptionString opt = new COptionString("");
\r
238 opt.Initialize(lbl, expl);
\r
239 opt.OnEnterDelegate = () =>
\r
241 CDTXMania.Instance.stageコンフィグ.tパッド選択通知(pad);
\r
246 CResources cr = CDTXMania.Instance.Resources;
\r
248 if (eMenu == Eメニュー種別.DisplaySystem)
\r
250 list項目リスト.Add(ReturnToMenu.System);
\r
251 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bFullScreen);
\r
252 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bBGA);
\r
253 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAVI);
\r
254 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bFullAVI);
\r
255 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bVSyncWait);
\r
256 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdDebugX.Both);
\r
257 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdDebugY.Both);
\r
258 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdDebugX.DrOnly);
\r
259 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdDebugY.DrOnly);
\r
260 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdDebugX.GBOnly);
\r
261 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdDebugY.GBOnly);
\r
262 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdMovieX.Both);
\r
263 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdMovieY.Both);
\r
264 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdMovieX.DrOnly);
\r
265 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdMovieY.DrOnly);
\r
266 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdMovieX.GBOnly);
\r
267 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdMovieY.GBOnly);
\r
268 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nBGAlpha);
\r
269 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nShowLagType);
\r
270 list項目リスト.Add(CDTXMania.Instance.ConfigIni.eJudgePriority);
\r
271 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bDebugInfo);
\r
273 else if (eMenu == Eメニュー種別.DisplayDrums)
\r
275 list項目リスト.Add(ReturnToMenu.Drums);
\r
276 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdInstX.Drums.Both);
\r
277 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdInstX.Drums.DrOnly);
\r
278 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdComboX.Drums.Both);
\r
279 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdComboX.Drums.DrOnly);
\r
280 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdJudgeLineY.Drums);
\r
281 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdJudgeY.Drums);
\r
282 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLaneOrder.LC);
\r
283 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLaneOrder.HH);
\r
284 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLaneOrder.SD);
\r
285 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLaneOrder.BD);
\r
286 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLaneOrder.HT);
\r
287 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLaneOrder.LT);
\r
288 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLaneOrder.FT);
\r
289 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLaneOrder.CY);
\r
290 list項目リスト.Add(CDTXMania.Instance.ConfigIni.eSudHidInv.Drums);
\r
291 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bReverse.Drums);
\r
292 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nMinComboDisp.Drums);
\r
293 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bGraph.Drums);
\r
295 else if (eMenu == Eメニュー種別.DisplayGuitar)
\r
297 list項目リスト.Add(ReturnToMenu.Guitar);
\r
298 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdInstX.Guitar.Both);
\r
299 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdInstX.Guitar.GBOnly);
\r
300 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdComboX.Guitar.Both);
\r
301 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdComboX.Guitar.GBOnly);
\r
302 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdJudgeLineY.Guitar);
\r
303 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdJudgeY.Guitar);
\r
304 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLaneOrder.GtR);
\r
305 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLaneOrder.GtG);
\r
306 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLaneOrder.GtB);
\r
307 list項目リスト.Add(CDTXMania.Instance.ConfigIni.eSudHidInv.Guitar);
\r
308 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bReverse.Guitar);
\r
309 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nMinComboDisp.Guitar);
\r
310 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bGraph.Guitar);
\r
312 else if (eMenu == Eメニュー種別.DisplayBass)
\r
314 list項目リスト.Add(ReturnToMenu.Bass);
\r
315 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdInstX.Bass.Both);
\r
316 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdInstX.Bass.GBOnly);
\r
317 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdComboX.Bass.Both);
\r
318 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdComboX.Bass.GBOnly);
\r
319 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdJudgeLineY.Bass);
\r
320 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdJudgeY.Bass);
\r
321 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLaneOrder.BsR);
\r
322 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLaneOrder.BsG);
\r
323 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLaneOrder.BsB);
\r
324 list項目リスト.Add(CDTXMania.Instance.ConfigIni.eSudHidInv.Bass);
\r
325 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bReverse.Bass);
\r
326 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nMinComboDisp.Bass);
\r
327 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bGraph.Bass);
\r
329 else if (eMenu == Eメニュー種別.EDrumsSettings)
\r
331 list項目リスト.Add(ReturnToMenu.Drums);
\r
332 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nVelocityMin.LC);
\r
333 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nVelocityMin.HH);
\r
334 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nVelocityMin.SD);
\r
335 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nVelocityMin.BD);
\r
336 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nVelocityMin.HT);
\r
337 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nVelocityMin.LT);
\r
338 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nVelocityMin.FT);
\r
339 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nVelocityMin.CY);
\r
340 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nVelocityMin.RD);
\r
342 else if (eMenu == Eメニュー種別.HitRangeSettings)
\r
344 list項目リスト.Add(ReturnToMenu.System);
\r
345 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nHitRange.Perfect);
\r
346 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nHitRange.Great);
\r
347 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nHitRange.Good);
\r
348 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nHitRange.Poor);
\r
350 else if (eMenu == Eメニュー種別.KeyAssignSystem)
\r
352 list項目リスト.Add(ReturnToMenu.System);
\r
353 list項目リスト.Add(PadNotifier(EPad.Capture, cr.Label("strCfgKeyAssignCapture"), cr.Explanation("strCfgKeyAssignCapture") ));
\r
355 else if (eMenu == Eメニュー種別.KeyAssignDrums)
\r
357 list項目リスト.Add(ReturnToMenu.Drums);
\r
358 list項目リスト.Add(PadNotifier(EPad.LC, cr.Label("strCfgKeyAssignLC"), cr.Explanation("strCfgKeyAssignLC") ));
\r
359 list項目リスト.Add(PadNotifier(EPad.HH, cr.Label("strCfgKeyAssignHH"), cr.Explanation("strCfgKeyAssignHH") ));
\r
360 list項目リスト.Add(PadNotifier(EPad.HHO,cr.Label("strCfgKeyAssignHHO"), cr.Explanation("strCfgKeyAssignHHO") ));
\r
361 list項目リスト.Add(PadNotifier(EPad.SD, cr.Label("strCfgKeyAssignSD"), cr.Explanation("strCfgKeyAssignSD") ));
\r
362 list項目リスト.Add(PadNotifier(EPad.BD, cr.Label("strCfgKeyAssignBD"), cr.Explanation("strCfgKeyAssignBD") ));
\r
363 list項目リスト.Add(PadNotifier(EPad.HT, cr.Label("strCfgKeyAssignHT"), cr.Explanation("strCfgKeyAssignHT") ));
\r
364 list項目リスト.Add(PadNotifier(EPad.LT, cr.Label("strCfgKeyAssignLT"), cr.Explanation("strCfgKeyAssignLT") ));
\r
365 list項目リスト.Add(PadNotifier(EPad.FT, cr.Label("strCfgKeyAssignFT"), cr.Explanation("strCfgKeyAssignFT") ));
\r
366 list項目リスト.Add(PadNotifier(EPad.CY, cr.Label("strCfgKeyAssignCY"), cr.Explanation("strCfgKeyAssignCY") ));
\r
367 list項目リスト.Add(PadNotifier(EPad.RD, cr.Label("strCfgKeyAssignRD"), cr.Explanation("strCfgKeyAssignRD") ));
\r
368 list項目リスト.Add(PadNotifier(EPad.HP, cr.Label("strCfgKeyAssignHP"), cr.Explanation("strCfgKeyAssignHP") ));
\r
369 list項目リスト.Add(CDTXMania.Instance.ConfigIni.eHHGroup);
\r
370 list項目リスト.Add(CDTXMania.Instance.ConfigIni.eFTGroup);
\r
371 list項目リスト.Add(CDTXMania.Instance.ConfigIni.eCYGroup);
\r
372 list項目リスト.Add(CDTXMania.Instance.ConfigIni.eBDGroup);
\r
373 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bCymbalFree);
\r
374 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nInputAdjustTimeMs.Drums);
\r
376 else if (eMenu == Eメニュー種別.KeyAssignGuitar)
\r
378 list項目リスト.Add(ReturnToMenu.Guitar);
\r
379 list項目リスト.Add(PadNotifier(EPad.GtR, cr.Label("strCfgKeyAssignGtR"), cr.Explanation("strCfgKeyAssignGtR") ));
\r
380 list項目リスト.Add(PadNotifier(EPad.GtG, cr.Label("strCfgKeyAssignGtG"), cr.Explanation("strCfgKeyAssignGtG") ));
\r
381 list項目リスト.Add(PadNotifier(EPad.GtB, cr.Label("strCfgKeyAssignGtB"), cr.Explanation("strCfgKeyAssignGtB") ));
\r
382 list項目リスト.Add(PadNotifier(EPad.GtPick, cr.Label("strCfgKeyAssignGtPick"), cr.Explanation("strCfgKeyAssignGtPick") ));
\r
383 list項目リスト.Add(PadNotifier(EPad.GtWail, cr.Label("strCfgKeyAssignGtWailing"), cr.Explanation("strCfgKeyAssignGtWailing") ));
\r
384 list項目リスト.Add(PadNotifier(EPad.GtDecide, cr.Label("strCfgKeyAssignGtDecide"), cr.Explanation("strCfgKeyAssignGtDecide") ));
\r
385 list項目リスト.Add(PadNotifier(EPad.GtCancel, cr.Label("strCfgKeyAssignGtCancel"), cr.Explanation("strCfgKeyAssignGtCancel") ));
\r
386 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nInputAdjustTimeMs.Guitar);
\r
388 else if (eMenu == Eメニュー種別.KeyAssignBass)
\r
390 list項目リスト.Add(ReturnToMenu.Bass);
\r
391 list項目リスト.Add(PadNotifier(EPad.BsR, cr.Label("strCfgKeyAssignBsR"), cr.Explanation("strCfgKeyAssignBsR") ));
\r
392 list項目リスト.Add(PadNotifier(EPad.BsG, cr.Label("strCfgKeyAssignBsG"), cr.Explanation("strCfgKeyAssignBsG") ));
\r
393 list項目リスト.Add(PadNotifier(EPad.BsB, cr.Label("strCfgKeyAssignBsB"), cr.Explanation("strCfgKeyAssignBsB") ));
\r
394 list項目リスト.Add(PadNotifier(EPad.BsPick, cr.Label("strCfgKeyAssignBsPick"), cr.Explanation("strCfgKeyAssignBsPick") ));
\r
395 list項目リスト.Add(PadNotifier(EPad.BsWail, cr.Label("strCfgKeyAssignBsWailing"), cr.Explanation("strCfgKeyAssignBsWailing") ));
\r
396 list項目リスト.Add(PadNotifier(EPad.BsDecide, cr.Label("strCfgKeyAssignBsDecide"), cr.Explanation("strCfgKeyAssignBsDecide") ));
\r
397 list項目リスト.Add(PadNotifier(EPad.BsCancel, cr.Label("strCfgKeyAssignBsCancel"), cr.Explanation("strCfgKeyAssignBsCancel") ));
\r
398 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nInputAdjustTimeMs.Bass);
\r
400 else if (eMenu == Eメニュー種別.System)
\r
402 list項目リスト.Add(ReturnToMenu.System);
\r
403 COptionStringList langlist = new COptionStringList("default");
\r
404 langlist.Initialize( "strCfgLanguage", cr.LanguageDispList );
\r
405 langlist.Index = CDTXMania.Instance.Resources.LanguageCodeIndex;
\r
406 langlist.OnEnterDelegate = () =>
\r
408 int index = langlist.Index;
\r
409 CDTXMania.Instance.ConfigIni.strLanguage.Value = CDTXMania.Instance.Resources.Language = CDTXMania.Instance.Resources.LanguageCodeList[ index ];
\r
412 list項目リスト.Add( langlist );
\r
414 COptionString enumsongs = new COptionString("");
\r
415 enumsongs.Initialize( "strCfgSysEnumSongs" );
\r
416 list項目リスト.Add(enumsongs);
\r
417 list項目リスト.Add(CDTXMania.Instance.ConfigIni.eDark);
\r
418 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nRisky);
\r
419 list項目リスト.Add(CDTXMania.Instance.ConfigIni.eActiveInst);
\r
420 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nPlaySpeed);
\r
421 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nSleepPerFrameMs);
\r
422 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nSleepUnfocusMs);
\r
423 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bForceHighPowerPlan);
\r
424 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bStageFailed);
\r
425 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bRandSubBox);
\r
426 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nPreSoundWeightMs);
\r
427 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nPreImageWeightMs);
\r
428 list項目リスト.Add(CDTXMania.Instance.ConfigIni.eDamageLevel);
\r
429 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bScoreIni);
\r
430 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nChipVolume);
\r
431 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nAutoVolume);
\r
432 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bStoicMode);
\r
433 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bIsAutoResultCapture);
\r
434 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bBufferedInput);
\r
435 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bLog);
\r
436 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bLoadSoundSpeed);
\r
437 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bLoadDTXDetail);// #36177 2016.7.30 ikanick
\r
438 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bUseBoxDefSkin);
\r
439 list項目リスト.Add(skins);
\r
440 list項目リスト.Add(SoundMenu);
\r
441 list項目リスト.Add(DisplayMenu.System);
\r
442 list項目リスト.Add(HitRangeMenu);
\r
443 list項目リスト.Add(KeyAssignMenu.System);
\r
444 enumsongs.OnEnterDelegate = () =>
\r
446 if (CDTXMania.Instance.EnumSongs.IsEnumerating)
\r
448 // Debug.WriteLine( "バックグラウンドでEnumeratingSongs中だったので、一旦中断します。" );
\r
449 CDTXMania.Instance.EnumSongs.Abort();
\r
450 CDTXMania.Instance.actEnumSongs.On非活性化();
\r
453 CDTXMania.Instance.EnumSongs.StartEnumFromDisk();
\r
454 CDTXMania.Instance.EnumSongs.ChangeEnumeratePriority(ThreadPriority.Normal);
\r
455 CDTXMania.Instance.actEnumSongs.bコマンドでの曲データ取得 = true;
\r
456 CDTXMania.Instance.actEnumSongs.On活性化();
\r
459 else if ( eMenu == Eメニュー種別.SoundSettings )
\r
461 list項目リスト.Add( ReturnToMenu.System );
\r
462 list項目リスト.Add( CDTXMania.Instance.ConfigIni.bTimeStretch );
\r
463 list項目リスト.Add( CDTXMania.Instance.ConfigIni.bWaveAdjust );
\r
464 list項目リスト.Add( CDTXMania.Instance.ConfigIni.bBGMPlay );
\r
465 list項目リスト.Add( CDTXMania.Instance.ConfigIni.bAudience );
\r
466 list項目リスト.Add( CDTXMania.Instance.ConfigIni.nChipVolume );
\r
467 list項目リスト.Add( CDTXMania.Instance.ConfigIni.nAutoVolume );
\r
468 list項目リスト.Add( CDTXMania.Instance.ConfigIni.nSoundDeviceType );
\r
469 list項目リスト.Add( CDTXMania.Instance.ConfigIni.nWASAPIBufferSizeMs );
\r
470 list項目リスト.Add( CDTXMania.Instance.ConfigIni.bEventDrivenWASAPI );
\r
471 list項目リスト.Add( CDTXMania.Instance.ConfigIni.strASIODevice );
\r
472 list項目リスト.Add( CDTXMania.Instance.ConfigIni.bUseOSTimer );
\r
473 list項目リスト.Add( CDTXMania.Instance.ConfigIni.nMasterVolume );
\r
474 list項目リスト.Add( CDTXMania.Instance.ConfigIni.nPolyphonicSounds );
\r
475 list項目リスト.Add( CDTXMania.Instance.ConfigIni.eClickType );
\r
476 list項目リスト.Add( CDTXMania.Instance.ConfigIni.nClickHighVolume );
\r
477 list項目リスト.Add( CDTXMania.Instance.ConfigIni.nClickLowVolume );
\r
479 else if ( eMenu == Eメニュー種別.Drums )
\r
481 list項目リスト.Add(ReturnToMenu.Drums);
\r
482 COptionEnum<EThreeState> AllAuto = new COptionEnum<EThreeState>(EThreeState.X);
\r
483 AllAuto.Initialize( "strCfgDrAllAuto", typeof(EThreeState));
\r
484 AllAuto.OnEnterDelegate = () =>
\r
486 if ( AllAuto.Value == EThreeState.X )
\r
490 CDTXMania.Instance.ConfigIni.bAutoPlay.Set( EPart.Drums, AllAuto );
\r
492 list項目リスト.Add(AllAuto);
\r
493 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.LC);
\r
494 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.HH);
\r
495 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.HHO);
\r
496 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.SD);
\r
497 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.BD);
\r
498 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.HT);
\r
499 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.LT);
\r
500 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.FT);
\r
501 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.CY);
\r
502 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.RD);
\r
503 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nScrollSpeed.Drums);
\r
504 list項目リスト.Add(CDTXMania.Instance.ConfigIni.eHitSoundPriorityHH);
\r
505 list項目リスト.Add(CDTXMania.Instance.ConfigIni.eHitSoundPriorityFT);
\r
506 list項目リスト.Add(CDTXMania.Instance.ConfigIni.eHitSoundPriorityCY);
\r
507 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bTight);
\r
508 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bFillin);
\r
509 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bDrumsHitSound);
\r
510 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bEmphasizePlaySound.Drums);
\r
511 list項目リスト.Add(DisplayMenu.Drums);
\r
512 list項目リスト.Add(EDrumsMenu.Drums);
\r
513 list項目リスト.Add(KeyAssignMenu.Drums);
\r
515 else if (eMenu == Eメニュー種別.Guitar)
\r
517 list項目リスト.Add(ReturnToMenu.Guitar);
\r
518 COptionEnum<EThreeState> AllAuto = new COptionEnum<EThreeState>(EThreeState.X);
\r
519 AllAuto.Initialize( "strCfgDrAllAuto", typeof(EThreeState));
\r
520 AllAuto.OnEnterDelegate = () =>
\r
522 if ( AllAuto.Value == EThreeState.X )
\r
526 CDTXMania.Instance.ConfigIni.bAutoPlay.Set( EPart.Guitar, AllAuto );
\r
528 list項目リスト.Add(AllAuto);
\r
529 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.GtR);
\r
530 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.GtG);
\r
531 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.GtB);
\r
532 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.GtPick);
\r
533 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.GtWail);
\r
534 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nScrollSpeed.Guitar);
\r
535 list項目リスト.Add(CDTXMania.Instance.ConfigIni.eRandom.Guitar);
\r
536 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bLight.Guitar);
\r
537 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bEmphasizePlaySound.Guitar);
\r
538 list項目リスト.Add(DisplayMenu.Guitar);
\r
539 list項目リスト.Add(KeyAssignMenu.Guitar);
\r
541 else if (eMenu == Eメニュー種別.Bass)
\r
543 list項目リスト.Add(ReturnToMenu.Bass);
\r
544 COptionEnum<EThreeState> AllAuto = new COptionEnum<EThreeState>(EThreeState.X);
\r
545 AllAuto.Initialize( "strCfgDrAllAuto", typeof(EThreeState));
\r
546 AllAuto.OnEnterDelegate = () =>
\r
548 if ( AllAuto.Value == EThreeState.X )
\r
552 CDTXMania.Instance.ConfigIni.bAutoPlay.Set( EPart.Bass, AllAuto );
\r
554 list項目リスト.Add(AllAuto);
\r
555 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.BsR);
\r
556 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.BsG);
\r
557 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.BsB);
\r
558 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.BsPick);
\r
559 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.BsWail);
\r
560 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nScrollSpeed.Bass);
\r
561 list項目リスト.Add(CDTXMania.Instance.ConfigIni.eRandom.Bass);
\r
562 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bLight.Bass);
\r
563 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bEmphasizePlaySound.Bass);
\r
564 list項目リスト.Add(DisplayMenu.Bass);
\r
565 list項目リスト.Add(KeyAssignMenu.Bass);
\r
572 public void OnNext()
\r
574 CDTXMania.Instance.Skin.soundカーソル移動音.t再生する();
\r
577 list項目リスト[n現在の選択項目].OnPrevious();
\r
582 n目標のスクロールカウンタ += 100;
\r
586 public void OnPrevious()
\r
588 CDTXMania.Instance.Skin.soundカーソル移動音.t再生する();
\r
591 list項目リスト[n現在の選択項目].OnNext();
\r
596 n目標のスクロールカウンタ -= 100;
\r
600 private void t要素値を上下に変更中の処理()
\r
602 if (this.list項目リスト[this.n現在の選択項目] == CDTXMania.Instance.ConfigIni.nMasterVolume)
\r
604 // #33700 2014.4.26 yyagi
\r
605 CDTXMania.Instance.Sound管理.nMasterVolume = CDTXMania.Instance.ConfigIni.nMasterVolume;
\r
609 public override void On活性化()
\r
613 this.list項目リスト = new List<COptionBase>();
\r
614 this.eメニュー種別 = Eメニュー種別.Unknown;
\r
615 this.prvFont = new CPrivateFastFont(CSkin.Path(@"Graphics\fonts\mplus-1p-heavy.ttf"), (int)(18 * Scale.Y));
\r
616 this.b要素値にフォーカス中 = false;
\r
617 this.n目標のスクロールカウンタ = 0;
\r
618 this.n現在のスクロールカウンタ = 0;
\r
619 this.nスクロール用タイマ値 = -1;
\r
620 this.ct三角矢印アニメ = new CCounter();
\r
623 DisplayMenu = new STDGBSValue<COptionLabel>();
\r
624 KeyAssignMenu = new STDGBSValue<COptionLabel>();
\r
625 EDrumsMenu = new STDGBSValue<COptionLabel>();
\r
626 ReturnToMenu = new STDGBSValue<COptionLabel>();
\r
628 CResources cr = CDTXMania.Instance.Resources;
\r
629 for ( EPart i = EPart.Drums; i <= EPart.System; ++i )
\r
631 DisplayMenu[i] = new COptionLabel( "strCfgDisplayOption" );
\r
632 KeyAssignMenu[i] = new COptionLabel( "strCfgInputOption" );
\r
633 ReturnToMenu[i] = new COptionLabel( "strCfgReturnToMenu" );
\r
636 EDrumsMenu[ EPart.Drums ] = new COptionLabel( "strCfgEDrumsOption" );
\r
637 HitRangeMenu = new COptionLabel( "strCfgHitRangeOption" );
\r
638 SoundMenu = new COptionLabel( "strCfgSoundOption" );
\r
640 DisplayMenu.Drums.OnEnterDelegate = () =>
\r
642 t項目リストの設定(Eメニュー種別.DisplayDrums);
\r
644 DisplayMenu.Guitar.OnEnterDelegate = () =>
\r
646 t項目リストの設定(Eメニュー種別.DisplayGuitar);
\r
648 DisplayMenu.Bass.OnEnterDelegate = () =>
\r
650 t項目リストの設定(Eメニュー種別.DisplayBass);
\r
652 DisplayMenu.System.OnEnterDelegate = () =>
\r
654 t項目リストの設定(Eメニュー種別.DisplaySystem);
\r
656 KeyAssignMenu.Drums.OnEnterDelegate = () =>
\r
658 t項目リストの設定(Eメニュー種別.KeyAssignDrums);
\r
660 KeyAssignMenu.Guitar.OnEnterDelegate = () =>
\r
662 t項目リストの設定(Eメニュー種別.KeyAssignGuitar);
\r
664 KeyAssignMenu.Bass.OnEnterDelegate = () =>
\r
666 t項目リストの設定(Eメニュー種別.KeyAssignBass);
\r
668 KeyAssignMenu.System.OnEnterDelegate = () =>
\r
670 t項目リストの設定(Eメニュー種別.KeyAssignSystem);
\r
673 ReturnToMenu.Drums.OnEnterDelegate = () =>
\r
675 t項目リストの設定(Eメニュー種別.Drums);
\r
677 ReturnToMenu.Guitar.OnEnterDelegate = () =>
\r
679 t項目リストの設定(Eメニュー種別.Guitar);
\r
681 ReturnToMenu.Bass.OnEnterDelegate = () =>
\r
683 t項目リストの設定(Eメニュー種別.Bass);
\r
685 ReturnToMenu.System.OnEnterDelegate = () =>
\r
687 t項目リストの設定(Eメニュー種別.System);
\r
689 EDrumsMenu.Drums.OnEnterDelegate = () =>
\r
691 t項目リストの設定(Eメニュー種別.EDrumsSettings);
\r
693 HitRangeMenu.OnEnterDelegate = () =>
\r
695 t項目リストの設定( Eメニュー種別.HitRangeSettings );
\r
697 SoundMenu.OnEnterDelegate = () =>
\r
699 t項目リストの設定( Eメニュー種別.SoundSettings );
\r
702 #region [ スキン選択肢と、現在選択中のスキン(index)の準備 #28195 2012.5.2 yyagi ]
\r
703 int ns = (CDTXMania.Instance.Skin.strSystemSkinSubfolders == null) ? 0 : CDTXMania.Instance.Skin.strSystemSkinSubfolders.Length;
\r
704 int nb = (CDTXMania.Instance.Skin.strBoxDefSkinSubfolders == null) ? 0 : CDTXMania.Instance.Skin.strBoxDefSkinSubfolders.Length;
\r
706 skinSubFolders = new string[ns + nb];
\r
707 skinInitial = CDTXMania.Instance.Skin.GetCurrentSkinSubfolderFullName(true);
\r
709 for (int i = 0; i < ns; i++)
\r
711 skinSubFolders[i] = CDTXMania.Instance.Skin.strSystemSkinSubfolders[i];
\r
713 for (int i = 0; i < nb; i++)
\r
715 skinSubFolders[ns + i] = CDTXMania.Instance.Skin.strBoxDefSkinSubfolders[i];
\r
717 Array.Sort(skinSubFolders);
\r
718 skinNames = CSkin.GetSkinName(skinSubFolders);
\r
719 initIdx = Array.BinarySearch(skinSubFolders, skinInitial);
\r
724 skins = new COptionStringList(skinNames[initIdx]);
\r
725 skins.Initialize("Skin", Properties.Resources.strCfgSysSkin, skinNames);
\r
727 skins.OnEnterDelegate = () =>
\r
729 CDTXMania.Instance.Skin.SetCurrentSkinSubfolderFullName(skinSubFolders[skins.Index], true);
\r
730 CDTXMania.Instance.ConfigIni.strSystemSkinSubfolderPath.Value = skinSubFolders[skins.Index];
\r
731 tGenerateSkinSample();
\r
735 // CONFIG脱出時にこの値から変更されているようなら
\r
737 this.InitialSystemSoundType = CDTXMania.Instance.ConfigIni.nSoundDeviceType;
\r
738 this.InitialWASAPIBufferSizeMs = CDTXMania.Instance.ConfigIni.nWASAPIBufferSizeMs;
\r
739 this.InitialASIODevice = CDTXMania.Instance.ConfigIni.strASIODevice.Index;
\r
740 this.InitialUseOSTimer = CDTXMania.Instance.ConfigIni.bUseOSTimer;
\r
741 this.InitialWASAPIEventDriven = CDTXMania.Instance.ConfigIni.bEventDrivenWASAPI;
\r
743 this.InitialForceHighPower = CDTXMania.Instance.ConfigIni.bForceHighPowerPlan;
\r
745 // #27795 2012.3.11 yyagi; System設定の中でDrumsの設定を参照しているため、
\r
746 this.t項目リストの設定(Eメニュー種別.Bass);
\r
747 // 活性化の時点でDrumsの設定も入れ込んでおかないと、System設定中に例外発生することがある。
\r
748 this.t項目リストの設定(Eメニュー種別.Guitar);
\r
749 this.t項目リストの設定(Eメニュー種別.Drums);
\r
750 // 順番として、最後にSystemを持ってくること。設定一覧の初期位置がSystemのため。
\r
751 this.t項目リストの設定(Eメニュー種別.System);
\r
757 public override void On非活性化()
\r
761 CDTXMania.Instance.SaveConfig();
\r
762 this.list項目リスト.Clear();
\r
763 this.ct三角矢印アニメ = null;
\r
770 if (CDTXMania.Instance.Skin.GetCurrentSkinSubfolderFullName(true) != this.skinInitial)
\r
772 CDTXMania.Instance.stageChangeSkin.tChangeSkinMain(); // #28195 2012.6.11 yyagi CONFIG脱出時にSkin更新
\r
776 // #24820 2013.1.22 yyagi CONFIGでWASAPI/ASIO/DirectSound関連の設定を変更した場合、サウンドデバイスを再構築する。
\r
777 // #33689 2014.6.17 yyagi CONFIGでSoundTimerTypeの設定を変更した場合も、サウンドデバイスを再構築する。
\r
778 #region [ サウンドデバイス変更 ]
\r
779 if (InitialSystemSoundType != CDTXMania.Instance.ConfigIni.nSoundDeviceType ||
\r
780 InitialWASAPIBufferSizeMs != CDTXMania.Instance.ConfigIni.nWASAPIBufferSizeMs ||
\r
781 InitialASIODevice != CDTXMania.Instance.ConfigIni.strASIODevice.Index ||
\r
782 InitialUseOSTimer != CDTXMania.Instance.ConfigIni.bUseOSTimer ||
\r
783 InitialWASAPIEventDriven != CDTXMania.Instance.ConfigIni.bEventDrivenWASAPI )
\r
785 ESoundDeviceType soundDeviceType;
\r
786 switch (CDTXMania.Instance.ConfigIni.nSoundDeviceType.Value)
\r
788 case ESoundDeviceTypeForConfig.DSound:
\r
789 soundDeviceType = ESoundDeviceType.DirectSound;
\r
791 case ESoundDeviceTypeForConfig.ASIO:
\r
792 soundDeviceType = ESoundDeviceType.ASIO;
\r
794 case ESoundDeviceTypeForConfig.WASAPI:
\r
795 soundDeviceType = ESoundDeviceType.ExclusiveWASAPI;
\r
798 soundDeviceType = ESoundDeviceType.Unknown;
\r
802 CDTXMania.Instance.Sound管理.t初期化(
\r
804 CDTXMania.Instance.ConfigIni.nWASAPIBufferSizeMs,
\r
805 CDTXMania.Instance.ConfigIni.bEventDrivenWASAPI,
\r
807 CDTXMania.Instance.ConfigIni.strASIODevice.Index,
\r
808 CDTXMania.Instance.ConfigIni.bUseOSTimer);
\r
809 CDTXMania.Instance.ShowWindowTitleWithSoundType();
\r
813 #region [ メトロノーム音 音量設定 ]
\r
814 CDTXMania.Instance.Skin.soundClickHigh.n音量 = CDTXMania.Instance.ConfigIni.nClickHighVolume;
\r
815 CDTXMania.Instance.Skin.soundClickLow.n音量 = CDTXMania.Instance.ConfigIni.nClickLowVolume;
\r
818 #region [ サウンドのタイムストレッチモード変更 ]
\r
820 FDK.CSound管理.bIsTimeStretch = CDTXMania.Instance.ConfigIni.bUseOSTimer;
\r
823 #region [ 電源プラン変更 ]
\r
824 if ( CDTXMania.Instance.ConfigIni.bForceHighPowerPlan )
\r
826 CPowerPlan.ChangeHighPerformance();
\r
830 CPowerPlan.RestoreCurrentPowerPlan();
\r
836 public override void OnManagedリソースの作成()
\r
840 this.tx通常項目行パネル = TextureFactory.tテクスチャの生成Af(CSkin.Path(@"Graphics\ScreenConfig itembox.png"), false);
\r
841 this.txその他項目行パネル = TextureFactory.tテクスチャの生成Af(CSkin.Path(@"Graphics\ScreenConfig itembox other.png"), false);
\r
842 this.tx三角矢印 = TextureFactory.tテクスチャの生成(CSkin.Path(@"Graphics\ScreenConfig triangle arrow.png"), false);
\r
843 // スキン選択時に動的に設定するため、ここでは初期化しない
\r
844 this.txSkinSample = null;
\r
845 base.OnManagedリソースの作成();
\r
849 public override void OnManagedリソースの解放()
\r
853 TextureFactory.tテクスチャの解放(ref this.txSkinSample);
\r
854 TextureFactory.tテクスチャの解放(ref this.tx通常項目行パネル);
\r
855 TextureFactory.tテクスチャの解放(ref this.txその他項目行パネル);
\r
856 TextureFactory.tテクスチャの解放(ref this.tx三角矢印);
\r
858 base.OnManagedリソースの解放();
\r
862 private void OnListMenuの初期化()
\r
865 this.listMenu = new stMenuItemRight[this.list項目リスト.Count];
\r
869 /// 事前にレンダリングしておいたテクスチャを解放する。
\r
871 private void OnListMenuの解放()
\r
873 if (listMenu != null)
\r
875 for (int i = 0; i < listMenu.Length; i++)
\r
877 TextureFactory.tテクスチャの解放(ref listMenu[i].txParam);
\r
878 TextureFactory.tテクスチャの解放(ref listMenu[i].txParamColored);
\r
879 TextureFactory.tテクスチャの解放(ref listMenu[i].txMenuItemRight);
\r
881 this.listMenu = null;
\r
885 public override int On進行描画()
\r
887 throw new InvalidOperationException("t進行描画(bool)のほうを使用してください。");
\r
890 public int t進行描画(bool b項目リスト側にフォーカスがある)
\r
894 #region [ 初めての進行描画 ]
\r
895 //-----------------
\r
896 if (base.b初めての進行描画)
\r
898 this.nスクロール用タイマ値 = CSound管理.rc演奏用タイマ.n現在時刻;
\r
899 this.ct三角矢印アニメ.t開始(0, 9, 50, CDTXMania.Instance.Timer);
\r
901 base.b初めての進行描画 = false;
\r
903 //-----------------
\r
906 this.b項目リスト側にフォーカスがある = b項目リスト側にフォーカスがある; // 記憶
\r
908 #region [ 項目スクロールの進行 ]
\r
909 //-----------------
\r
910 long n現在時刻 = CDTXMania.Instance.Timer.n現在時刻;
\r
911 if (n現在時刻 < this.nスクロール用タイマ値) this.nスクロール用タイマ値 = n現在時刻;
\r
913 const int INTERVAL = 2; // [ms]
\r
914 while ((n現在時刻 - this.nスクロール用タイマ値) >= INTERVAL)
\r
916 int n目標項目までのスクロール量 = Math.Abs((int)(this.n目標のスクロールカウンタ - this.n現在のスクロールカウンタ));
\r
919 #region [ n加速度の決定;目標まで遠いほど加速する。]
\r
920 //-----------------
\r
921 if (n目標項目までのスクロール量 <= 100)
\r
925 else if (n目標項目までのスクロール量 <= 300)
\r
929 else if (n目標項目までのスクロール量 <= 500)
\r
937 //-----------------
\r
939 #region [ this.n現在のスクロールカウンタに n加速度 を加減算。]
\r
940 //-----------------
\r
941 if (this.n現在のスクロールカウンタ < this.n目標のスクロールカウンタ)
\r
943 this.n現在のスクロールカウンタ += n加速度;
\r
944 if (this.n現在のスクロールカウンタ > this.n目標のスクロールカウンタ)
\r
947 this.n現在のスクロールカウンタ = this.n目標のスクロールカウンタ;
\r
950 else if (this.n現在のスクロールカウンタ > this.n目標のスクロールカウンタ)
\r
952 this.n現在のスクロールカウンタ -= n加速度;
\r
953 if (this.n現在のスクロールカウンタ < this.n目標のスクロールカウンタ)
\r
956 this.n現在のスクロールカウンタ = this.n目標のスクロールカウンタ;
\r
959 //-----------------
\r
961 #region [ 行超え処理、ならびに目標位置に到達したらスクロールを停止して項目変更通知を発行。]
\r
962 //-----------------
\r
963 if (this.n現在のスクロールカウンタ >= 100)
\r
965 this.n現在の選択項目 = this.t次の項目(this.n現在の選択項目);
\r
966 this.n現在のスクロールカウンタ -= 100;
\r
967 this.n目標のスクロールカウンタ -= 100;
\r
968 if (this.n目標のスクロールカウンタ == 0)
\r
970 CDTXMania.Instance.stageコンフィグ.t項目変更通知();
\r
973 else if (this.n現在のスクロールカウンタ <= -100)
\r
975 this.n現在の選択項目 = this.t前の項目(this.n現在の選択項目);
\r
976 this.n現在のスクロールカウンタ += 100;
\r
977 this.n目標のスクロールカウンタ += 100;
\r
978 if (this.n目標のスクロールカウンタ == 0)
\r
980 CDTXMania.Instance.stageコンフィグ.t項目変更通知();
\r
983 //-----------------
\r
986 this.nスクロール用タイマ値 += INTERVAL;
\r
988 //-----------------
\r
991 #region [ ▲印アニメの進行 ]
\r
992 if (this.b項目リスト側にフォーカスがある && (this.n目標のスクロールカウンタ == 0))
\r
994 this.ct三角矢印アニメ.t進行Loop();
\r
1001 // メニューにフォーカスがあるなら、項目リストの中央は頭を出さない。
\r
1002 this.ptパネルの基本座標[4].X = this.b項目リスト側にフォーカスがある ? 276 : 301;
\r
1004 #region [ 計11個の項目パネルを描画する。]
\r
1005 //-----------------
\r
1006 int nItem = this.n現在の選択項目;
\r
1007 for (int i = 0; i < 4; i++)
\r
1009 nItem = this.t前の項目(nItem);
\r
1012 for (int n行番号 = -4; n行番号 < 6; n行番号++)
\r
1014 // n行番号 == 0 がフォーカスされている項目パネル。
\r
1015 #region [ 今まさに画面外に飛びだそうとしている項目パネルは描画しない。]
\r
1016 if (((n行番号 == -4) && (this.n現在のスクロールカウンタ > 0)) ||
\r
1017 ((n行番号 == +5) && (this.n現在のスクロールカウンタ < 0)))
\r
1019 nItem = this.t次の項目(nItem);
\r
1024 int n移動元の行の基本位置 = n行番号 + 4;
\r
1025 int n移動先の行の基本位置 = (this.n現在のスクロールカウンタ <= 0) ? ((n移動元の行の基本位置 + 1) % 10) : (((n移動元の行の基本位置 - 1) + 10) % 10);
\r
1026 int x = this.ptパネルの基本座標[n移動元の行の基本位置].X + ((int)((this.ptパネルの基本座標[n移動先の行の基本位置].X - this.ptパネルの基本座標[n移動元の行の基本位置].X) * (((double)Math.Abs(this.n現在のスクロールカウンタ)) / 100.0)));
\r
1027 int y = this.ptパネルの基本座標[n移動元の行の基本位置].Y + ((int)((this.ptパネルの基本座標[n移動先の行の基本位置].Y - this.ptパネルの基本座標[n移動元の行の基本位置].Y) * (((double)Math.Abs(this.n現在のスクロールカウンタ)) / 100.0)));
\r
1029 #region [ 現在の行の項目パネル枠を描画。]
\r
1030 if (this.list項目リスト[nItem].type == EOptionType.Normal)
\r
1032 if (this.tx通常項目行パネル != null)
\r
1034 this.tx通常項目行パネル.t2D描画(CDTXMania.Instance.Device, x * Scale.X, y * Scale.Y);
\r
1037 else if (this.list項目リスト[nItem].type == EOptionType.Other)
\r
1039 if (this.txその他項目行パネル != null)
\r
1041 this.txその他項目行パネル.t2D描画(CDTXMania.Instance.Device, x * Scale.X, y * Scale.Y);
\r
1046 #region [ 現在の行の項目名を描画。]
\r
1047 if (listMenu[nItem].txMenuItemRight != null)
\r
1049 // 自前のキャッシュに含まれているようなら、再レンダリングせずキャッシュを使用
\r
1050 listMenu[nItem].txMenuItemRight.t2D描画(CDTXMania.Instance.Device, (x + 0x12) * Scale.X, (y + 12) * Scale.Y - 20);
\r
1054 using (Bitmap bmpItem = prvFont.DrawPrivateFont(this.list項目リスト[nItem].label, Color.White, Color.Black))
\r
1056 TextureFactory.tテクスチャの解放(ref listMenu[nItem].txMenuItemRight);
\r
1057 listMenu[nItem].txMenuItemRight = TextureFactory.tテクスチャの生成(bmpItem);
\r
1062 #region [ 現在の行の項目の要素を描画。]
\r
1063 string strParam = this.list項目リスト[nItem].ToString();
\r
1064 //bool b強調 = false;
\r
1066 #region [ 最初にSkinの選択肢にきたとき(Enterを押す前)に限り、サンプル生成が発生する。 #28195 2012.5.2 yyagi ]
\r
1067 if (this.list項目リスト[this.n現在の選択項目] == skins)
\r
1069 if (txSkinSample == null)
\r
1071 tGenerateSkinSample();
\r
1073 if (txSkinSample != null)
\r
1075 txSkinSample.t2D描画(CDTXMania.Instance.Device, 56 * Scale.X, 300 * Scale.Y);
\r
1081 int nIndex = this.list項目リスト[nItem].Index;
\r
1082 bool bColored = list項目リスト[nItem] is COptionInteger && n行番号 == 0 && b要素値にフォーカス中;
\r
1083 if (listMenu[nItem].nParam != nIndex ||
\r
1084 (listMenu[nItem].txParam == null) ||
\r
1085 (bColored && listMenu[nItem].txParamColored == null))
\r
1087 listMenu[nItem].nParam = nIndex;
\r
1088 listMenu[nItem].strParam = this.list項目リスト[nItem].ToString();
\r
1089 using (Bitmap bmpStr = prvFont.DrawPrivateFont(strParam, Color.White, Color.Black))
\r
1091 TextureFactory.tテクスチャの解放(ref listMenu[nItem].txParam);
\r
1092 listMenu[nItem].txParam = TextureFactory.tテクスチャの生成(bmpStr, false);
\r
1095 using (Bitmap bmpStrColored = prvFont.DrawPrivateFont(strParam, Color.White, Color.Black, Color.Yellow, Color.OrangeRed))
\r
1097 TextureFactory.tテクスチャの解放(ref listMenu[nItem].txParamColored);
\r
1098 listMenu[nItem].txParamColored = TextureFactory.tテクスチャの生成(bmpStrColored, false);
\r
1106 listMenu[nItem].txParamColored.t2D描画(CDTXMania.Instance.Device, (x + 210) * Scale.X, (y + 12) * Scale.Y - 20);
\r
1110 listMenu[nItem].txParam.t2D描画(CDTXMania.Instance.Device, (x + 210) * Scale.X, (y + 12) * Scale.Y - 20);
\r
1112 nItem = this.t次の項目(nItem);
\r
1116 #region [ 項目リストにフォーカスがあって、かつスクロールが停止しているなら、パネルの上下に▲印を描画する。]
\r
1117 if (this.b項目リスト側にフォーカスがある && (this.n目標のスクロールカウンタ == 0))
\r
1125 if (this.b要素値にフォーカス中)
\r
1129 y_upper = 198 - this.ct三角矢印アニメ.n現在の値;
\r
1130 y_lower = 242 + this.ct三角矢印アニメ.n現在の値;
\r
1136 y_upper = 186 - this.ct三角矢印アニメ.n現在の値;
\r
1137 y_lower = 254 + this.ct三角矢印アニメ.n現在の値;
\r
1142 if (this.tx三角矢印 != null)
\r
1144 this.tx三角矢印.t2D描画(CDTXMania.Instance.Device, x * Scale.X,
\r
1145 y_upper * Scale.Y,
\r
1146 new Rectangle(0, 0, (int)(32 * Scale.X), (int)(16 * Scale.Y)));
\r
1147 this.tx三角矢印.t2D描画(CDTXMania.Instance.Device, x * Scale.X,
\r
1148 y_lower * Scale.Y,
\r
1149 new Rectangle(0, (int)(16 * Scale.Y), (int)(32 * Scale.X), (int)(16 * Scale.Y)));
\r
1159 internal enum Eメニュー種別
\r
1165 // #24609 2011.4.12 yyagi: 画面キャプチャキーのアサイン
\r
1180 private int t前の項目(int nItem)
\r
1184 nItem = this.list項目リスト.Count - 1;
\r
1189 private int t次の項目(int nItem)
\r
1191 if (++nItem >= this.list項目リスト.Count)
\r