1 using System.Collections.Generic;
\r
2 using System.Threading;
\r
3 using System.Runtime.Serialization;
\r
4 using System.Diagnostics;
\r
8 using SlimDXKey = SlimDX.DirectInput.Key;
\r
13 /// DataContract はフィールドまたはプロパティを XML にシリアライズできます。
\r
14 /// DataMember が付いているメンバだけがシリアライズされます。シリアライズ可能な型については MSDN を参照してください。
\r
15 /// DataMember が付いていないメンバはデシリアライズ時に別途指定される既定値になります。
\r
16 /// これらは OnDeserialized 属性がついたメソッドで処理します。
\r
19 /// ・新しいバージョンで EnumMember, DataMember の 変数名を変更しないでください。
\r
20 /// 変更しても以前の値を保持したい場合は Name プロパティ (EnumMember の場合 Value プロパティ) に前の名前を入力してください。
\r
21 /// (例 : [DataMember(Name="old_hoge")]。
\r
22 /// ・DataMember の 型を変更しないでください。
\r
23 /// ・使用しなくなった DataMember を削除しないでください。
\r
24 /// ・デシリアライズで例外が起きた場合 Config.xml はリセットされます。
\r
26 /// ---- 新しくオプションを追加する場合 ----
\r
27 /// ・変数名は原則英語としてください。
\r
28 /// ・DTXMania の新しいバージョンで DataMember を追加する場合 Order 属性値を設定してください。
\r
29 /// 値は他の DataMember の Order 値の中でもっとも大きい値 +1 (無い場合 1 あるいは DTXMania のバージョン) としてください。
\r
30 /// (例: [DataMember(Order=1 / Order=105 etc.. )]public OptionInteger new_hoge;
\r
31 /// 異なる DataMember が同じ Order 値を持っていても構いません。
\r
32 /// ・DataMember に関連する型には原則 DataContract が必要です (enum など)。
\r
33 /// これがないと正しくシリアライズ / デシリアライズできません。
\r
34 /// ・メンバは Deserializing メソッドでインスタンスを生成してください。
\r
35 /// ・DefaultDeserializer で説明文や制約を設定 (Initialize メソッド) してください。
\r
36 /// ラベルや説明文は xml には書き出されませんので、デシリアライズ後にこの処理が必要です。
\r
37 /// このとき Initialize しようとしている値が null でないかチェックして、
\r
38 /// null であれば必ず Deserializing メソッド内と同様にインスタンスを生成してください。
\r
39 /// ・CActConfigList で新しく追加した項目を list に追加してください。
\r
42 public class CConfigXml : IExtensibleDataObject, ICloneable
\r
44 public static readonly int AssignableCodes = 16;
\r
47 /// ExtensibleDataObject はラウンドトリップを有効にします。
\r
48 /// 前のバージョンの DTXMania で新しい Config.xml を読み込んだ時でも
\r
49 /// デシリアライズされなかったメンバの情報は失われません。
\r
51 private ExtensionDataObject extobj;
\r
52 public ExtensionDataObject ExtensionData
\r
65 /// とりあえずshallow copyによるClone()。
\r
67 /// <returns>自身を複製したCConfigXmlクラス。</returns>
\r
68 public object Clone()
\r
70 return (CConfigXml) MemberwiseClone();
\r
75 public COptionBool bFullAVI;
\r
77 public COptionBool bAVI;
\r
79 public COptionBool bBGA;
\r
81 public COptionBool bBGMPlay;
\r
83 public COptionBool bLog;
\r
85 public COptionBool bLogDTX;
\r
87 public COptionBool bLogEnumerateSongs;
\r
89 public COptionBool bLogCreateRelease;
\r
91 public COptionEnum<EJudgeDisplayPriority> eJudgePriority;
\r
93 public COptionBool bScoreIni;
\r
95 public COptionBool bStageFailed;
\r
97 // #29500 2012.9.11 kairera0467 TIGHTモード
\r
98 public COptionBool bTight;
\r
100 public COptionBool bWaveAdjust;
\r
102 public COptionBool bCymbalFree;
\r
104 public COptionBool bStoicMode;
\r
106 public COptionBool bDrumsHitSound;
\r
108 public COptionBool bFillin;
\r
110 public COptionBool bRandSubBox;
\r
112 public COptionBool bDebugInfo;
\r
114 public COptionBool bAudience;
\r
116 public COptionBool bVSyncWait;
\r
118 public COptionBool bItalicFontSongSelect;
\r
120 public COptionBool bBoldFontSongSelect;
\r
122 public COptionBool bFullScreen;
\r
124 public COptionBool bViewerVSyncWait;
\r
126 public COptionBool bViewerShowDebugStatus;
\r
128 public COptionBool bViewerTimeStretch;
\r
130 public COptionBool bViewerDrumsActive;
\r
132 public COptionBool bViewerGuitarActive;
\r
134 public COptionBool bBufferedInput;
\r
136 // #25399 2011.6.9 yyagi リザルト画像自動保存機能ON/OFF
\r
137 public COptionBool bIsAutoResultCapture;
\r
139 // #28200 2012.5.1 yyagi System Menuの利用可否切替(使用可)
\r
140 public COptionBool bIsEnabledSystemMenu;
\r
142 // #28195 2012.5.6 yyagi box.defによるスキン切替機能を使用するか否か
\r
143 public COptionBool bUseBoxDefSkin;
\r
144 public bool bConfigIniが存在している;
\r
146 public COptionBool bLoadSoundSpeed;
\r
148 // #26752 2011.11.26 ダブルクリックでのフルスクリーンモード移行を許可
\r
149 public COptionBool bIsAllowedDoubleClickFullscreen;
\r
151 // #33689 2014.6.6 yyagi 演奏タイマーの種類,初期値はfalse (FDKのタイマー。FROM氏考案の独自タイマー)
\r
152 public COptionBool bUseOSTimer;
\r
155 public COptionBool bDynamicBassMixerManagement;
\r
157 // #23664 2013.2.24 yyagi ピッチ変更無しで再生速度を変更するかどうか,初期値はfalse (再生速度変更を、ピッチ変更にて行う)
\r
158 public COptionBool bTimeStretch;
\r
159 [DataMember( Order = 105 )]
\r
160 // #34825 2016.4.27 yyagi DTXMania動作中のみ、電源プランをHighpowerに変更するかどうか
\r
161 public COptionBool bForceHighPowerPlan;
\r
162 [DataMember( Order = 105 )]
\r
163 // #36261 2016.4.27 yyagi WASAPI動作をevent drivenにするかどうか
\r
164 public COptionBool bEventDrivenWASAPI;
\r
165 [DataMember( Order = 105 )]
\r
167 public COptionString strLanguage;
\r
168 // public COptionStringList strLanguageList;
\r
170 // #36177 2016.7.30 ikanick
\r
171 [DataMember( Order = 105 )]
\r
172 public COptionBool bLoadDTXDetail;
\r
175 public COptionInteger nBGAlpha;
\r
177 public Coordinates.CRect rcWindow;
\r
179 public Coordinates.CRect rcWindow_backup; // Viewerとしての使用時は、Playerとして使用する際のウインドウ情報をバックアップしておき、終了時に復元する
\r
180 // 内部保持するだけの情報であるため、Config.xmlに保存する必要はなく、[DataMember]は不要
\r
183 public Coordinates.CRect rcViewerWindow;
\r
186 public COptionInteger nMasterVolume;
\r
188 public COptionInteger nSleepUnfocusMs;
\r
190 public COptionInteger nSleepPerFrameMs;
\r
192 public COptionInteger nPlaySpeed;
\r
194 public COptionInteger nPreSoundWeightMs;
\r
196 public COptionInteger nPreImageWeightMs;
\r
198 public COptionInteger nAutoVolume;
\r
200 public COptionInteger nChipVolume;
\r
202 public COptionInteger nFontSizeDotSongSelect;
\r
204 // #23559 2011.6.20 yyagi Riskyでの残ミス数。0で閉店
\r
205 public COptionInteger nRisky;
\r
207 // #32072 2013.10.24 yyagi Semi-Invisibleでの、チップ再表示期間
\r
208 public COptionInteger nChipDisplayTimeMs;
\r
210 // #32072 2013.10.24 yyagi Semi-Invisibleでの、チップフェードアウト時間
\r
211 public COptionInteger nChipFadeoutTimeMs;
\r
213 // #28228 2012.5.1 yyagi レーン毎の最大同時発音数
\r
214 // #24820 2013.1.15 yyagi 初期値を4から2に変更。BASS.net使用時の負荷軽減のため。
\r
215 // #24820 2013.1.17 yyagi 初期値を4に戻した。動的なミキサー制御がうまく動作しているため。
\r
216 public COptionInteger nPolyphonicSounds;
\r
218 // #24820 2013.1.15 yyagi WASAPIのバッファサイズ 初期値は50(0で自動設定)
\r
219 public COptionInteger nWASAPIBufferSizeMs;
\r
223 public COptionEnum<ECYGroup> eCYGroup;
\r
225 public COptionEnum<EDark> eDark;
\r
227 public COptionEnum<EFTGroup> eFTGroup;
\r
229 public COptionEnum<EHHGroup> eHHGroup;
\r
231 // #27029 2012.1.4 from HHPedalとBassPedalのグルーピング
\r
232 public COptionEnum<EBDGroup> eBDGroup;
\r
234 public COptionEnum<EHitSoundPriority> eHitSoundPriorityCY;
\r
236 public COptionEnum<EHitSoundPriority> eHitSoundPriorityFT;
\r
238 public COptionEnum<EHitSoundPriority> eHitSoundPriorityHH;
\r
240 public COptionEnum<EActiveInstrument> eActiveInst;
\r
242 // #25370 2011.6.3 yyagi ズレ時間表示
\r
243 public COptionEnum<EShowLagType> nShowLagType;
\r
245 // #24820 2012.12.23 yyagi 初期値はACM | #31927 2013.8.25 yyagi OSにより初期値変更
\r
246 // 出力サウンドデバイス(0=ACM(にしたいが設計がきつそうならDirectShow), 1=ASIO, 2=WASAPI)
\r
247 public COptionEnum<ESoundDeviceTypeForConfig> nSoundDeviceType;
\r
249 // #27029 2012.1.5 from:
\r
250 // BDGroup が FP|BD→FP&BD に変化した際に自動変化するパラメータの値のバックアップ。FP&BD→FP|BD の時に元に戻す。
\r
251 // これらのバックアップ値は、BDGroup が FP&BD 状態の時にのみ Config.ini に出力され、BDGroup が FP|BD に戻ったら Config.ini から消える。
\r
252 public COptionEnum<EHHGroup> Backup1BDHHGroup;
\r
254 public COptionEnum<EHitSoundPriority> Backup1BDPriotiry;
\r
256 public COptionEnum<EDamage> eDamageLevel;
\r
259 public COptionString strDTXManiaVersion;
\r
261 public COptionString strSongDataPath;
\r
263 public COptionString strFontSongSelect;
\r
265 // #28195 2012.5.2 yyagi 使用中のSkinサブフォルダ名
\r
266 public COptionString strSystemSkinSubfolderPath;
\r
269 // #24820 2013.1.17 yyagi ASIOデバイス
\r
270 public COptionStringList strASIODevice;
\r
272 [DataMember( Order = 106 )]
\r
273 public COptionEnum<EClickType> eClickType;
\r
274 [DataMember( Order = 106 )]
\r
275 public COptionInteger nClickHighVolume;
\r
276 [DataMember( Order = 106 )]
\r
277 public COptionInteger nClickLowVolume;
\r
281 public STDGBSValue<COptionBool> bLight;
\r
283 public STDGBSValue<COptionBool> bReverse;
\r
285 public STDGBSValue<COptionBool> bGraph;
\r
287 public STDGBSValue<COptionBool> bEmphasizePlaySound;
\r
289 public STDGBSValue<COptionEnum<EAutoGhostData>> eAutoGhost;
\r
291 public STDGBSValue<COptionEnum<ETargetGhostData>> eTargetGhost;
\r
293 public STDGBSValue<COptionEnum<ERandom>> eRandom;
\r
295 public STDGBSValue<COptionEnum<ESudHidInv>> eSudHidInv;
\r
297 public STDGBSValue<COptionInteger> nMinComboDisp;
\r
299 public STDGBSValue<COptionInteger> nScrollSpeed;
\r
302 public STDGBSValue<COptionInteger> nInputAdjustTimeMs;
\r
305 public STDGBSValue<COptionInteger> nJudgeLinePosOffset;
\r
307 public STDGBSValue<COptionInteger> nViewerScrollSpeed;
\r
310 public STDGBSValue<COptionFloat> fJudgeLinePosOffsetBase;
\r
313 public COptionPadBool bAutoPlay;
\r
316 // #23857 2011.1.31 yyagi VelocityMin
\r
317 public STPadValue<COptionInteger> nVelocityMin;
\r
319 public STPadValue<COptionKeyAssign[]> KeyAssign;
\r
321 public STJudgeValue<COptionInteger> nHitRange;
\r
323 public COptionDictionary<int, string> dicJoystick;
\r
326 public STDGBSValue<COptionBool> bDisplayCombo;
\r
328 public STDGBSValue<COptionBool> bDisplayJudge;
\r
333 /// 楽器左端座標。ここを基準に各パーツを配置する。
\r
336 public STDGBSValue<STInstValue<COptionInteger>> cdInstX;
\r
338 public STInstValue<COptionInteger> cdDebugX;
\r
340 public STInstValue<COptionInteger> cdDebugY;
\r
342 public STInstValue<COptionInteger> cdMovieX;
\r
344 public STInstValue<COptionInteger> cdMovieY;
\r
346 public STDGBSValue<STInstValue<COptionInteger>> cdComboX;
\r
348 public STDGBSValue<STInstValue<COptionInteger>> cdComboY;
\r
350 public STDGBSValue<COptionInteger> cdJudgeLineY;
\r
352 public STDGBSValue<COptionInteger> cdJudgeY;
\r
354 public STLaneValue<COptionInteger> cdLaneOrder;
\r
356 public STDGBSValue<COptionInteger> nSuddenFrom;
\r
358 public STDGBSValue<COptionInteger> nHiddenFrom;
\r
361 public int GetLaneX(ELane e)
\r
363 EPart p = EPart.Drums;
\r
364 ELane start = ELane.DrumsLaneMin;
\r
365 ELane end = ELane.DrumsLaneMax;
\r
366 if (e >= ELane.GuitarLaneMin && e < ELane.GuitarLaneMax)
\r
369 start = ELane.GuitarLaneMin;
\r
370 end = ELane.GuitarLaneMax;
\r
372 if (e >= ELane.BassLaneMin && e < ELane.BassLaneMax)
\r
375 start = ELane.BassLaneMin;
\r
376 end = ELane.BassLaneMax;
\r
378 int ret = cdInstX[p][eActiveInst];
\r
379 int order = cdLaneOrder[e];
\r
380 for (ELane t = start; t < end; ++t)
\r
382 if (cdLaneOrder[t] < order)
\r
384 ret += GetLaneW(t);
\r
390 public int GetLaneW(ELane e)
\r
403 public void AdjustLaneOrders(EPart p)
\r
405 ELane min = ELane.DrumsLaneMin;
\r
406 ELane max = ELane.DrumsLaneMax;
\r
407 if (p == EPart.Guitar)
\r
409 min = ELane.GuitarLaneMin;
\r
410 max = ELane.GuitarLaneMax;
\r
412 else if (p == EPart.Bass)
\r
414 min = ELane.BassLaneMin;
\r
415 max = ELane.BassLaneMax;
\r
418 bool[] used = new bool[max - min];
\r
419 for (ELane t = min; t < max; ++t)
\r
421 used[cdLaneOrder[t]] = true;
\r
423 for (int i = 0; i < used.Length; ++i)
\r
427 for (ELane t = min; t < max; ++t)
\r
429 for (ELane t2 = t + 1; t2 < max; ++t2)
\r
431 if (cdLaneOrder[t].Value == cdLaneOrder[t2].Value)
\r
433 cdLaneOrder[t].Value = (int)(min + i);
\r
448 public void Deserializing(StreamingContext sc)
\r
450 // #xxxxx 2011.11.27 yyagi add
\r
451 // #23568 2010.11.04 ikanick add
\r
452 // #34069 2014.7.23 yyagi 初回起動時のwindow sizeは、CDTXMania側で設定する(-> 1280x720にする)
\r
453 // #30675 2013.02.04 ikanick add
\r
454 // #23580 2011.1.3 yyagi
\r
455 // #31602 2013.6.23 yyagi
\r
456 //this.strDTXManiaのバージョン = "Unknown";
\r
459 bFullScreen = new COptionBool(false);
\r
460 bVSyncWait = new COptionBool(true);
\r
461 bStageFailed = new COptionBool(true);
\r
462 bFullAVI = new COptionBool(false);
\r
463 bAVI = new COptionBool(true);
\r
464 bBGA = new COptionBool(true);
\r
465 bFillin = new COptionBool(true);
\r
466 bLogDTX = new COptionBool(false);
\r
467 bLogEnumerateSongs = new COptionBool(false);
\r
468 bLogCreateRelease = new COptionBool(false);
\r
469 bCymbalFree = new COptionBool(false);
\r
470 bStoicMode = new COptionBool(false);
\r
471 bItalicFontSongSelect = new COptionBool(false);
\r
472 bWaveAdjust = new COptionBool(true);
\r
473 bBGMPlay = new COptionBool(true);
\r
474 bDrumsHitSound = new COptionBool(true);
\r
475 bAudience = new COptionBool(true);
\r
476 bScoreIni = new COptionBool(true);
\r
477 bRandSubBox = new COptionBool(true);
\r
478 bBoldFontSongSelect = new COptionBool(true);
\r
479 bDebugInfo = new COptionBool(false);
\r
480 bLog = new COptionBool(true);
\r
481 bAutoPlay = new COptionPadBool();
\r
482 for ( EPad pad = EPad.DrumsPadMin; pad < EPad.DrumsPadMax; ++pad )
\r
484 bAutoPlay[ pad ] = new COptionBool( false );
\r
486 for ( EPad pad = EPad.GuitarPadMin; pad < EPad.BassPadMax; ++pad )
\r
488 bAutoPlay[ pad ] = new COptionBool( true );
\r
490 bAutoPlay[ EPad.Capture ] = new COptionBool( true );
\r
491 bViewerVSyncWait = new COptionBool( true );
\r
492 bViewerShowDebugStatus = new COptionBool(true);
\r
493 bViewerTimeStretch = new COptionBool(false);
\r
494 bViewerDrumsActive = new COptionBool(true);
\r
495 bViewerGuitarActive = new COptionBool(true);
\r
496 bLoadSoundSpeed = new COptionBool(true);
\r
497 bIsAutoResultCapture = new COptionBool(false);
\r
498 bBufferedInput = new COptionBool(true);
\r
499 bIsAllowedDoubleClickFullscreen = new COptionBool(true);
\r
500 bIsEnabledSystemMenu = new COptionBool(true);
\r
501 bUseBoxDefSkin = new COptionBool(true);
\r
502 bTight = new COptionBool(false);
\r
503 bUseOSTimer = new COptionBool(false);
\r
504 bDynamicBassMixerManagement = new COptionBool(true);
\r
505 bTimeStretch = new COptionBool(false);
\r
506 nSoundDeviceType = new COptionEnum<ESoundDeviceTypeForConfig>(FDK.COS.bIsVistaOrLater ? ESoundDeviceTypeForConfig.WASAPI : ESoundDeviceTypeForConfig.DSound);
\r
507 bForceHighPowerPlan = new COptionBool( false );
\r
508 bEventDrivenWASAPI = new COptionBool( false );
\r
509 bLoadDTXDetail = new COptionBool( false );
\r
512 strSongDataPath = new COptionString(@".\");
\r
513 strFontSongSelect = new COptionString("MS PGothic");
\r
514 strDTXManiaVersion = new COptionString(CDTXMania.VERSION);
\r
515 strSystemSkinSubfolderPath = new COptionString(@".\Default\");
\r
518 eDamageLevel = new COptionEnum<EDamage>(EDamage.Normal);
\r
519 eJudgePriority = new COptionEnum<EJudgeDisplayPriority>(EJudgeDisplayPriority.Under);
\r
520 eCYGroup = new COptionEnum<ECYGroup>(ECYGroup.Off);
\r
521 eDark = new COptionEnum<EDark>(EDark.Off);
\r
522 eFTGroup = new COptionEnum<EFTGroup>(EFTGroup.Off);
\r
523 eHHGroup = new COptionEnum<EHHGroup>(EHHGroup.Off);
\r
524 eBDGroup = new COptionEnum<EBDGroup>(EBDGroup.Off);
\r
525 Backup1BDHHGroup = new COptionEnum<EHHGroup>(EHHGroup.Off);
\r
526 Backup1BDPriotiry = new COptionEnum<EHitSoundPriority>(EHitSoundPriority.Chip);
\r
527 eHitSoundPriorityCY = new COptionEnum<EHitSoundPriority>(EHitSoundPriority.Chip);
\r
528 eHitSoundPriorityFT = new COptionEnum<EHitSoundPriority>(EHitSoundPriority.Chip);
\r
529 eHitSoundPriorityHH = new COptionEnum<EHitSoundPriority>(EHitSoundPriority.Chip);
\r
530 eJudgePriority = new COptionEnum<EJudgeDisplayPriority>(EJudgeDisplayPriority.Under);
\r
531 eActiveInst = new COptionEnum<EActiveInstrument>(EActiveInstrument.Both);
\r
532 nShowLagType = new COptionEnum<EShowLagType>(EShowLagType.Off);
\r
535 rcWindow = new Coordinates.CRect(100, 100, 1280, 720);
\r
536 rcWindow_backup = new Coordinates.CRect( 100, 100, 1280, 720 );
\r
537 nSleepPerFrameMs = new COptionInteger( -1 );
\r
538 nSleepUnfocusMs = new COptionInteger(1);
\r
539 nBGAlpha = new COptionInteger(100);
\r
540 nPreSoundWeightMs = new COptionInteger(1000);
\r
541 nPreImageWeightMs = new COptionInteger(100);
\r
542 nFontSizeDotSongSelect = new COptionInteger(20);
\r
543 nAutoVolume = new COptionInteger(80);
\r
544 nChipVolume = new COptionInteger(100);
\r
545 nPlaySpeed = new COptionInteger(20);
\r
547 nHitRange = new STJudgeValue<COptionInteger>();
\r
548 nHitRange.Perfect = new COptionInteger(34);
\r
549 nHitRange.Great = new COptionInteger(67);
\r
550 nHitRange.Good = new COptionInteger(84);
\r
551 nHitRange.Poor = new COptionInteger(117);
\r
553 nVelocityMin = new STPadValue<COptionInteger>();
\r
554 for (EPad pad = EPad.Min; pad < EPad.Max; ++pad)
\r
556 nVelocityMin[pad] = new COptionInteger(0);
\r
558 nVelocityMin.HH.Value = 20;
\r
560 nRisky = new COptionInteger(0);
\r
561 nWASAPIBufferSizeMs = new COptionInteger(50);
\r
562 nChipDisplayTimeMs = new COptionInteger(3000);
\r
563 nChipFadeoutTimeMs = new COptionInteger(2000);
\r
564 rcViewerWindow = new Coordinates.CRect(100, 100, 640, 360);
\r
565 nMasterVolume = new COptionInteger(100);
\r
566 nPolyphonicSounds = new COptionInteger(4);
\r
568 eClickType = new COptionEnum<EClickType>(EClickType.Off);
\r
569 nClickHighVolume = new COptionInteger(100);
\r
570 nClickLowVolume = new COptionInteger(100);
\r
573 bEmphasizePlaySound = new STDGBSValue<COptionBool>();
\r
574 bReverse = new STDGBSValue<COptionBool>();
\r
575 bLight = new STDGBSValue<COptionBool>();
\r
576 bGraph = new STDGBSValue<COptionBool>();
\r
577 bDisplayCombo = new STDGBSValue<COptionBool>();
\r
578 bDisplayJudge = new STDGBSValue<COptionBool>();
\r
580 nScrollSpeed = new STDGBSValue<COptionInteger>();
\r
581 nMinComboDisp = new STDGBSValue<COptionInteger>();
\r
582 nInputAdjustTimeMs = new STDGBSValue<COptionInteger>();
\r
583 nJudgeLinePosOffset = new STDGBSValue<COptionInteger>();
\r
584 nSuddenFrom = new STDGBSValue<COptionInteger>();
\r
585 nHiddenFrom = new STDGBSValue<COptionInteger>();
\r
587 eRandom = new STDGBSValue<COptionEnum<ERandom>>();
\r
588 eAutoGhost = new STDGBSValue<COptionEnum<EAutoGhostData>>();
\r
589 eTargetGhost = new STDGBSValue<COptionEnum<ETargetGhostData>>();
\r
590 eSudHidInv = new STDGBSValue<COptionEnum<ESudHidInv>>();
\r
593 for (EPart i = EPart.Drums; i <= EPart.Unknown; i++)
\r
595 bEmphasizePlaySound[i] = new COptionBool(true);
\r
596 bReverse[i] = new COptionBool(false);
\r
597 eRandom[i] = new COptionEnum<ERandom>(ERandom.Off);
\r
598 bLight[i] = new COptionBool(false);
\r
599 bGraph[i] = new COptionBool(false);
\r
600 bDisplayJudge[i] = new COptionBool(true);
\r
601 bDisplayCombo[i] = new COptionBool(true);
\r
603 nScrollSpeed[i] = new COptionInteger(1);
\r
604 nInputAdjustTimeMs[i] = new COptionInteger(0);
\r
605 nJudgeLinePosOffset[i] = new COptionInteger(0);
\r
606 nViewerScrollSpeed[i] = new COptionInteger(1);
\r
607 nMinComboDisp[i] = new COptionInteger(2);
\r
608 nSuddenFrom[i] = new COptionInteger(450); // +100 FI
\r
609 nHiddenFrom[i] = new COptionInteger(225); // +100 FO
\r
611 eAutoGhost[i] = new COptionEnum<EAutoGhostData>(EAutoGhostData.Perfect);
\r
612 eTargetGhost[i] = new COptionEnum<ETargetGhostData>(ETargetGhostData.None);
\r
613 eSudHidInv[i] = new COptionEnum<ESudHidInv>(ESudHidInv.Off);
\r
615 fJudgeLinePosOffsetBase[i] = new COptionFloat(0f);
\r
618 dicJoystick = new COptionDictionary<int, string>();
\r
619 dicJoystick.Value = new Dictionary<int, string>(10);
\r
621 string[] asiodevs = CEnumerateAllAsioDevices.GetAllASIODevices();
\r
622 strASIODevice = new COptionStringList(asiodevs.Length > 0 ? asiodevs[0] : null);
\r
624 strLanguage = new COptionString( "" ); // "default"でなく"" にすること。そうすることで、Locale情報を使った初期化がなされる。
\r
625 // strLanguageList = new COptionStringList("");
\r
628 cdInstX = new STDGBSValue<STInstValue<COptionInteger>>();
\r
629 cdInstX.Drums = new STInstValue<COptionInteger>();
\r
630 cdInstX.Drums.DrOnly = new COptionInteger(SampleFramework.GameWindowSize.Width / 2 - 314);
\r
631 cdInstX.Guitar = new STInstValue<COptionInteger>();
\r
632 cdInstX.Guitar.GBOnly = new COptionInteger(480 - 72 * 4);
\r
633 cdInstX.Bass = new STInstValue<COptionInteger>();
\r
634 cdInstX.Bass.GBOnly = new COptionInteger(SampleFramework.GameWindowSize.Width - 480);
\r
635 cdInstX.Drums.Both = new COptionInteger(cdInstX.Drums.DrOnly);
\r
636 cdInstX.Guitar.Both = new COptionInteger(cdInstX.Guitar.GBOnly);
\r
637 cdInstX.Bass.Both = new COptionInteger(cdInstX.Bass.GBOnly);
\r
639 cdDebugX = new STInstValue<COptionInteger>();
\r
640 cdDebugX.DrOnly = new COptionInteger(450 * 3);
\r
641 cdDebugX.Both = new COptionInteger(450 * 3);
\r
642 cdDebugX.GBOnly = new COptionInteger(cdInstX.Drums.DrOnly);
\r
644 cdDebugY = new STInstValue<COptionInteger>();
\r
645 cdDebugY.Both = new COptionInteger(200);
\r
646 cdDebugY.DrOnly = new COptionInteger(200);
\r
647 cdDebugY.GBOnly = new COptionInteger(200);
\r
649 cdMovieX = new STInstValue<COptionInteger>();
\r
650 cdMovieX.Both = new COptionInteger(619 + 682);
\r
651 cdMovieX.DrOnly = new COptionInteger(619 + 682);
\r
652 cdMovieX.GBOnly = new COptionInteger(682);
\r
654 cdMovieY = new STInstValue<COptionInteger>();
\r
655 cdMovieY.Both = new COptionInteger(128);
\r
656 cdMovieY.DrOnly = new COptionInteger(128);
\r
657 cdMovieY.GBOnly = new COptionInteger(128);
\r
659 cdComboX = new STDGBSValue<STInstValue<COptionInteger>>();
\r
660 cdComboX.Drums = new STInstValue<COptionInteger>();
\r
661 cdComboX.Drums.Both = new COptionInteger(cdInstX.Drums.Both + (72 * 5 + 85 * 2 + 99) / 2);
\r
662 cdComboX.Drums.DrOnly = new COptionInteger(cdInstX.Drums.DrOnly + (72 * 5 + 85 * 2 + 99) / 2);
\r
663 cdComboX.Guitar = new STInstValue<COptionInteger>();
\r
664 cdComboX.Guitar.Both = new COptionInteger(cdInstX.Guitar.Both + 72 * 2);
\r
665 cdComboX.Guitar.GBOnly = new COptionInteger(cdInstX.Guitar.GBOnly + 72 * 2);
\r
666 cdComboX.Bass = new STInstValue<COptionInteger>();
\r
667 cdComboX.Bass.Both = new COptionInteger(cdInstX.Bass.Both + 72 * 2);
\r
668 cdComboX.Bass.GBOnly = new COptionInteger(cdInstX.Bass.GBOnly + 72 * 2);
\r
670 cdComboY = new STDGBSValue<STInstValue<COptionInteger>>();
\r
671 cdComboY.Drums = new STInstValue<COptionInteger>();
\r
672 cdComboY.Drums.Both = new COptionInteger(100);
\r
673 cdComboY.Drums.DrOnly = new COptionInteger(100);
\r
674 cdComboY.Guitar = new STInstValue<COptionInteger>();
\r
675 cdComboY.Guitar.Both = new COptionInteger(700);
\r
676 cdComboY.Guitar.GBOnly = new COptionInteger(700);
\r
677 cdComboY.Bass = new STInstValue<COptionInteger>();
\r
678 cdComboY.Bass.Both = new COptionInteger(700);
\r
679 cdComboY.Bass.GBOnly = new COptionInteger(700);
\r
681 cdJudgeLineY = new STDGBSValue<COptionInteger>();
\r
682 cdJudgeLineY.Drums = new COptionInteger(942);
\r
683 cdJudgeLineY.Guitar = new COptionInteger(138);
\r
684 cdJudgeLineY.Bass = new COptionInteger(138);
\r
686 cdJudgeY = new STDGBSValue<COptionInteger>();
\r
687 cdJudgeY.Drums = new COptionInteger(350);
\r
688 cdJudgeY.Guitar = new COptionInteger(600);
\r
689 cdJudgeY.Bass = new COptionInteger(600);
\r
691 cdLaneOrder = new STLaneValue<COptionInteger>();
\r
692 for (ELane lane = ELane.DrumsLaneMin; lane < ELane.BassLaneMax; ++lane)
\r
694 cdLaneOrder[lane] = new COptionInteger(0);
\r
697 cdLaneOrder.HH.Value = 1;
\r
698 cdLaneOrder.SD.Value = 2;
\r
699 cdLaneOrder.BD.Value = 3;
\r
700 cdLaneOrder.HT.Value = 4;
\r
701 cdLaneOrder.LT.Value = 5;
\r
702 cdLaneOrder.FT.Value = 6;
\r
703 cdLaneOrder.CY.Value = 7;
\r
705 cdLaneOrder.GtR.Value = 0;
\r
706 cdLaneOrder.GtG.Value = 1;
\r
707 cdLaneOrder.GtB.Value = 2;
\r
708 cdLaneOrder.GtW.Value = 3;
\r
710 cdLaneOrder.BsR.Value = 0;
\r
711 cdLaneOrder.BsG.Value = 1;
\r
712 cdLaneOrder.GtB.Value = 2;
\r
713 cdLaneOrder.BsW.Value = 3;
\r
715 bConfigIniが存在している = System.IO.File.Exists(CDTXMania.Instance.strEXEのあるフォルダ + "Config.xml");
\r
716 SetDefaultKeyAssign();
\r
720 /// 保存する必要がない値はここで設定してください。
\r
721 /// 設定しない場合 DataMember 以外のメンバはすべてその型の規定値になります。
\r
723 /// <param name="sc">ストリーミングコンテキスト。使用しません。</param>
\r
725 public void DefaultDeserializer(StreamingContext sc)
\r
728 CResources cr = CDTXMania.Instance.Resources;
\r
729 bFullScreen.Initialize( "strCfgSysFullScreen" );
\r
730 bVSyncWait.Initialize( "strCfgSysVSync" );
\r
731 bStageFailed.Initialize( "strCfgSysStageFailed");
\r
732 bFullAVI.Initialize( "strCfgSysFullAVI" );
\r
733 bAVI.Initialize( "strCfgSysAVI" );
\r
734 bBGA.Initialize( "strCfgSysBGA" );
\r
735 bLog.Initialize( "strCfgSysLog" );
\r
736 bStoicMode.Initialize( "strCfgSysStoic" );
\r
737 bWaveAdjust.Initialize( "strCfgSysAdjustWaves" );
\r
738 bBGMPlay.Initialize( "strCfgSysBGM" );
\r
739 bAudience.Initialize( "strCfgSysAudience" );
\r
740 bScoreIni.Initialize( "strCfgSysSaveScoreIni" );
\r
741 bRandSubBox.Initialize( "strCfgSysRandSubBox" );
\r
742 bAutoPlay.HH.Initialize( "strCfgDrAutoHHC" );
\r
743 bAutoPlay.HHO.Initialize( "strCfgDrAutoHHO" );
\r
744 bAutoPlay.SD.Initialize( "strCfgDrAutoSD" );
\r
745 bAutoPlay.BD.Initialize( "strCfgDrAutoBD" );
\r
746 bAutoPlay.HT.Initialize( "strCfgDrAutoHT" );
\r
747 bAutoPlay.LT.Initialize( "strCfgDrAutoLT" );
\r
748 bAutoPlay.FT.Initialize( "strCfgDrAutoFT" );
\r
749 bAutoPlay.CY.Initialize( "strCfgDrAutoCY" );
\r
750 bAutoPlay.RD.Initialize( "strCfgDrAutoRD" );
\r
751 bAutoPlay.LC.Initialize( "strCfgDrAutoLCY" );
\r
752 bAutoPlay.GtR.Initialize( "strCfgGtAutoR" );
\r
753 bAutoPlay.GtG.Initialize( "strCfgGtAutoG" );
\r
754 bAutoPlay.GtB.Initialize( "strCfgGtAutoB" );
\r
755 bAutoPlay.GtPick.Initialize( "strCfgGtAutoPick" );
\r
756 bAutoPlay.GtWail.Initialize( "strCfgGtAutoWailing" );
\r
757 bAutoPlay.BsR.Initialize( "strCfgBsAutoR" );
\r
758 bAutoPlay.BsG.Initialize( "strCfgBsAutoG" );
\r
759 bAutoPlay.BsB.Initialize( "strCfgBsAutoB" );
\r
760 bAutoPlay.BsPick.Initialize( "strCfgBsAutoPick" );
\r
761 bAutoPlay.BsWail.Initialize( "strCfgBsAutoWailing" );
\r
762 bAutoPlay.Capture.Initialize( "strCfgCapture" );
\r
764 bLoadSoundSpeed.Initialize( "strCfgSysSoundLoadLimiter" );
\r
765 bIsAutoResultCapture.Initialize( "strCfgSysAutoResultCapture" );
\r
766 bBufferedInput.Initialize( "strCfgSysBufferingInput" );
\r
767 bUseBoxDefSkin.Initialize( "strCfgSysUseBoxDefSkin" );
\r
768 bUseOSTimer.Initialize( "strCfgSysUseOSTimer" );
\r
769 bTimeStretch.Initialize( "strCfgSysTimeStretch" );
\r
770 bForceHighPowerPlan.Initialize( "strCfgSysForceHighPowerPlan" );
\r
771 bEventDrivenWASAPI.Initialize( "strCfgSysWASAPIEventDriven" );
\r
772 bLoadDTXDetail.Initialize( "strCfgSysLoadDTXDetail" ); // #36177 2016.7.30 ikanick
\r
774 bCymbalFree.Initialize( "strCfgDrCymbalFree" );
\r
775 bDrumsHitSound.Initialize( "strCfgDrChipSound" );
\r
776 bFillin.Initialize( "strCfgDrFillin" );
\r
777 bTight.Initialize( "strCfgDrTight" );
\r
779 bItalicFontSongSelect.Initialize("", "");
\r
780 bBoldFontSongSelect.Initialize("", "");
\r
781 bLogDTX.Initialize("", "");
\r
782 bLogEnumerateSongs.Initialize("", "");
\r
783 bLogCreateRelease.Initialize("", "");
\r
784 bViewerVSyncWait.Initialize("", "");
\r
785 bViewerShowDebugStatus.Initialize("", "");
\r
786 bViewerTimeStretch.Initialize("", "");
\r
787 bViewerDrumsActive.Initialize("", "");
\r
788 bViewerGuitarActive.Initialize("", "");
\r
789 bIsAllowedDoubleClickFullscreen.Initialize("", "");
\r
790 bIsEnabledSystemMenu.Initialize("", "");
\r
791 bDynamicBassMixerManagement.Initialize("", "");
\r
792 bDebugInfo.Initialize( "strCfgSysDebugInfo" );
\r
795 nSoundDeviceType.Initialize( "strCfgSysSoundDeviceType", typeof(ESoundDeviceTypeForConfig));
\r
796 eDamageLevel.Initialize( "strCfgSysDamageLevel", typeof(EDamage));
\r
797 eJudgePriority.Initialize( "strCfgSysJudgePriority", typeof(EJudgeDisplayPriority));
\r
798 eCYGroup.Initialize( "strCfgDrCYGroup", typeof(ECYGroup));
\r
799 eDark.Initialize( "strCfgSysDark", typeof(EDark));
\r
800 eFTGroup.Initialize( "strCfgDrFTGroup", typeof(EFTGroup));
\r
801 eHHGroup.Initialize( "strCfgDrHHGroup", typeof(EHHGroup));
\r
802 eBDGroup.Initialize( "strCfgDrBDGroup", typeof(EBDGroup));
\r
803 Backup1BDHHGroup.Initialize("", "", typeof(EHHGroup));
\r
804 Backup1BDPriotiry.Initialize("", "", typeof(EHitSoundPriority));
\r
805 eHitSoundPriorityCY.Initialize( "strCfgDrCYPriority", typeof(EHitSoundPriority));
\r
806 eHitSoundPriorityFT.Initialize( "strCfgDrFTPriority", typeof(EHitSoundPriority));
\r
807 eHitSoundPriorityHH.Initialize( "strCfgDrHHPriority", typeof(EHitSoundPriority));
\r
808 // eJudgePriority.Initialize("Judge Priority", Properties.Resources.strCfgSysJudgePriority, typeof(EJudgeDisplayPriority));
\r
809 eActiveInst.Initialize( "strCfgSysPlayMode", typeof(EActiveInstrument));
\r
810 nShowLagType.Initialize( "strCfgSysShowLagType", typeof(EShowLagType));
\r
812 eClickType.Initialize( "strCfgSysClickType", typeof( EClickType ) );
\r
813 nClickHighVolume.Initialize( "strCfgSysClickHighVolume", 0, 101 );
\r
814 nClickLowVolume.Initialize( "strCfgSysClickLowVolume", 0, 101 );
\r
818 nSleepPerFrameMs.Initialize( "strCfgSysSleepPerFrame", -1, 33 );
\r
819 nSleepUnfocusMs.Initialize( "strCfgSysSleepUnfocus", 0, 33 );
\r
820 nBGAlpha.Initialize( "strCfgSysBGAAlpha", 0, 256 );
\r
821 nPreSoundWeightMs.Initialize( "strCfgSysPreSoundWait", 0, 10001);
\r
822 nPreImageWeightMs.Initialize( "strCfgSysPreImageWait", 0, 10001);
\r
823 nFontSizeDotSongSelect.Initialize("", "", 5);
\r
824 nAutoVolume.Initialize( "strCfgSysAutoVolume", 0, 101);
\r
825 nChipVolume.Initialize( "strCfgSysChipVolume", 0, 101);
\r
826 nPlaySpeed.Initialize( "strCfgSysPlaySpeed", 5, 41);
\r
827 nPlaySpeed.ValueFormatter = (x) =>
\r
829 return "x" + (x / 20f).ToString("0.000");
\r
831 nHitRange.Perfect.Initialize( "strCfgRangePerfect", 0 );
\r
832 nHitRange.Great.Initialize( "strCfgRangeGreat", 0 );
\r
833 nHitRange.Good.Initialize( "strCfgRangeGood", 0 );
\r
834 nHitRange.Poor.Initialize( "strCfgRangePoor", 0 );
\r
835 nVelocityMin.LC.Initialize( "strCfgDrLCVelocityMin", 0, 128 );
\r
836 nVelocityMin.HH.Initialize( "strCfgDrHHVelocityMin", 0, 128 );
\r
837 nVelocityMin.SD.Initialize( "strCfgDrSDVelocityMin", 0, 128 );
\r
838 nVelocityMin.BD.Initialize( "strCfgDrBDVelocityMin", 0, 128 );
\r
839 nVelocityMin.HT.Initialize( "strCfgDrHTVelocityMin", 0, 128 );
\r
840 nVelocityMin.LT.Initialize( "strCfgDrLTVelocityMin", 0, 128 );
\r
841 nVelocityMin.FT.Initialize( "strCfgDrFTVelocityMin", 0, 128 );
\r
842 nVelocityMin.CY.Initialize( "strCfgDrCYVelocityMin", 0, 128 );
\r
843 nVelocityMin.RD.Initialize( "strCfgDrRDVelocityMin", 0, 128 );
\r
844 nRisky.Initialize( "strCfgSysRisky", 0, 100 );
\r
845 nWASAPIBufferSizeMs.Initialize( "strCfgSysWASAPIBufSize", 0, 100001);
\r
846 nChipDisplayTimeMs.Initialize("", "", 0);
\r
847 nChipFadeoutTimeMs.Initialize("", "", 0);
\r
849 nMasterVolume.Initialize( "strCfgSysMasterVolume", 0, 101);
\r
850 nPolyphonicSounds.Initialize( "strCfgSysPolyphonicSounds", 1, 11 );
\r
853 for (EPart i = EPart.Drums; i <= EPart.Unknown; i++)
\r
855 bEmphasizePlaySound[i].Initialize( "strCfgDgbChipSoundMonitor" );
\r
856 bReverse[i].Initialize( "strCfgDgbReverse" );
\r
857 eRandom[i].Initialize( "strCfgDgbRandom", typeof(ERandom) );
\r
858 bLight[i].Initialize( "strCfgDgbLight" );
\r
859 bDisplayCombo[i].Initialize( "strCfgDgbDisplayCombo" );
\r
860 bDisplayJudge[i].Initialize( "strCfgDgbDisplayJudge" );
\r
861 bGraph[i].Initialize( "strCfgDgbDisplayGraph" );
\r
862 nScrollSpeed[i].Initialize( "strCfgDgbScrollSpeed", 1, 101);
\r
863 nScrollSpeed[i].ValueFormatter = (x) =>
\r
865 return "x" + (x * 0.5f).ToString("0.0");
\r
867 nInputAdjustTimeMs[i].Initialize( "strCfgDgbInputAdjust", -99, 100);
\r
868 nJudgeLinePosOffset[i].Initialize("", "", -SampleFramework.GameWindowSize.Height, SampleFramework.GameWindowSize.Height + 1);
\r
869 nViewerScrollSpeed[i].Initialize("", "", 1, 101);
\r
870 nMinComboDisp[i].Initialize( "strCfgDgbMinComboDisp", 2, 100001);
\r
871 nSuddenFrom[i].Initialize( "strCfgDgbSuddenFrom", 0, SampleFramework.GameWindowSize.Height + 1);
\r
872 nHiddenFrom[i].Initialize( "strCfgDgbHiddenFrom", 0, SampleFramework.GameWindowSize.Height + 1);
\r
873 eAutoGhost[i].Initialize( "strCfgDgbAutoGhost", typeof(EAutoGhostData));
\r
874 eTargetGhost[i].Initialize( "strCfgDgbTargetGhost", typeof(ETargetGhostData));
\r
875 eSudHidInv[i].Initialize( "strCfgDgbSudHidInv", typeof(ESudHidInv));
\r
877 fJudgeLinePosOffsetBase[i].Initialize("", "");
\r
880 string[] asiodevs = CEnumerateAllAsioDevices.GetAllASIODevices();
\r
881 strASIODevice.Initialize( "strCfgSysASIODevice", asiodevs);
\r
884 cdInstX.Drums.Both.Initialize("strCfgDispDrumsXBoth", 0, 1 + SampleFramework.GameWindowSize.Width, crdStep);
\r
885 cdInstX.Drums.DrOnly.Initialize("strCfgDispDrumsXDr", 0, 1 + SampleFramework.GameWindowSize.Width, crdStep);
\r
886 cdInstX.Guitar.Both.Initialize("strCfgDispGuitarXBoth", 0, 1 + SampleFramework.GameWindowSize.Width, crdStep);
\r
887 cdInstX.Guitar.GBOnly.Initialize("strCfgDispGuitarXGB", 0, 1 + SampleFramework.GameWindowSize.Width, crdStep);
\r
888 cdInstX.Bass.Both.Initialize("strCfgDispBassXBoth", 0, 1 + SampleFramework.GameWindowSize.Width, crdStep);
\r
889 cdInstX.Bass.GBOnly.Initialize("strCfgDispBassXGB", 0, 1 + SampleFramework.GameWindowSize.Width, crdStep);
\r
891 cdDebugX.DrOnly.Initialize("strCfgDispDebugXDr", 0, 1 + SampleFramework.GameWindowSize.Width, crdStep);
\r
892 cdDebugX.Both.Initialize("strCfgDispDebugXBoth", 0, 1 + SampleFramework.GameWindowSize.Width, crdStep);
\r
893 cdDebugX.GBOnly.Initialize("strCfgDispDebugXGB", 0, 1 + SampleFramework.GameWindowSize.Width, crdStep);
\r
894 cdDebugY.DrOnly.Initialize("strCfgDispDebugYDr", 0, 1 + SampleFramework.GameWindowSize.Height, crdStep);
\r
895 cdDebugY.Both.Initialize("strCfgDispDebugYBoth", 0, 1 + SampleFramework.GameWindowSize.Height, crdStep);
\r
896 cdDebugY.GBOnly.Initialize("strCfgDispDebugYGB", 0, 1 + SampleFramework.GameWindowSize.Height, crdStep);
\r
898 cdMovieX.DrOnly.Initialize("strCfgDispMovieXDr", 0, 1 + SampleFramework.GameWindowSize.Width, crdStep);
\r
899 cdMovieX.Both.Initialize("strCfgDispMovieXBoth", 0, 1 + SampleFramework.GameWindowSize.Width, crdStep);
\r
900 cdMovieX.GBOnly.Initialize("strCfgDispMovieXGB", 0, 1 + SampleFramework.GameWindowSize.Width, crdStep);
\r
901 cdMovieY.DrOnly.Initialize("strCfgDispMovieYDr", 0, 1 + SampleFramework.GameWindowSize.Height, crdStep);
\r
902 cdMovieY.Both.Initialize("strCfgDispMovieYBoth", 0, 1 + SampleFramework.GameWindowSize.Height, crdStep);
\r
903 cdMovieY.GBOnly.Initialize("strCfgDispMovieYGB", 0, 1 + SampleFramework.GameWindowSize.Height, crdStep);
\r
905 cdComboX.Drums.Both.Initialize("strCfgDispDrComboXBoth", 0, 1 + SampleFramework.GameWindowSize.Width, crdStep);
\r
906 cdComboX.Drums.DrOnly.Initialize("strCfgDispDrComboXDr", 0, 1 + SampleFramework.GameWindowSize.Width, crdStep);
\r
907 cdComboX.Guitar.Both.Initialize("strCfgDispGtComboXBoth", 0, 1 + SampleFramework.GameWindowSize.Width, crdStep);
\r
908 cdComboX.Guitar.GBOnly.Initialize("strCfgDispGtComboXGB", 0, 1 + SampleFramework.GameWindowSize.Width, crdStep);
\r
909 cdComboX.Bass.Both.Initialize("strCfgDispBsComboXBoth", 0, 1 + SampleFramework.GameWindowSize.Width, crdStep);
\r
910 cdComboX.Bass.GBOnly.Initialize("strCfgDispBsComboXGB", 0, 1 + SampleFramework.GameWindowSize.Width, crdStep);
\r
912 cdComboY.Drums.Both.Initialize("strCfgDispDrComboYBoth", 0, 1 + SampleFramework.GameWindowSize.Height, crdStep);
\r
913 cdComboY.Drums.DrOnly.Initialize("strCfgDispDrComboYDr", 0, 1 + SampleFramework.GameWindowSize.Height, crdStep);
\r
914 cdComboY.Guitar.Both.Initialize("strCfgDispGtComboYBoth", 0, 1 + SampleFramework.GameWindowSize.Height, crdStep);
\r
915 cdComboY.Guitar.GBOnly.Initialize("strCfgDispGtComboYGB", 0, 1 + SampleFramework.GameWindowSize.Height, crdStep);
\r
916 cdComboY.Bass.Both.Initialize("strCfgDispBsComboYBoth", 0, 1 + SampleFramework.GameWindowSize.Height, crdStep);
\r
917 cdComboY.Bass.GBOnly.Initialize("strCfgDispBsComboYGB", 0, 1 + SampleFramework.GameWindowSize.Height, crdStep);
\r
919 cdJudgeLineY.Drums.Initialize("strCfgDispDrJudgeLine", 0, 1 + SampleFramework.GameWindowSize.Height, crdStep);
\r
920 cdJudgeLineY.Guitar.Initialize("strCfgDispGtJudgeLine", 0, 1 + SampleFramework.GameWindowSize.Height, crdStep);
\r
921 cdJudgeLineY.Bass.Initialize("strCfgDispBsJudgeLine", 0, 1 + SampleFramework.GameWindowSize.Height, crdStep);
\r
923 cdJudgeY.Drums.Initialize("strCfgDispDrJudge", 0, 1 + SampleFramework.GameWindowSize.Height, crdStep);
\r
924 cdJudgeY.Guitar.Initialize("strCfgDispGtJudge", 0, 1 + SampleFramework.GameWindowSize.Height, crdStep);
\r
925 cdJudgeY.Bass.Initialize("strCfgDispBsJudge", 0, 1 + SampleFramework.GameWindowSize.Height, crdStep);
\r
927 cdLaneOrder.LC.Initialize("strCfgDispLaneOrderLC", 0, 8);
\r
928 cdLaneOrder.HH.Initialize("strCfgDispLaneOrderHH", 0, 8);
\r
929 cdLaneOrder.SD.Initialize("strCfgDispLaneOrderSD", 0, 8);
\r
930 cdLaneOrder.BD.Initialize("strCfgDispLaneOrderBD", 0, 8);
\r
931 cdLaneOrder.HT.Initialize("strCfgDispLaneOrderHT", 0, 8);
\r
932 cdLaneOrder.LT.Initialize("strCfgDispLaneOrderLT", 0, 8);
\r
933 cdLaneOrder.FT.Initialize("strCfgDispLaneOrderFT", 0, 8);
\r
934 cdLaneOrder.CY.Initialize("strCfgDispLaneOrderCY", 0, 8);
\r
936 cdLaneOrder.GtR.Initialize("strCfgDispLaneOrderGtR", 0, 4);
\r
937 cdLaneOrder.GtG.Initialize("strCfgDispLaneOrderGtG", 0, 4);
\r
938 cdLaneOrder.GtB.Initialize("strCfgDispLaneOrderGtB", 0, 4);
\r
939 cdLaneOrder.GtW.Initialize("strCfgDispLaneOrderGtW", 0, 4);
\r
941 cdLaneOrder.BsR.Initialize("strCfgDispLaneOrderBsR", 0, 4);
\r
942 cdLaneOrder.BsG.Initialize("strCfgDispLaneOrderBsG", 0, 4);
\r
943 cdLaneOrder.BsB.Initialize("strCfgDispLaneOrderBsB", 0, 4);
\r
944 cdLaneOrder.BsW.Initialize("strCfgDispLaneOrderBsW", 0, 4);
\r
946 SetEnterDelegates();
\r
949 public CConfigXml()
\r
951 Deserializing(new StreamingContext());
\r
952 DefaultDeserializer(new StreamingContext());
\r
955 public void SetEnterDelegates()
\r
957 bFullScreen.OnEnterDelegate = () =>
\r
959 CDTXMania.Instance.b次のタイミングで全画面_ウィンドウ切り替えを行う = true;
\r
963 bVSyncWait.OnEnterDelegate = () =>
\r
965 CDTXMania.Instance.b次のタイミングで垂直帰線同期切り替えを行う = true;
\r
968 eBDGroup.OnEnterDelegate = () =>
\r
971 if (eBDGroup == EBDGroup.Group)
\r
973 // #27029 2012.1.5 from: 変更前の状態をバックアップする。
\r
974 Backup1BDHHGroup.Value = eHHGroup;
\r
975 Backup1BDPriotiry.Value = eHitSoundPriorityHH;
\r
977 // HH Group ... HH-0 → HH-2 / HH-1 → HH-3 / HH-2 → 変更なし / HH-3 → 変更なし
\r
978 if (eHHGroup == EHHGroup.Off)
\r
980 eHHGroup.Value = EHHGroup.LC_HH;
\r
982 if (eHHGroup == EHHGroup.HO_HC)
\r
984 eHHGroup.Value = EHHGroup.Group;
\r
987 // HH Priority ... C>P → 変更なし / P>C → C>P
\r
988 if (eHitSoundPriorityHH == EHitSoundPriority.Pad)
\r
990 eHitSoundPriorityHH.Value = EHitSoundPriority.Chip;
\r
995 eHHGroup = Backup1BDHHGroup;
\r
996 eHitSoundPriorityHH = Backup1BDPriotiry;
\r
1000 bUseBoxDefSkin.OnEnterDelegate = () =>
\r
1002 CSkin.bUseBoxDefSkin = bUseBoxDefSkin;
\r
1005 bBufferedInput.OnEnterDelegate = () =>
\r
1007 // #36433 2016.7.18 yyagi
\r
1008 // BufferedInputのON/OFFを切り替えると、OFFからONへの切り替えの際に、Enterが再入されてしまい
\r
1009 // OFFに戻ってしまう(つまり切り替えができない)問題への対策。
\r
1010 // BufferedInputの切り替え時に、入力バッファをクリアする処理を追加する。
\r
1012 ( CDTXMania.Instance.Pad.bDecidePadIsPressedDGB() ||
\r
1013 ( CDTXMania.Instance.ConfigIni.bEnterがキー割り当てのどこにも使用されていない &&
\r
1014 CDTXMania.Instance.Input管理.Keyboard.bキーが押された( (int) SlimDXKey.Return )
\r
1019 Thread.Sleep( 50 );
\r
1020 CDTXMania.Instance.Input管理.tポーリング(
\r
1021 CDTXMania.Instance.bApplicationActive, CDTXMania.Instance.ConfigIni.bBufferedInput );
\r
1028 public bool bConfigIniがないかDTXManiaのバージョンが異なる
\r
1032 return (!bConfigIniが存在している || !CDTXMania.VERSION.Equals(strDTXManiaVersion));
\r
1036 public bool bEnterがキー割り当てのどこにも使用されていない
\r
1040 for (EPad j = EPad.Min; j < EPad.Max; j++)
\r
1042 for (int k = 0; k < AssignableCodes; k++)
\r
1044 if ((KeyAssign[j][k].入力デバイス == EInputDevice.Keyboard) &&
\r
1045 (KeyAssign[j][k].コード == (int)SlimDXKey.Return))
\r
1055 public bool bウィンドウモード
\r
1059 return !this.bFullScreen;
\r
1063 this.bFullScreen.Value = !value;
\r
1067 public bool bGuitar有効
\r
1071 return eActiveInst == EActiveInstrument.GBOnly || eActiveInst == EActiveInstrument.Both;
\r
1075 public bool bDrums有効
\r
1079 return eActiveInst == EActiveInstrument.DrOnly || eActiveInst == EActiveInstrument.Both;
\r
1083 public bool b楽器有効(EPart inst)
\r
1085 if (inst == EPart.Drums)
\r
1089 else if (inst == EPart.Guitar || inst == EPart.Bass)
\r
1096 public bool bIsAutoPlay(EPart inst)
\r
1099 if (inst == EPart.Drums)
\r
1101 ret = bAutoPlay.IsAllTrue(EPart.Drums);
\r
1103 else if (inst == EPart.Guitar)
\r
1105 ret = bAutoPlay.IsAllTrue(EPart.Guitar);
\r
1107 else if (inst == EPart.Bass)
\r
1109 ret = bAutoPlay.IsAllTrue(EPart.Bass);
\r
1114 public bool b演奏情報を表示する
\r
1118 return this.bDebugInfo;
\r
1122 this.bDebugInfo.Value = value;
\r
1126 // #24063 2011.1.16 yyagi ギターとベースの切り替え
\r
1127 public bool bIsSwappedGuitarBass
\r
1133 // #24415 2011.2.21 yyagi FLIP中にalt-f4終了で、AUTOフラグがswapした状態でconfig.iniが出力されてしまうことを避けるためのフラグ
\r
1134 public bool bIsSwappedGuitarBass_AutoFlagsAreSwapped
\r
1140 // #35417 2015.8.18 yyagi FLIP中にalt-f4終了で、演奏設定がswapした状態でconfig.iniが出力されてしまうことを避けるためのフラグ
\r
1141 public bool bIsSwappedGuitarBass_PlaySettingsAreSwapped
\r
1147 public void SwapGuitarBassInfos_AutoFlags()
\r
1149 Func<EPad, EPad, bool> AutoSwapper = (x, y) =>
\r
1151 bool t = bAutoPlay[y];
\r
1152 bAutoPlay[y].Value = bAutoPlay[x];
\r
1153 bAutoPlay[x].Value = t;
\r
1157 AutoSwapper(EPad.GtR, EPad.BsR);
\r
1158 AutoSwapper(EPad.GtG, EPad.BsG);
\r
1159 AutoSwapper(EPad.GtB, EPad.BsB);
\r
1160 AutoSwapper(EPad.GtWail, EPad.BsWail);
\r
1161 AutoSwapper(EPad.GtPick, EPad.BsPick);
\r
1163 bIsSwappedGuitarBass_AutoFlagsAreSwapped = !bIsSwappedGuitarBass_AutoFlagsAreSwapped;
\r
1166 public void t指定した入力が既にアサイン済みである場合はそれを全削除する(EInputDevice DeviceType, int nID, int nCode)
\r
1168 for (EPad j = EPad.Min; j < EPad.Max; j++)
\r
1170 for (int k = 0; k < AssignableCodes; k++)
\r
1172 if (((KeyAssign[j][k].入力デバイス == DeviceType) &&
\r
1173 (KeyAssign[j][k].ID == nID)) &&
\r
1174 (KeyAssign[j][k].コード == nCode))
\r
1176 for (int m = k; m < AssignableCodes - 1; m++)
\r
1178 KeyAssign[j][m].CopyFrom(KeyAssign[j][m + 1].Value);
\r
1180 KeyAssign[j][AssignableCodes - 1].Reset();
\r
1187 private void ClearKeyAssign()
\r
1189 KeyAssign = new STPadValue<COptionKeyAssign[]>();
\r
1190 for (EPad j = EPad.Min; j < EPad.Max; ++j)
\r
1192 KeyAssign[j] = new COptionKeyAssign[AssignableCodes];
\r
1193 for (int k = 0; k < AssignableCodes; ++k)
\r
1195 KeyAssign[j][k] = new COptionKeyAssign();
\r
1199 private void SetDefaultKeyAssign()
\r
1201 if (KeyAssign == null)
\r
1206 SetKeyAssignFromString( strDefaultKeyAssign );
\r
1208 private void SetKeyAssignFromString( string strParam )
\r
1210 if (strParam == null)
\r
1214 string[] paramLines = strParam.Split( new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries );
\r
1215 if (paramLines.Length <= 1)
\r
1217 Debug.WriteLine( "デフォルトのキーアサインを設定できませんでした1: " + strParam );
\r
1221 Dictionary<string, EPad> dicStrEPad = new Dictionary<string, EPad>()
\r
1223 { "HH", EPad.HH },
\r
1224 { "SD", EPad.SD },
\r
1225 { "BD", EPad.BD },
\r
1226 { "HT", EPad.HT },
\r
1227 { "LT", EPad.LT },
\r
1228 { "FT", EPad.FT },
\r
1229 { "CY", EPad.CY },
\r
1230 { "HHO", EPad.HHO },
\r
1231 { "RD", EPad.RD },
\r
1232 { "LC", EPad.LC },
\r
1233 { "HP", EPad.HP },
\r
1234 { "GtR", EPad.GtR },
\r
1235 { "GtG", EPad.GtG },
\r
1236 { "GtB", EPad.GtB },
\r
1237 { "GtPick", EPad.GtPick },
\r
1238 { "GtWail", EPad.GtWail },
\r
1239 { "GtDecide", EPad.GtDecide },
\r
1240 { "GtCancel", EPad.GtCancel },
\r
1241 { "BsR", EPad.BsR },
\r
1242 { "BsG", EPad.BsG },
\r
1243 { "BsB", EPad.BsB },
\r
1244 { "BsPick", EPad.BsPick },
\r
1245 { "BsWail", EPad.BsWail },
\r
1246 { "BsDecide", EPad.BsDecide },
\r
1247 { "BsCancel", EPad.BsCancel },
\r
1248 { "Capture", EPad.Capture}
\r
1251 foreach ( string param in paramLines )
\r
1253 string[] tmp = param.Split( '=' );
\r
1254 if ( tmp.Length != 2 )
\r
1256 Debug.WriteLine( "デフォルトのキーアサインを設定できませんでした2: " + param );
\r
1260 string strPad = tmp[ 0 ];
\r
1261 string[] keys = tmp[ 1 ].Split( ',' );
\r
1262 if ( keys.Length <= 0 )
\r
1264 Debug.WriteLine( "デフォルトのキーアサインを設定できませんでした3: " + tmp[ 1 ] );
\r
1268 bool b = dicStrEPad.TryGetValue( strPad, out e );
\r
1271 Debug.WriteLine( "デフォルトキーアサインの文字列に誤りがあります1: " + strPad );
\r
1274 foreach ( string key in keys )
\r
1276 char cInputDevice = key[ 0 ];
\r
1278 switch (cInputDevice)
\r
1280 case 'K': eid = EInputDevice.Keyboard; break;
\r
1281 case 'M': eid = EInputDevice.MIDIIn; break;
\r
1282 case 'J': eid = EInputDevice.JoyPad; break;
\r
1283 case 'N': eid = EInputDevice.Mouse; break;
\r
1284 default: eid = EInputDevice.Unknown; break;
\r
1286 int nID = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ".IndexOf( key[ 1 ] ); // #24166 2011.1.15 yyagi: to support ID > 10, change 2nd character from Decimal to 36-numeral system. (e.g. J1023 -> JA23)
\r
1287 int nCode = Convert.ToInt32( key.Substring( 2 ) );
\r
1289 KeyAssign[ e ][ count ].Value.InputDevice = eid;
\r
1290 KeyAssign[ e ][ count ].Value.ID = nID;
\r
1291 KeyAssign[ e ][ count ].Value.Code = nCode;
\r
1294 // Debug.WriteLine( eid.ToString() + nID.ToString() + nCode.ToString() );
\r
1299 const string strDefaultKeyAssign = @"
\r
1301 SD=K033,M025,M026,M027,M028,M029,M031,M032,M034,M037,M038,M040,M0113
\r
1302 BD=K012,K0126,M033,M035,M036,M0112
\r
1305 FT=K023,M041,M043,M045
\r
1306 CY=K022,M049,M052,M055,M057,M091
\r
1307 HHO=K010,M046,M092
\r
1308 RD=K020,M051,M053,M059,M089
\r
1323 BsPick=K0103,K0100
\r
1330 private string GetRelativePath( string strBasePath, string strTargetPath )
\r
1332 string strRelativePath = strTargetPath;
\r
1335 Uri uri = new Uri( strBasePath );
\r
1336 strRelativePath = Uri.UnescapeDataString( uri.MakeRelativeUri( new Uri( strTargetPath ) ).ToString() ).Replace( '/', '\\' );
\r
1338 catch ( UriFormatException )
\r
1342 return strRelativePath;
\r