OSDN Git Service

#36057 ログ出力の初期設定値を変更。(通常ログON, 詳細ログOFF)
[dtxmania/dtxmania.git] / DTXManiaプロジェクト / コード / ステージ / 04.コンフィグ / CConfigXml.cs
1 using System.Collections.Generic;\r
2 using System.Threading;\r
3 using System.Runtime.Serialization;\r
4 using System;\r
5 using FDK;\r
6 \r
7 namespace DTXMania\r
8 {\r
9         /// <summary>\r
10         /// DataContract はフィールドまたはプロパティを XML にシリアライズできます。\r
11         /// DataMember が付いているメンバだけがシリアライズされます。シリアライズ可能な型については MSDN を参照してください。\r
12         /// DataMember が付いていないメンバはデシリアライズ時に別途指定される既定値になります。\r
13         /// これらは OnDeserialized 属性がついたメソッドで処理します。\r
14         /// \r
15         /// ---- 重要 ----\r
16         /// ・新しいバージョンで EnumMember, DataMember の 変数名を変更しないでください。\r
17         ///   変更しても以前の値を保持したい場合は Name プロパティ (EnumMember の場合 Value プロパティ) に前の名前を入力してください。\r
18         ///   (例 : [DataMember(Name="old_hoge")]。\r
19         /// ・DataMember の 型を変更しないでください。\r
20         /// ・使用しなくなった DataMember を削除しないでください。\r
21         /// ・デシリアライズで例外が起きた場合 Config.xml はリセットされます。\r
22         ///  \r
23         /// ---- 新しくオプションを追加する場合 ----\r
24         /// ・変数名は原則英語としてください。\r
25         /// ・DTXMania の新しいバージョンで DataMember を追加する場合 Order 属性値を設定してください。\r
26         ///  値は他の DataMember の Order 値の中でもっとも大きい値 +1 (無い場合 1 あるいは DTXMania のバージョン) としてください。\r
27         ///  (例: [DataMember(Order=1 / Order=105 etc.. )]public OptionInteger new_hoge;\r
28         ///  異なる DataMember が同じ Order 値を持っていても構いません。\r
29         /// ・DataMember に関連する型には原則 DataContract が必要です (enum など)。\r
30         ///  これがないと正しくシリアライズ / デシリアライズできません。\r
31         /// ・メンバは Deserializing メソッドでインスタンスを生成してください。\r
32         /// ・DefaultDeserializer で説明文や制約を設定 (Initialize メソッド) してください。\r
33         ///  ラベルや説明文は xml には書き出されませんので、デシリアライズ後にこの処理が必要です。\r
34         ///  このとき Initialize しようとしている値が null でないかチェックして、\r
35         ///  null であれば必ず Deserializing メソッド内と同様にインスタンスを生成してください。\r
36         /// ・CActConfigList で新しく追加した項目を list に追加してください。\r
37         /// </summary>\r
38         [DataContract]\r
39         public class CConfigXml : IExtensibleDataObject\r
40         {\r
41                 public static readonly int AssignableCodes = 16;\r
42 \r
43                 /// <summary>\r
44                 /// ExtensibleDataObject はラウンドトリップを有効にします。\r
45                 /// 前のバージョンの DTXMania で新しい Config.xml を読み込んだ時でも\r
46                 /// デシリアライズされなかったメンバの情報は失われません。\r
47                 /// </summary>\r
48                 private ExtensionDataObject extobj;\r
49                 public ExtensionDataObject ExtensionData\r
50                 {\r
51                         get\r
52                         {\r
53                                 return extobj;\r
54                         }\r
55                         set\r
56                         {\r
57                                 extobj = value;\r
58                         }\r
59                 }\r
60 \r
61                 [DataMember]\r
62                 public COptionBool bFullAVI;\r
63                 [DataMember]\r
64                 public COptionBool bAVI;\r
65                 [DataMember]\r
66                 public COptionBool bBGA;\r
67                 [DataMember]\r
68                 public COptionBool bBGMPlay;\r
69                 [DataMember]\r
70                 public COptionBool bLog;\r
71                 [DataMember]\r
72                 public COptionBool bLogDTX;\r
73                 [DataMember]\r
74                 public COptionBool bLogEnumerateSongs;\r
75                 [DataMember]\r
76                 public COptionBool bLogCreateRelease;\r
77                 [DataMember]\r
78                 public COptionEnum<EJudgeDisplayPriority> eJudgePriority;\r
79                 [DataMember]\r
80                 public COptionBool bScoreIni;\r
81                 [DataMember]\r
82                 public COptionBool bStageFailed;\r
83                 [DataMember]\r
84                 // #29500 2012.9.11 kairera0467 TIGHTモード\r
85                 public COptionBool bTight;\r
86                 [DataMember]\r
87                 public COptionBool bWaveAdjust;\r
88                 [DataMember]\r
89                 public COptionBool bCymbalFree;\r
90                 [DataMember]\r
91                 public COptionBool bStoicMode;\r
92                 [DataMember]\r
93                 public COptionBool bDrumsHitSound;\r
94                 [DataMember]\r
95                 public COptionBool bFillin;\r
96                 [DataMember]\r
97                 public COptionBool bRandSubBox;\r
98                 [DataMember]\r
99                 public COptionBool bDebugInfo;\r
100                 [DataMember]\r
101                 public COptionBool bAudience;\r
102                 [DataMember]\r
103                 public COptionBool bVSyncWait;\r
104                 [DataMember]\r
105                 public COptionBool bItalicFontSongSelect;\r
106                 [DataMember]\r
107                 public COptionBool bBoldFontSongSelect;\r
108                 [DataMember]\r
109                 public COptionBool bFullScreen;\r
110                 [DataMember]\r
111                 public COptionBool bViewerVSyncWait;\r
112                 [DataMember]\r
113                 public COptionBool bViewerShowDebugStatus;\r
114                 [DataMember]\r
115                 public COptionBool bViewerTimeStretch;\r
116                 [DataMember]\r
117                 public COptionBool bViewerDrumsActive;\r
118                 [DataMember]\r
119                 public COptionBool bViewerGuitarActive;\r
120                 [DataMember]\r
121                 public COptionBool bBufferedInput;\r
122                 [DataMember]\r
123                 // #25399 2011.6.9 yyagi リザルト画像自動保存機能ON/OFF\r
124                 public COptionBool bIsAutoResultCapture;\r
125                 [DataMember]\r
126                 // #28200 2012.5.1 yyagi System Menuの利用可否切替(使用可)\r
127                 public COptionBool bIsEnabledSystemMenu;\r
128                 [DataMember]\r
129                 // #28195 2012.5.6 yyagi box.defによるスキン切替機能を使用するか否か\r
130                 public COptionBool bUseBoxDefSkin;\r
131                 public bool bConfigIniが存在している;\r
132                 [DataMember]\r
133                 public COptionBool bLoadSoundSpeed;\r
134                 [DataMember]\r
135                 // #26752 2011.11.26 ダブルクリックでのフルスクリーンモード移行を許可\r
136                 public COptionBool bIsAllowedDoubleClickFullscreen;\r
137                 [DataMember]\r
138                 // #33689 2014.6.6 yyagi 演奏タイマーの種類,初期値はfalse (FDKのタイマー。FROM氏考案の独自タイマー)\r
139                 public COptionBool bUseOSTimer;\r
140                 [DataMember]\r
141                 // #24820\r
142                 public COptionBool bDynamicBassMixerManagement;\r
143                 [DataMember]\r
144                 // #23664 2013.2.24 yyagi ピッチ変更無しで再生速度を変更するかどうか,初期値はfalse (再生速度変更を、ピッチ変更にて行う)\r
145                 public COptionBool bTimeStretch;\r
146 \r
147 \r
148                 [DataMember]\r
149                 public COptionInteger nBGAlpha;\r
150                 [DataMember]\r
151                 public Coordinates.CRect rcWindow;\r
152                 [DataMember]\r
153                 public Coordinates.CRect rcViewerWindow;\r
154                 [DataMember]\r
155                 public COptionInteger nMasterVolume;\r
156                 [DataMember]\r
157                 public COptionInteger nSleepUnfocusMs;\r
158                 [DataMember]\r
159                 public COptionInteger nSleepPerFrameMs;\r
160                 [DataMember]\r
161                 public COptionInteger nPlaySpeed;\r
162                 [DataMember]\r
163                 public COptionInteger nPreSoundWeightMs;\r
164                 [DataMember]\r
165                 public COptionInteger nPreImageWeightMs;\r
166                 [DataMember]\r
167                 public COptionInteger nAutoVolume;\r
168                 [DataMember]\r
169                 public COptionInteger nChipVolume;\r
170                 [DataMember]\r
171                 public COptionInteger nFontSizeDotSongSelect;\r
172                 [DataMember]\r
173                 // #23559 2011.6.20 yyagi Riskyでの残ミス数。0で閉店\r
174                 public COptionInteger nRisky;\r
175                 [DataMember]\r
176                 // #32072 2013.10.24 yyagi Semi-Invisibleでの、チップ再表示期間\r
177                 public COptionInteger nChipDisplayTimeMs;\r
178                 [DataMember]\r
179                 // #32072 2013.10.24 yyagi Semi-Invisibleでの、チップフェードアウト時間\r
180                 public COptionInteger nChipFadeoutTimeMs;\r
181                 [DataMember]\r
182                 // #28228 2012.5.1 yyagi レーン毎の最大同時発音数 \r
183                 // #24820 2013.1.15 yyagi 初期値を4から2に変更。BASS.net使用時の負荷軽減のため。\r
184                 // #24820 2013.1.17 yyagi 初期値を4に戻した。動的なミキサー制御がうまく動作しているため。\r
185                 public COptionInteger nPoliphonicSounds;\r
186                 [DataMember]\r
187                 // #24820 2013.1.15 yyagi WASAPIのバッファサイズ 初期値は50(0で自動設定)\r
188                 public COptionInteger nWASAPIBufferSizeMs;\r
189 \r
190 \r
191                 [DataMember]\r
192                 public COptionEnum<ECYGroup> eCYGroup;\r
193                 [DataMember]\r
194                 public COptionEnum<EDark> eDark;\r
195                 [DataMember]\r
196                 public COptionEnum<EFTGroup> eFTGroup;\r
197                 [DataMember]\r
198                 public COptionEnum<EHHGroup> eHHGroup;\r
199                 [DataMember]\r
200                 // #27029 2012.1.4 from HHPedalとBassPedalのグルーピング\r
201                 public COptionEnum<EBDGroup> eBDGroup;\r
202                 [DataMember]\r
203                 public COptionEnum<EHitSoundPriority> eHitSoundPriorityCY;\r
204                 [DataMember]\r
205                 public COptionEnum<EHitSoundPriority> eHitSoundPriorityFT;\r
206                 [DataMember]\r
207                 public COptionEnum<EHitSoundPriority> eHitSoundPriorityHH;\r
208                 [DataMember]\r
209                 public COptionEnum<EActiveInstrument> eActiveInst;\r
210                 [DataMember]\r
211                 // #25370 2011.6.3 yyagi ズレ時間表示\r
212                 public COptionEnum<EShowLagType> nShowLagType;\r
213                 [DataMember]\r
214                 // #24820 2012.12.23 yyagi 初期値はACM | #31927 2013.8.25 yyagi OSにより初期値変更\r
215                 // 出力サウンドデバイス(0=ACM(にしたいが設計がきつそうならDirectShow), 1=ASIO, 2=WASAPI)\r
216                 public COptionEnum<ESoundDeviceTypeForConfig> nSoundDeviceType;\r
217                 [DataMember]\r
218                 // #27029 2012.1.5 from:\r
219                 // BDGroup が FP|BD→FP&BD に変化した際に自動変化するパラメータの値のバックアップ。FP&BD→FP|BD の時に元に戻す。\r
220                 // これらのバックアップ値は、BDGroup が FP&BD 状態の時にのみ Config.ini に出力され、BDGroup が FP|BD に戻ったら Config.ini から消える。\r
221                 public COptionEnum<EHHGroup> Backup1BDHHGroup;\r
222                 [DataMember]\r
223                 public COptionEnum<EHitSoundPriority> Backup1BDPriotiry;\r
224                 [DataMember]\r
225                 public COptionEnum<EDamage> eDamageLevel;\r
226 \r
227                 [DataMember]\r
228                 public COptionString strDTXManiaVersion;\r
229                 [DataMember]\r
230                 public COptionString strSongDataPath;\r
231                 [DataMember]\r
232                 public COptionString strFontSongSelect;\r
233                 [DataMember]\r
234                 // #28195 2012.5.2 yyagi 使用中のSkinサブフォルダ名\r
235                 public COptionString strSystemSkinSubfolderPath;\r
236 \r
237                 [DataMember]\r
238                 // #24820 2013.1.17 yyagi ASIOデバイス\r
239                 public COptionStringList strASIODevice;\r
240 \r
241                 [DataMember]\r
242                 public STDGBSValue<COptionBool> bLight;\r
243                 [DataMember]\r
244                 public STDGBSValue<COptionBool> bReverse;\r
245                 [DataMember]\r
246                 public STDGBSValue<COptionBool> bGraph;\r
247                 [DataMember]\r
248                 public STDGBSValue<COptionBool> bEmphasizePlaySound;\r
249                 [DataMember]\r
250                 public STDGBSValue<COptionEnum<EAutoGhostData>> eAutoGhost;\r
251                 [DataMember]\r
252                 public STDGBSValue<COptionEnum<ETargetGhostData>> eTargetGhost;\r
253                 [DataMember]\r
254                 public STDGBSValue<COptionEnum<ERandom>> eRandom;\r
255                 [DataMember]\r
256                 public STDGBSValue<COptionEnum<ESudHidInv>> eSudHidInv;\r
257                 [DataMember]\r
258                 public STDGBSValue<COptionInteger> nMinComboDisp;\r
259                 [DataMember]\r
260                 public STDGBSValue<COptionInteger> nScrollSpeed;\r
261                 [DataMember]\r
262                 // #23580\r
263                 public STDGBSValue<COptionInteger> nInputAdjustTimeMs;\r
264                 [DataMember]\r
265                 // #31602\r
266                 public STDGBSValue<COptionInteger> nJudgeLinePosOffset;\r
267                 [DataMember]\r
268                 public STDGBSValue<COptionInteger> nViewerScrollSpeed;\r
269                 [DataMember]\r
270                 // #31602\r
271                 public STDGBSValue<COptionFloat> fJudgeLinePosOffsetBase;\r
272 \r
273                 [DataMember]\r
274                 public COptionPadBool bAutoPlay;\r
275 \r
276                 [DataMember]\r
277                 // #23857 2011.1.31 yyagi VelocityMin\r
278                 public STPadValue<COptionInteger> nVelocityMin;\r
279                 [DataMember]\r
280                 public STPadValue<COptionKeyAssign[]> KeyAssign;\r
281                 [DataMember]\r
282                 public STJudgeValue<COptionInteger> nHitRange;\r
283                 [DataMember]\r
284                 public COptionDictionary<int, string> dicJoystick;\r
285 \r
286                 [DataMember]\r
287                 public STDGBSValue<COptionBool> bDisplayCombo;\r
288                 [DataMember]\r
289                 public STDGBSValue<COptionBool> bDisplayJudge;\r
290 \r
291                 /// <summary>\r
292                 /// 楽器左端座標。ここを基準に各パーツを配置する。\r
293                 /// </summary>\r
294                 [DataMember]\r
295                 public STDGBSValue<STInstValue<COptionInteger>> cdInstX;\r
296                 [DataMember]\r
297                 public STInstValue<COptionInteger> cdDebugX;\r
298                 [DataMember]\r
299                 public STInstValue<COptionInteger> cdDebugY;\r
300                 [DataMember]\r
301                 public STInstValue<COptionInteger> cdMovieX;\r
302                 [DataMember]\r
303                 public STInstValue<COptionInteger> cdMovieY;\r
304                 [DataMember]\r
305                 public STDGBSValue<STInstValue<COptionInteger>> cdComboX;\r
306                 [DataMember]\r
307                 public STDGBSValue<STInstValue<COptionInteger>> cdComboY;\r
308                 [DataMember]\r
309                 public STDGBSValue<COptionInteger> cdJudgeLineY;\r
310                 [DataMember]\r
311                 public STDGBSValue<COptionInteger> cdJudgeY;\r
312                 [DataMember]\r
313                 public STLaneValue<COptionInteger> cdLaneOrder;\r
314                 [DataMember]\r
315                 public STDGBSValue<COptionInteger> nSuddenFrom;\r
316                 [DataMember]\r
317                 public STDGBSValue<COptionInteger> nHiddenFrom;\r
318 \r
319 \r
320                 public int GetLaneX(ELane e)\r
321                 {\r
322                         EPart p = EPart.Drums;\r
323                         ELane start = ELane.DrumsLaneMin;\r
324                         ELane end = ELane.DrumsLaneMax;\r
325                         if (e >= ELane.GuitarLaneMin && e < ELane.GuitarLaneMax)\r
326                         {\r
327                                 p = EPart.Guitar;\r
328                                 start = ELane.GuitarLaneMin;\r
329                                 end = ELane.GuitarLaneMax;\r
330                         }\r
331                         if (e >= ELane.BassLaneMin && e < ELane.BassLaneMax)\r
332                         {\r
333                                 p = EPart.Bass;\r
334                                 start = ELane.BassLaneMin;\r
335                                 end = ELane.BassLaneMax;\r
336                         }\r
337                         int ret = cdInstX[p][eActiveInst];\r
338                         int order = cdLaneOrder[e];\r
339                         for (ELane t = start; t < end; ++t)\r
340                         {\r
341                                 if (cdLaneOrder[t] < order)\r
342                                 {\r
343                                         ret += GetLaneW(t);\r
344                                 }\r
345                         }\r
346                         return ret;\r
347                 }\r
348 \r
349                 public int GetLaneW(ELane e)\r
350                 {\r
351                         switch (e)\r
352                         {\r
353                                 case ELane.LC:\r
354                                 case ELane.CY:\r
355                                         return 85;\r
356                                 case ELane.BD:\r
357                                         return 99;\r
358                         }\r
359                         return 72;\r
360                 }\r
361 \r
362                 public void AdjustLaneOrders(EPart p)\r
363                 {\r
364                         ELane min = ELane.DrumsLaneMin;\r
365                         ELane max = ELane.DrumsLaneMax;\r
366                         if (p == EPart.Guitar)\r
367                         {\r
368                                 min = ELane.GuitarLaneMin;\r
369                                 max = ELane.GuitarLaneMax;\r
370                         }\r
371                         else if (p == EPart.Bass)\r
372                         {\r
373                                 min = ELane.BassLaneMin;\r
374                                 max = ELane.BassLaneMax;\r
375                         }\r
376 \r
377                         bool[] used = new bool[max - min];\r
378                         for (ELane t = min; t < max; ++t)\r
379                         {\r
380                                 used[cdLaneOrder[t]] = true;\r
381                         }\r
382                         for (int i = 0; i < used.Length; ++i)\r
383                         {\r
384                                 if (!used[i])\r
385                                 {\r
386                                         for (ELane t = min; t < max; ++t)\r
387                                         {\r
388                                                 for (ELane t2 = t + 1; t2 < max; ++t2)\r
389                                                 {\r
390                                                         if (cdLaneOrder[t].Value == cdLaneOrder[t2].Value)\r
391                                                         {\r
392                                                                 cdLaneOrder[t].Value = (int)(min + i);\r
393                                                                 used[i] = true;\r
394                                                                 break;\r
395                                                         }\r
396                                                 }\r
397                                                 if (used[i])\r
398                                                 {\r
399                                                         break;\r
400                                                 }\r
401                                         }\r
402                                 }\r
403                         }\r
404                 }\r
405 \r
406                 [OnDeserializing]\r
407                 public void Deserializing(StreamingContext sc)\r
408                 {\r
409                         // #xxxxx 2011.11.27 yyagi add\r
410                         // #23568 2010.11.04 ikanick add\r
411                         // #34069 2014.7.23 yyagi 初回起動時のwindow sizeは、CDTXMania側で設定する(-> 1280x720にする)\r
412                         // #30675 2013.02.04 ikanick add\r
413                         // #23580 2011.1.3 yyagi\r
414                         // #31602 2013.6.23 yyagi\r
415                         //this.strDTXManiaのバージョン = "Unknown";\r
416 \r
417                         // bool\r
418                         bFullScreen = new COptionBool(false);\r
419                         bVSyncWait = new COptionBool(true);\r
420                         bStageFailed = new COptionBool(true);\r
421                         bFullAVI = new COptionBool(false);\r
422                         bAVI = new COptionBool(true);\r
423                         bBGA = new COptionBool(true);\r
424                         bFillin = new COptionBool(true);\r
425                         bLogDTX = new COptionBool(true);\r
426                         bLogEnumerateSongs = new COptionBool(false);\r
427                         bLogCreateRelease = new COptionBool(false);\r
428                         bCymbalFree = new COptionBool(false);\r
429                         bStoicMode = new COptionBool(false);\r
430                         bItalicFontSongSelect = new COptionBool(false);\r
431                         bWaveAdjust = new COptionBool(true);\r
432                         bBGMPlay = new COptionBool(true);\r
433                         bDrumsHitSound = new COptionBool(true);\r
434                         bAudience = new COptionBool(true);\r
435                         bScoreIni = new COptionBool(true);\r
436                         bRandSubBox = new COptionBool(true);\r
437                         bBoldFontSongSelect = new COptionBool(true);\r
438                         bDebugInfo = new COptionBool(false);\r
439                         bLog = new COptionBool(true);\r
440                         bAutoPlay = new COptionPadBool();\r
441                         for (EPad pad = EPad.Min; pad < EPad.Max; ++pad)\r
442                         {\r
443                                 bAutoPlay[pad] = new COptionBool(false);\r
444                         }\r
445                         bViewerVSyncWait = new COptionBool(true);\r
446                         bViewerShowDebugStatus = new COptionBool(true);\r
447                         bViewerTimeStretch = new COptionBool(false);\r
448                         bViewerDrumsActive = new COptionBool(true);\r
449                         bViewerGuitarActive = new COptionBool(true);\r
450                         bLoadSoundSpeed = new COptionBool(true);\r
451                         bIsAutoResultCapture = new COptionBool(false);\r
452                         bBufferedInput = new COptionBool(true);\r
453                         bIsAllowedDoubleClickFullscreen = new COptionBool(true);\r
454                         bIsEnabledSystemMenu = new COptionBool(true);\r
455                         bUseBoxDefSkin = new COptionBool(true);\r
456                         bTight = new COptionBool(false);\r
457                         bUseOSTimer = new COptionBool(false);\r
458                         bDynamicBassMixerManagement = new COptionBool(true);\r
459                         bTimeStretch = new COptionBool(false);\r
460                         nSoundDeviceType = new COptionEnum<ESoundDeviceTypeForConfig>(FDK.COS.bIsVistaOrLater ? ESoundDeviceTypeForConfig.WASAPI : ESoundDeviceTypeForConfig.DSound);\r
461 \r
462                         // string\r
463                         strSongDataPath = new COptionString(@".\");\r
464                         strFontSongSelect = new COptionString("MS PGothic");\r
465                         strDTXManiaVersion = new COptionString(CDTXMania.VERSION);\r
466                         strSystemSkinSubfolderPath = new COptionString("");\r
467 \r
468                         // enum\r
469                         eDamageLevel = new COptionEnum<EDamage>(EDamage.Normal);\r
470                         eJudgePriority = new COptionEnum<EJudgeDisplayPriority>(EJudgeDisplayPriority.Under);\r
471                         eCYGroup = new COptionEnum<ECYGroup>(ECYGroup.None);\r
472                         eDark = new COptionEnum<EDark>(EDark.Off);\r
473                         eFTGroup = new COptionEnum<EFTGroup>(EFTGroup.None);\r
474                         eHHGroup = new COptionEnum<EHHGroup>(EHHGroup.None);\r
475                         eBDGroup = new COptionEnum<EBDGroup>(EBDGroup.None);\r
476                         Backup1BDHHGroup = new COptionEnum<EHHGroup>(EHHGroup.None);\r
477                         Backup1BDPriotiry = new COptionEnum<EHitSoundPriority>(EHitSoundPriority.Chip);\r
478                         eHitSoundPriorityCY = new COptionEnum<EHitSoundPriority>(EHitSoundPriority.Chip);\r
479                         eHitSoundPriorityFT = new COptionEnum<EHitSoundPriority>(EHitSoundPriority.Chip);\r
480                         eHitSoundPriorityHH = new COptionEnum<EHitSoundPriority>(EHitSoundPriority.Chip);\r
481                         eJudgePriority = new COptionEnum<EJudgeDisplayPriority>(EJudgeDisplayPriority.Under);\r
482                         eActiveInst = new COptionEnum<EActiveInstrument>(EActiveInstrument.Both);\r
483                         nShowLagType = new COptionEnum<EShowLagType>(EShowLagType.Off);\r
484 \r
485                         // integer\r
486                         rcWindow = new Coordinates.CRect(100, 100, 1280, 720);\r
487                         nSleepPerFrameMs = new COptionInteger(-1);\r
488                         nSleepUnfocusMs = new COptionInteger(1);\r
489                         nBGAlpha = new COptionInteger(200);\r
490                         nPreSoundWeightMs = new COptionInteger(1000);\r
491                         nPreImageWeightMs = new COptionInteger(100);\r
492                         nFontSizeDotSongSelect = new COptionInteger(20);\r
493                         nAutoVolume = new COptionInteger(80);\r
494                         nChipVolume = new COptionInteger(100);\r
495                         nPlaySpeed = new COptionInteger(20);\r
496 \r
497                         nHitRange = new STJudgeValue<COptionInteger>();\r
498                         nHitRange.Perfect = new COptionInteger(34);\r
499                         nHitRange.Great = new COptionInteger(67);\r
500                         nHitRange.Good = new COptionInteger(84);\r
501                         nHitRange.Poor = new COptionInteger(117);\r
502 \r
503                         nVelocityMin = new STPadValue<COptionInteger>();\r
504                         for (EPad pad = EPad.Min; pad < EPad.Max; ++pad)\r
505                         {\r
506                                 nVelocityMin[pad] = new COptionInteger(0);\r
507                         }\r
508                         nVelocityMin.HH.Value = 20;\r
509                         nRisky = new COptionInteger(0);\r
510                         nWASAPIBufferSizeMs = new COptionInteger(50);\r
511                         nChipDisplayTimeMs = new COptionInteger(3000);\r
512                         nChipFadeoutTimeMs = new COptionInteger(2000);\r
513                         rcViewerWindow = new Coordinates.CRect(100, 100, 1280, 720);\r
514                         nMasterVolume = new COptionInteger(100);\r
515                         nPoliphonicSounds = new COptionInteger(4);\r
516 \r
517                         // dgb\r
518                         bEmphasizePlaySound = new STDGBSValue<COptionBool>();\r
519                         bReverse = new STDGBSValue<COptionBool>();\r
520                         bLight = new STDGBSValue<COptionBool>();\r
521                         bGraph = new STDGBSValue<COptionBool>();\r
522                         bDisplayCombo = new STDGBSValue<COptionBool>();\r
523                         bDisplayJudge = new STDGBSValue<COptionBool>();\r
524 \r
525                         nScrollSpeed = new STDGBSValue<COptionInteger>();\r
526                         nMinComboDisp = new STDGBSValue<COptionInteger>();\r
527                         nInputAdjustTimeMs = new STDGBSValue<COptionInteger>();\r
528                         nJudgeLinePosOffset = new STDGBSValue<COptionInteger>();\r
529                         nSuddenFrom = new STDGBSValue<COptionInteger>();\r
530                         nHiddenFrom = new STDGBSValue<COptionInteger>();\r
531 \r
532                         eRandom = new STDGBSValue<COptionEnum<ERandom>>();\r
533                         eAutoGhost = new STDGBSValue<COptionEnum<EAutoGhostData>>();\r
534                         eTargetGhost = new STDGBSValue<COptionEnum<ETargetGhostData>>();\r
535                         eSudHidInv = new STDGBSValue<COptionEnum<ESudHidInv>>();\r
536 \r
537 \r
538                         for (EPart i = EPart.Drums; i <= EPart.Unknown; i++)\r
539                         {\r
540                                 bEmphasizePlaySound[i] = new COptionBool(true);\r
541                                 bReverse[i] = new COptionBool(false);\r
542                                 eRandom[i] = new COptionEnum<ERandom>(ERandom.Off);\r
543                                 bLight[i] = new COptionBool(false);\r
544                                 bGraph[i] = new COptionBool(false);\r
545                                 bDisplayJudge[i] = new COptionBool(true);\r
546                                 bDisplayCombo[i] = new COptionBool(true);\r
547 \r
548                                 nScrollSpeed[i] = new COptionInteger(1);\r
549                                 nInputAdjustTimeMs[i] = new COptionInteger(0);\r
550                                 nJudgeLinePosOffset[i] = new COptionInteger(0);\r
551                                 nViewerScrollSpeed[i] = new COptionInteger(1);\r
552                                 nMinComboDisp[i] = new COptionInteger(2);\r
553                                 nSuddenFrom[i] = new COptionInteger(450); // +100 FI\r
554                                 nHiddenFrom[i] = new COptionInteger(225); // +100 FO\r
555 \r
556                                 eAutoGhost[i] = new COptionEnum<EAutoGhostData>(EAutoGhostData.Perfect);\r
557                                 eTargetGhost[i] = new COptionEnum<ETargetGhostData>(ETargetGhostData.None);\r
558                                 eSudHidInv[i] = new COptionEnum<ESudHidInv>(ESudHidInv.Off);\r
559 \r
560                                 fJudgeLinePosOffsetBase[i] = new COptionFloat(0f);\r
561                         }\r
562 \r
563                         dicJoystick = new COptionDictionary<int, string>();\r
564                         dicJoystick.Value = new Dictionary<int, string>(10);\r
565 \r
566                         string[] asiodevs = CEnumerateAllAsioDevices.GetAllASIODevices();\r
567                         strASIODevice = new COptionStringList(asiodevs.Length > 0 ? asiodevs[0] : null);\r
568 \r
569 \r
570                         cdInstX = new STDGBSValue<STInstValue<COptionInteger>>();\r
571                         cdInstX.Drums = new STInstValue<COptionInteger>();\r
572                         cdInstX.Drums.DrOnly = new COptionInteger(SampleFramework.GameWindowSize.Width / 2 - 314);\r
573                         cdInstX.Guitar = new STInstValue<COptionInteger>();\r
574                         cdInstX.Guitar.GBOnly = new COptionInteger(480 - 72 * 4);\r
575                         cdInstX.Bass = new STInstValue<COptionInteger>();\r
576                         cdInstX.Bass.GBOnly = new COptionInteger(SampleFramework.GameWindowSize.Width - 480);\r
577                         cdInstX.Drums.Both = new COptionInteger(cdInstX.Drums.DrOnly);\r
578                         cdInstX.Guitar.Both = new COptionInteger(cdInstX.Guitar.GBOnly);\r
579                         cdInstX.Bass.Both = new COptionInteger(cdInstX.Bass.GBOnly);\r
580 \r
581                         cdDebugX = new STInstValue<COptionInteger>();\r
582                         cdDebugX.DrOnly = new COptionInteger(450 * 3);\r
583                         cdDebugX.Both = new COptionInteger(450 * 3);\r
584                         cdDebugX.GBOnly = new COptionInteger(cdInstX.Drums.DrOnly);\r
585 \r
586                         cdDebugY = new STInstValue<COptionInteger>();\r
587                         cdDebugY.Both = new COptionInteger(200);\r
588                         cdDebugY.DrOnly = new COptionInteger(200);\r
589                         cdDebugY.GBOnly = new COptionInteger(200);\r
590 \r
591                         cdMovieX = new STInstValue<COptionInteger>();\r
592                         cdMovieX.Both = new COptionInteger(619 + 682);\r
593                         cdMovieX.DrOnly = new COptionInteger(619 + 682);\r
594                         cdMovieX.GBOnly = new COptionInteger(682);\r
595 \r
596                         cdMovieY = new STInstValue<COptionInteger>();\r
597                         cdMovieY.Both = new COptionInteger(128);\r
598                         cdMovieY.DrOnly = new COptionInteger(128);\r
599                         cdMovieY.GBOnly = new COptionInteger(128);\r
600 \r
601                         cdComboX = new STDGBSValue<STInstValue<COptionInteger>>();\r
602                         cdComboX.Drums = new STInstValue<COptionInteger>();\r
603                         cdComboX.Drums.Both = new COptionInteger(cdInstX.Drums.Both + (72 * 5 + 85 * 2 + 99) / 2);\r
604                         cdComboX.Drums.DrOnly = new COptionInteger(cdInstX.Drums.DrOnly + (72 * 5 + 85 * 2 + 99) / 2);\r
605                         cdComboX.Guitar = new STInstValue<COptionInteger>();\r
606                         cdComboX.Guitar.Both = new COptionInteger(cdInstX.Guitar.Both + 72 * 2);\r
607                         cdComboX.Guitar.GBOnly = new COptionInteger(cdInstX.Guitar.GBOnly + 72 * 2);\r
608                         cdComboX.Bass = new STInstValue<COptionInteger>();\r
609                         cdComboX.Bass.Both = new COptionInteger(cdInstX.Bass.Both + 72 * 2);\r
610                         cdComboX.Bass.GBOnly = new COptionInteger(cdInstX.Bass.GBOnly + 72 * 2);\r
611 \r
612                         cdComboY = new STDGBSValue<STInstValue<COptionInteger>>();\r
613                         cdComboY.Drums = new STInstValue<COptionInteger>();\r
614                         cdComboY.Drums.Both = new COptionInteger(100);\r
615                         cdComboY.Drums.DrOnly = new COptionInteger(100);\r
616                         cdComboY.Guitar = new STInstValue<COptionInteger>();\r
617                         cdComboY.Guitar.Both = new COptionInteger(700);\r
618                         cdComboY.Guitar.GBOnly = new COptionInteger(700);\r
619                         cdComboY.Bass = new STInstValue<COptionInteger>();\r
620                         cdComboY.Bass.Both = new COptionInteger(700);\r
621                         cdComboY.Bass.GBOnly = new COptionInteger(700);\r
622 \r
623                         cdJudgeLineY = new STDGBSValue<COptionInteger>();\r
624                         cdJudgeLineY.Drums = new COptionInteger(942);\r
625                         cdJudgeLineY.Guitar = new COptionInteger(138);\r
626                         cdJudgeLineY.Bass = new COptionInteger(138);\r
627 \r
628                         cdJudgeY = new STDGBSValue<COptionInteger>();\r
629                         cdJudgeY.Drums = new COptionInteger(350);\r
630                         cdJudgeY.Guitar = new COptionInteger(600);\r
631                         cdJudgeY.Bass = new COptionInteger(600);\r
632 \r
633                         cdLaneOrder = new STLaneValue<COptionInteger>();\r
634                         for (ELane lane = ELane.DrumsLaneMin; lane < ELane.BassLaneMax; ++lane)\r
635                         {\r
636                                 cdLaneOrder[lane] = new COptionInteger(0);\r
637                         }\r
638 \r
639                         cdLaneOrder.HH.Value = 1;\r
640                         cdLaneOrder.SD.Value = 2;\r
641                         cdLaneOrder.BD.Value = 3;\r
642                         cdLaneOrder.HT.Value = 4;\r
643                         cdLaneOrder.LT.Value = 5;\r
644                         cdLaneOrder.FT.Value = 6;\r
645                         cdLaneOrder.CY.Value = 7;\r
646 \r
647                         cdLaneOrder.GtG.Value = 1;\r
648                         cdLaneOrder.GtB.Value = 2;\r
649                         cdLaneOrder.GtW.Value = 3;\r
650 \r
651                         cdLaneOrder.BsG.Value = 1;\r
652                         cdLaneOrder.BsR.Value = 2;\r
653                         cdLaneOrder.BsW.Value = 3;\r
654 \r
655                         bConfigIniが存在している = System.IO.File.Exists(CDTXMania.Instance.strEXEのあるフォルダ + "Config.xml");\r
656                         ClearKeyAssign();\r
657                 }\r
658 \r
659                 /// <summary>\r
660                 /// 保存する必要がない値はここで設定してください。\r
661                 /// 設定しない場合 DataMember 以外のメンバはすべてその型の規定値になります。\r
662                 /// </summary>\r
663                 /// <param name="sc">ストリーミングコンテキスト。使用しません。</param>\r
664                 [OnDeserialized]\r
665                 public void DefaultDeserializer(StreamingContext sc)\r
666                 {\r
667                         // ラベル・説明文・上下限値\r
668                         bFullScreen.Initialize("FullScreen", Properties.Resources.strCfgSysFullScreen);\r
669                         bVSyncWait.Initialize("VSyncWait", Properties.Resources.strCfgSysVSync);\r
670                         bStageFailed.Initialize("StageFailed", Properties.Resources.strCfgSysStageFailed);\r
671                         bFullAVI.Initialize("FullAVI", Properties.Resources.strCfgSysFullAVI);\r
672                         bAVI.Initialize("AVI", Properties.Resources.strCfgSysAVI);\r
673                         bBGA.Initialize("BGA", Properties.Resources.strCfgSysBGA);\r
674                         bLog.Initialize("Log", Properties.Resources.strCfgSysLog);\r
675                         bStoicMode.Initialize("Stoic", Properties.Resources.strCfgSysStoic);\r
676                         bWaveAdjust.Initialize("AdjustWaves", Properties.Resources.strCfgSysAdjustWaves);\r
677                         bBGMPlay.Initialize("BGM", Properties.Resources.strCfgSysBGM);\r
678                         bAudience.Initialize("Audience", Properties.Resources.strCfgSysAudience);\r
679                         bScoreIni.Initialize("SaveRecord", Properties.Resources.strCfgSysSaveScoreIni);\r
680                         bRandSubBox.Initialize("RandSubBox", Properties.Resources.strCfgSysRandSubBox);\r
681                         bAutoPlay.HH.Initialize("HiHat(Close)", Properties.Resources.strCfgDrAutoHHC);\r
682                         bAutoPlay.HHO.Initialize("HiHat(Open)", Properties.Resources.strCfgDrAutoHHO);\r
683                         bAutoPlay.SD.Initialize("Snare", Properties.Resources.strCfgDrAutoSD);\r
684                         bAutoPlay.BD.Initialize("Kick", Properties.Resources.strCfgDrAutoBD);\r
685                         bAutoPlay.HT.Initialize("HighTom", Properties.Resources.strCfgDrAutoHT);\r
686                         bAutoPlay.LT.Initialize("LowTom", Properties.Resources.strCfgDrAutoLT);\r
687                         bAutoPlay.FT.Initialize("FloorTom", Properties.Resources.strCfgDrAutoFT);\r
688                         bAutoPlay.CY.Initialize("Cymbal", Properties.Resources.strCfgAutoCY);\r
689                         bAutoPlay.RD.Initialize("RideCymbal", Properties.Resources.strCfgAutoRD);\r
690                         bAutoPlay.LC.Initialize("LeftCymbal", Properties.Resources.strCfgAutoLCY);\r
691                         bAutoPlay.GtR.Initialize("R", Properties.Resources.strCfgGtAutoR);\r
692                         bAutoPlay.GtG.Initialize("G", Properties.Resources.strCfgGtAutoG);\r
693                         bAutoPlay.GtB.Initialize("B", Properties.Resources.strCfgGtAutoB);\r
694                         bAutoPlay.GtPick.Initialize("Pick", Properties.Resources.strCfgGtAutoPick);\r
695                         bAutoPlay.GtWail.Initialize("Wailing", Properties.Resources.strCfgGtAutoWailing);\r
696                         bAutoPlay.BsR.Initialize("R", Properties.Resources.strCfgBsAutoR);\r
697                         bAutoPlay.BsG.Initialize("G", Properties.Resources.strCfgBsAutoG);\r
698                         bAutoPlay.BsB.Initialize("B", Properties.Resources.strCfgBsAutoB);\r
699                         bAutoPlay.BsPick.Initialize("Pick", Properties.Resources.strCfgBsAutoPick);\r
700                         bAutoPlay.BsWail.Initialize("Wailing", Properties.Resources.strCfgBsAutoWailing);\r
701                         bLoadSoundSpeed.Initialize("SoundLoadLimiter", Properties.Resources.strCfgSysSoundLoadLimiter);\r
702                         bIsAutoResultCapture.Initialize("AutoResultCapture", Properties.Resources.strCfgSysAutoResultCapture);\r
703                         bBufferedInput.Initialize("BufferingInput", Properties.Resources.strCfgSysBufferingInput);\r
704                         bUseBoxDefSkin.Initialize("UseBoxSkin", Properties.Resources.strCfgSysUseBoxDefSkin);\r
705                         bUseOSTimer.Initialize("UseOSTimer", Properties.Resources.strCfgSysUseOSTimer);\r
706                         bTimeStretch.Initialize("TimeStretch", Properties.Resources.strCfgSysTimeStretch);\r
707 \r
708                         bCymbalFree.Initialize("CymbalFree", Properties.Resources.strCfgDrCymbalFree);\r
709                         bDrumsHitSound.Initialize("DrumsChipSound", Properties.Resources.strCfgDrChipSound);\r
710                         bFillin.Initialize("Fillin", Properties.Resources.strCfgDrFillin);\r
711                         bTight.Initialize("Tight", Properties.Resources.strCfgDrTight);\r
712 \r
713                         bItalicFontSongSelect.Initialize("", "");\r
714                         bBoldFontSongSelect.Initialize("", "");\r
715                         bLogDTX.Initialize("", "");\r
716                         bLogEnumerateSongs.Initialize("", "");\r
717                         bLogCreateRelease.Initialize("", "");\r
718                         bViewerVSyncWait.Initialize("", "");\r
719                         bViewerShowDebugStatus.Initialize("", "");\r
720                         bViewerTimeStretch.Initialize("", "");\r
721                         bViewerDrumsActive.Initialize("", "");\r
722                         bViewerGuitarActive.Initialize("", "");\r
723                         bIsAllowedDoubleClickFullscreen.Initialize("", "");\r
724                         bIsEnabledSystemMenu.Initialize("", "");\r
725                         bDynamicBassMixerManagement.Initialize("", "");\r
726                         bDebugInfo.Initialize("DebugInfo", Properties.Resources.strCfgSysDebugInfo);\r
727 \r
728                         // enum\r
729                         nSoundDeviceType.Initialize("SoundDevice", Properties.Resources.strCfgSysSoundDeviceType, typeof(ESoundDeviceTypeForConfig));\r
730                         eDamageLevel.Initialize("DamageLevel", Properties.Resources.strCfgSysDamageLevel, typeof(EDamage));\r
731                         eJudgePriority.Initialize("JudgePriority", Properties.Resources.strCfgSysJudgePriority, typeof(EJudgeDisplayPriority));\r
732                         eCYGroup.Initialize("CY Grouping", Properties.Resources.strCfgDrCYGroup, typeof(ECYGroup));\r
733                         eDark.Initialize("Dark", Properties.Resources.strCfgSysDark, typeof(EDark));\r
734                         eFTGroup.Initialize("FT Grouping", Properties.Resources.strCfgDrFTGroup, typeof(EFTGroup));\r
735                         eHHGroup.Initialize("HH Grouping", Properties.Resources.strCfgDrHHGroup, typeof(EHHGroup));\r
736                         eBDGroup.Initialize("BD Grouping", Properties.Resources.strCfgDrBDGroup, typeof(EBDGroup));\r
737                         Backup1BDHHGroup.Initialize("", "", typeof(EHHGroup));\r
738                         Backup1BDPriotiry.Initialize("", "", typeof(EHitSoundPriority));\r
739                         eHitSoundPriorityCY.Initialize("CY Priority", Properties.Resources.strCfgDrCYPriority, typeof(EHitSoundPriority));\r
740                         eHitSoundPriorityFT.Initialize("FT Priority", Properties.Resources.strCfgDrFTPriority, typeof(EHitSoundPriority));\r
741                         eHitSoundPriorityHH.Initialize("HH Priority", Properties.Resources.strCfgDrHHPriority, typeof(EHitSoundPriority));\r
742                         eJudgePriority.Initialize("Judge Priority", Properties.Resources.strCfgSysJudgePriority, typeof(EJudgeDisplayPriority));\r
743                         eActiveInst.Initialize("PlayMode", Properties.Resources.strCfgSysPlayMode, typeof(EActiveInstrument));\r
744                         nShowLagType.Initialize("ShowLagType", Properties.Resources.strCfgSysShowLagType, typeof(EShowLagType));\r
745 \r
746                         // integer\r
747                         nSleepPerFrameMs.Initialize("", "");\r
748                         nSleepUnfocusMs.Initialize("", "");\r
749                         nBGAlpha.Initialize("BGAlpha", Properties.Resources.strCfgSysBGAAlpha, 0, 255);\r
750                         nPreSoundWeightMs.Initialize("PreSoundWait", Properties.Resources.strCfgSysPreSoundWait, 0, 10001);\r
751                         nPreImageWeightMs.Initialize("PreImageWait", Properties.Resources.strCfgSysPreImageWait, 0, 10001);\r
752                         nFontSizeDotSongSelect.Initialize("", "", 5);\r
753                         nAutoVolume.Initialize("AutoVolume", Properties.Resources.strCfgSysAutoVolume, 0, 101);\r
754                         nChipVolume.Initialize("ChipVolume", Properties.Resources.strCfgSysChipVolume, 0, 101);\r
755                         nPlaySpeed.Initialize("PlaySpeed", Properties.Resources.strCfgSysPlaySpeed, 5, 41);\r
756                         nPlaySpeed.ValueFormatter = (x) =>\r
757                         {\r
758                                 return "x" + (x / 20f).ToString("0.000");\r
759                         };\r
760                         nHitRange.Perfect.Initialize("", "", 0);\r
761                         nHitRange.Great.Initialize("", "", 0);\r
762                         nHitRange.Good.Initialize("", "", 0);\r
763                         nHitRange.Poor.Initialize("", "", 0);\r
764                         nVelocityMin.LC.Initialize("", "", 0, 128);\r
765                         nVelocityMin.HH.Initialize("", "", 0, 128);\r
766                         nVelocityMin.SD.Initialize("", "", 0, 128);\r
767                         nVelocityMin.BD.Initialize("", "", 0, 128);\r
768                         nVelocityMin.HT.Initialize("", "", 0, 128);\r
769                         nVelocityMin.LT.Initialize("", "", 0, 128);\r
770                         nVelocityMin.FT.Initialize("", "", 0, 128);\r
771                         nVelocityMin.CY.Initialize("", "", 0, 128);\r
772                         nVelocityMin.RD.Initialize("", "", 0, 128);\r
773                         nRisky.Initialize("Risky", Properties.Resources.strCfgSysRisky, 0, 31);\r
774                         nWASAPIBufferSizeMs.Initialize("WASAPIBufSize", Properties.Resources.strCfgSysWASAPIBufSize, 0, 100001);\r
775                         nChipDisplayTimeMs.Initialize("", "", 0);\r
776                         nChipFadeoutTimeMs.Initialize("", "", 0);\r
777 \r
778                         nMasterVolume.Initialize("MasterVolume", Properties.Resources.strCfgSysMasterVolume, 0, 101);\r
779                         nPoliphonicSounds.Initialize("", "", 1, 11);\r
780 \r
781                         // dgb\r
782                         for (EPart i = EPart.Drums; i <= EPart.Unknown; i++)\r
783                         {\r
784                                 bEmphasizePlaySound[i].Initialize("ChipSoundMonitor", Properties.Resources.strCfgDgbChipSoundMonitor);\r
785                                 bReverse[i].Initialize("Reverse", Properties.Resources.strCfgDgbReverse);\r
786                                 eRandom[i].Initialize("Random", Properties.Resources.strCfgDgbRandom, typeof(ERandom));\r
787                                 bLight[i].Initialize("Light", Properties.Resources.strCfgDgbLight);\r
788                                 bDisplayCombo[i].Initialize("DisplayCombo", Properties.Resources.strCfgDgbDisplayCombo);\r
789                                 bDisplayJudge[i].Initialize("DisplayJudge", Properties.Resources.strCfgDgbDisplayJudge);\r
790                                 bGraph[i].Initialize("Graph", Properties.Resources.strCfgDgbDisplayGraph);\r
791                                 nScrollSpeed[i].Initialize("ScrollSpeed", Properties.Resources.strCfgDgbScrollSpeed, 1, 101);\r
792                                 nScrollSpeed[i].ValueFormatter = (x) =>\r
793                                         {\r
794                                                 return "x" + (x * 0.5f).ToString("0.0");\r
795                                         };\r
796                                 nInputAdjustTimeMs[i].Initialize("InputAdjust", Properties.Resources.strCfgDgbInputAdjust, -99, 100);\r
797                                 nJudgeLinePosOffset[i].Initialize("", "", -SampleFramework.GameWindowSize.Height, SampleFramework.GameWindowSize.Height + 1);\r
798                                 nViewerScrollSpeed[i].Initialize("", "", 1, 101);\r
799                                 nMinComboDisp[i].Initialize("MinComboDisp", Properties.Resources.strCfgDgbMinComboDisp, 2, 100001);\r
800                                 nSuddenFrom[i].Initialize("SudFrom", Properties.Resources.strCfgDgbSuddenFrom, 0, SampleFramework.GameWindowSize.Height + 1);\r
801                                 nHiddenFrom[i].Initialize("HidFrom", Properties.Resources.strCfgDgbHiddenFrom, 0, SampleFramework.GameWindowSize.Height + 1);\r
802                                 eAutoGhost[i].Initialize("AutoGhost", Properties.Resources.strCfgDgbAutoGhost, typeof(EAutoGhostData));\r
803                                 eTargetGhost[i].Initialize("TargetGhost", Properties.Resources.strCfgDgbTargetGhost, typeof(ETargetGhostData));\r
804                                 eSudHidInv[i].Initialize("SudHidInv", Properties.Resources.strCfgDgbSudHidInv, typeof(ESudHidInv));\r
805 \r
806                                 fJudgeLinePosOffsetBase[i].Initialize("", "");\r
807                         }\r
808 \r
809                         string[] asiodevs = CEnumerateAllAsioDevices.GetAllASIODevices();\r
810                         strASIODevice.Initialize("ASIODevice", Properties.Resources.strCfgSysASIODevice, asiodevs);\r
811 \r
812                         int crdStep = 10;\r
813                         cdInstX.Drums.Both.Initialize("DrumsX(Both)", Properties.Resources.strCfgDispDrumsXBoth, 0, 1 + SampleFramework.GameWindowSize.Width, crdStep);\r
814                         cdInstX.Drums.DrOnly.Initialize("DrumsX(Dr)", Properties.Resources.strCfgDispDrumsXDr, 0, 1 + SampleFramework.GameWindowSize.Width, crdStep);\r
815                         cdInstX.Guitar.Both.Initialize("GuitarX(Both)", Properties.Resources.strCfgDispGuitarXBoth, 0, 1 + SampleFramework.GameWindowSize.Width, crdStep);\r
816                         cdInstX.Guitar.GBOnly.Initialize("GuitarX(GB)", Properties.Resources.strCfgDispGuitarXGB, 0, 1 + SampleFramework.GameWindowSize.Width, crdStep);\r
817                         cdInstX.Bass.Both.Initialize("BassX(Both)", Properties.Resources.strCfgDispBassXBoth, 0, 1 + SampleFramework.GameWindowSize.Width, crdStep);\r
818                         cdInstX.Bass.GBOnly.Initialize("BassX(GB)", Properties.Resources.strCfgDispBassXGB, 0, 1 + SampleFramework.GameWindowSize.Width, crdStep);\r
819 \r
820                         cdDebugX.DrOnly.Initialize("DebugX(Dr)", Properties.Resources.strCfgDispDebugXDr, 0, 1 + SampleFramework.GameWindowSize.Width, crdStep);\r
821                         cdDebugX.Both.Initialize("DebugX(Both)", Properties.Resources.strCfgDispDebugXBoth, 0, 1 + SampleFramework.GameWindowSize.Width, crdStep);\r
822                         cdDebugX.GBOnly.Initialize("DebugX(GB)", Properties.Resources.strCfgDispDebugXGB, 0, 1 + SampleFramework.GameWindowSize.Width, crdStep);\r
823                         cdDebugY.DrOnly.Initialize("DebugY(Dr)", Properties.Resources.strCfgDispDebugYDr, 0, 1 + SampleFramework.GameWindowSize.Height, crdStep);\r
824                         cdDebugY.Both.Initialize("DebugY(Both)", Properties.Resources.strCfgDispDebugYBoth, 0, 1 + SampleFramework.GameWindowSize.Height, crdStep);\r
825                         cdDebugY.GBOnly.Initialize("DebugY(GB)", Properties.Resources.strCfgDispDebugYGB, 0, 1 + SampleFramework.GameWindowSize.Height, crdStep);\r
826 \r
827                         cdMovieX.DrOnly.Initialize("MovieX(Dr)", Properties.Resources.strCfgDispMovieXDr, 0, 1 + SampleFramework.GameWindowSize.Width, crdStep);\r
828                         cdMovieX.Both.Initialize("MovieX(Both)", Properties.Resources.strCfgDispMovieXBoth, 0, 1 + SampleFramework.GameWindowSize.Width, crdStep);\r
829                         cdMovieX.GBOnly.Initialize("MovieX(GB)", Properties.Resources.strCfgDispMovieXGB, 0, 1 + SampleFramework.GameWindowSize.Width, crdStep);\r
830                         cdMovieY.DrOnly.Initialize("MovieY(Dr)", Properties.Resources.strCfgDispMovieYDr, 0, 1 + SampleFramework.GameWindowSize.Height, crdStep);\r
831                         cdMovieY.Both.Initialize("MovieY(Both)", Properties.Resources.strCfgDispMovieYBoth, 0, 1 + SampleFramework.GameWindowSize.Height, crdStep);\r
832                         cdMovieY.GBOnly.Initialize("MovieY(GB)", Properties.Resources.strCfgDispMovieYGB, 0, 1 + SampleFramework.GameWindowSize.Height, crdStep);\r
833 \r
834                         cdComboX.Drums.Both.Initialize("ComboX(Both)", Properties.Resources.strCfgDispDrComboXBoth, 0, 1 + SampleFramework.GameWindowSize.Width, crdStep);\r
835                         cdComboX.Drums.DrOnly.Initialize("ComboX(Dr)", Properties.Resources.strCfgDispDrComboXDr, 0, 1 + SampleFramework.GameWindowSize.Width, crdStep);\r
836                         cdComboX.Guitar.Both.Initialize("ComboX(Both)", Properties.Resources.strCfgDispGtComboXBoth, 0, 1 + SampleFramework.GameWindowSize.Width, crdStep);\r
837                         cdComboX.Guitar.GBOnly.Initialize("ComboX(GB)", Properties.Resources.strCfgDispGtComboXGB, 0, 1 + SampleFramework.GameWindowSize.Width, crdStep);\r
838                         cdComboX.Bass.Both.Initialize("ComboX(Both)", Properties.Resources.strCfgDispBsComboXBoth, 0, 1 + SampleFramework.GameWindowSize.Width, crdStep);\r
839                         cdComboX.Bass.GBOnly.Initialize("ComboX(GB)", Properties.Resources.strCfgDispBsComboXGB, 0, 1 + SampleFramework.GameWindowSize.Width, crdStep);\r
840 \r
841                         cdComboY.Drums.Both.Initialize("ComboY(Both)", Properties.Resources.strCfgDispDrComboYBoth, 0, 1 + SampleFramework.GameWindowSize.Height, crdStep);\r
842                         cdComboY.Drums.DrOnly.Initialize("ComboY(Dr)", Properties.Resources.strCfgDispDrComboYDr, 0, 1 + SampleFramework.GameWindowSize.Height, crdStep);\r
843                         cdComboY.Guitar.Both.Initialize("ComboY(Both)", Properties.Resources.strCfgDispGtComboYBoth, 0, 1 + SampleFramework.GameWindowSize.Height, crdStep);\r
844                         cdComboY.Guitar.GBOnly.Initialize("ComboY(GB)", Properties.Resources.strCfgDispGtComboYGB, 0, 1 + SampleFramework.GameWindowSize.Height, crdStep);\r
845                         cdComboY.Bass.Both.Initialize("ComboY(Both)", Properties.Resources.strCfgDispBsComboYBoth, 0, 1 + SampleFramework.GameWindowSize.Height, crdStep);\r
846                         cdComboY.Bass.GBOnly.Initialize("ComboY(GB)", Properties.Resources.strCfgDispBsComboYGB, 0, 1 + SampleFramework.GameWindowSize.Height, crdStep);\r
847 \r
848                         cdJudgeLineY.Drums.Initialize("JudgeLine", Properties.Resources.strCfgDispDrJudgeLine, 0, 1 + SampleFramework.GameWindowSize.Height, crdStep);\r
849                         cdJudgeLineY.Guitar.Initialize("JudgeLine", Properties.Resources.strCfgDispGtJudgeLine, 0, 1 + SampleFramework.GameWindowSize.Height, crdStep);\r
850                         cdJudgeLineY.Bass.Initialize("JudgeLine", Properties.Resources.strCfgDispBsJudgeLine, 0, 1 + SampleFramework.GameWindowSize.Height, crdStep);\r
851 \r
852                         cdJudgeY.Drums.Initialize("Judge", Properties.Resources.strCfgDispDrJudge, 0, 1 + SampleFramework.GameWindowSize.Height, crdStep);\r
853                         cdJudgeY.Guitar.Initialize("Judge", Properties.Resources.strCfgDispGtJudge, 0, 1 + SampleFramework.GameWindowSize.Height, crdStep);\r
854                         cdJudgeY.Bass.Initialize("Judge", Properties.Resources.strCfgDispBsJudge, 0, 1 + SampleFramework.GameWindowSize.Height, crdStep);\r
855 \r
856                         cdLaneOrder.LC.Initialize("LC Order", Properties.Resources.strCfgDispLaneOrderLC, 0, 8);\r
857                         cdLaneOrder.HH.Initialize("HH Order", Properties.Resources.strCfgDispLaneOrderHH, 0, 8);\r
858                         cdLaneOrder.SD.Initialize("SD Order", Properties.Resources.strCfgDispLaneOrderSD, 0, 8);\r
859                         cdLaneOrder.BD.Initialize("BD Order", Properties.Resources.strCfgDispLaneOrderBD, 0, 8);\r
860                         cdLaneOrder.HT.Initialize("HT Order", Properties.Resources.strCfgDispLaneOrderHT, 0, 8);\r
861                         cdLaneOrder.LT.Initialize("LT Order", Properties.Resources.strCfgDispLaneOrderLT, 0, 8);\r
862                         cdLaneOrder.FT.Initialize("FT Order", Properties.Resources.strCfgDispLaneOrderFT, 0, 8);\r
863                         cdLaneOrder.CY.Initialize("CY Order", Properties.Resources.strCfgDispLaneOrderCY, 0, 8);\r
864 \r
865                         cdLaneOrder.GtR.Initialize("R Order", Properties.Resources.strCfgDispLaneOrderGtR, 0, 4);\r
866                         cdLaneOrder.GtG.Initialize("G Order", Properties.Resources.strCfgDispLaneOrderGtG, 0, 4);\r
867                         cdLaneOrder.GtB.Initialize("B Order", Properties.Resources.strCfgDispLaneOrderGtB, 0, 4);\r
868                         cdLaneOrder.GtW.Initialize("W Order", Properties.Resources.strCfgDispLaneOrderGtW, 0, 4);\r
869 \r
870                         cdLaneOrder.BsR.Initialize("R Order", Properties.Resources.strCfgDispLaneOrderBsR, 0, 4);\r
871                         cdLaneOrder.BsG.Initialize("G Order", Properties.Resources.strCfgDispLaneOrderBsG, 0, 4);\r
872                         cdLaneOrder.BsB.Initialize("B Order", Properties.Resources.strCfgDispLaneOrderBsB, 0, 4);\r
873                         cdLaneOrder.BsW.Initialize("W Order", Properties.Resources.strCfgDispLaneOrderBsW, 0, 4);\r
874 \r
875                         SetEnterDelegates();\r
876                 }\r
877 \r
878                 public CConfigXml()\r
879                 {\r
880                         Deserializing(new StreamingContext());\r
881                         DefaultDeserializer(new StreamingContext());\r
882                 }\r
883 \r
884                 public void SetEnterDelegates()\r
885                 {\r
886                         bFullScreen.OnEnterDelegate = () =>\r
887                         {\r
888                                 CDTXMania.Instance.b次のタイミングで全画面_ウィンドウ切り替えを行う = true;\r
889                         };\r
890 \r
891                         // Vsync\r
892                         bVSyncWait.OnEnterDelegate = () =>\r
893                         {\r
894                                 CDTXMania.Instance.b次のタイミングで垂直帰線同期切り替えを行う = true;\r
895                         };\r
896 \r
897                         eBDGroup.OnEnterDelegate = () =>\r
898                         {\r
899                                 //BD group\r
900                                 if (eBDGroup == EBDGroup.Group)\r
901                                 {\r
902                                         // #27029 2012.1.5 from: 変更前の状態をバックアップする。\r
903                                         Backup1BDHHGroup.Value = eHHGroup;\r
904                                         Backup1BDPriotiry.Value = eHitSoundPriorityHH;\r
905 \r
906                                         // HH Group ... HH-0 → HH-2 / HH-1 → HH-3 / HH-2 → 変更なし / HH-3 → 変更なし\r
907                                         if (eHHGroup == EHHGroup.None)\r
908                                         {\r
909                                                 eHHGroup.Value = EHHGroup.LC_HH;\r
910                                         }\r
911                                         if (eHHGroup == EHHGroup.HO_HC)\r
912                                         {\r
913                                                 eHHGroup.Value = EHHGroup.Group;\r
914                                         }\r
915 \r
916                                         // HH Priority ... C>P → 変更なし / P>C → C>P\r
917                                         if (eHitSoundPriorityHH == EHitSoundPriority.Pad)\r
918                                         {\r
919                                                 eHitSoundPriorityHH.Value = EHitSoundPriority.Chip;\r
920                                         }\r
921                                 }\r
922                                 else\r
923                                 {\r
924                                         eHHGroup = Backup1BDHHGroup;\r
925                                         eHitSoundPriorityHH = Backup1BDPriotiry;\r
926                                 }\r
927                         };\r
928 \r
929                         bUseBoxDefSkin.OnEnterDelegate = () =>\r
930                         {\r
931                                 CSkin.bUseBoxDefSkin = bUseBoxDefSkin;\r
932                         };\r
933                 }\r
934 \r
935 \r
936                 public bool bConfigIniがないかDTXManiaのバージョンが異なる\r
937                 {\r
938                         get\r
939                         {\r
940                                 return (!bConfigIniが存在している || !CDTXMania.VERSION.Equals(strDTXManiaVersion));\r
941                         }\r
942                 }\r
943 \r
944                 public bool bEnterがキー割り当てのどこにも使用されていない\r
945                 {\r
946                         get\r
947                         {\r
948                                 for (EPad j = EPad.Min; j < EPad.Max; j++)\r
949                                 {\r
950                                         for (int k = 0; k < AssignableCodes; k++)\r
951                                         {\r
952                                                 if ((KeyAssign[j][k].入力デバイス == EInputDevice.Keyboard) &&\r
953                                                                 (KeyAssign[j][k].コード == (int)SlimDX.DirectInput.Key.Return))\r
954                                                 {\r
955                                                         return false;\r
956                                                 }\r
957                                         }\r
958                                 }\r
959                                 return true;\r
960                         }\r
961                 }\r
962 \r
963                 public bool bウィンドウモード\r
964                 {\r
965                         get\r
966                         {\r
967                                 return !this.bFullScreen;\r
968                         }\r
969                         set\r
970                         {\r
971                                 this.bFullScreen.Value = !value;\r
972                         }\r
973                 }\r
974 \r
975                 public bool bGuitar有効\r
976                 {\r
977                         get\r
978                         {\r
979                                 return eActiveInst == EActiveInstrument.GBOnly || eActiveInst == EActiveInstrument.Both;\r
980                         }\r
981                 }\r
982 \r
983                 public bool bDrums有効\r
984                 {\r
985                         get\r
986                         {\r
987                                 return eActiveInst == EActiveInstrument.DrOnly || eActiveInst == EActiveInstrument.Both;\r
988                         }\r
989                 }\r
990 \r
991                 public bool b楽器有効(EPart inst)\r
992                 {\r
993                         if (inst == EPart.Drums)\r
994                         {\r
995                                 return bDrums有効;\r
996                         }\r
997                         else if (inst == EPart.Guitar || inst == EPart.Bass)\r
998                         {\r
999                                 return bGuitar有効;\r
1000                         }\r
1001                         return false;\r
1002                 }\r
1003 \r
1004                 public bool bIsAutoPlay(EPart inst)\r
1005                 {\r
1006                         bool ret = false;\r
1007                         if (inst == EPart.Drums)\r
1008                         {\r
1009                                 ret = bAutoPlay.IsAllTrue(EPart.Drums);\r
1010                         }\r
1011                         else if (inst == EPart.Guitar)\r
1012                         {\r
1013                                 ret = bAutoPlay.IsAllTrue(EPart.Guitar);\r
1014                         }\r
1015                         else if (inst == EPart.Bass)\r
1016                         {\r
1017                                 ret = bAutoPlay.IsAllTrue(EPart.Bass);\r
1018                         }\r
1019                         return ret;\r
1020                 }\r
1021 \r
1022                 public bool b演奏情報を表示する\r
1023                 {\r
1024                         get\r
1025                         {\r
1026                                 return this.bDebugInfo;\r
1027                         }\r
1028                         set\r
1029                         {\r
1030                                 this.bDebugInfo.Value = value;\r
1031                         }\r
1032                 }\r
1033 \r
1034                 // #24063 2011.1.16 yyagi ギターとベースの切り替え\r
1035                 public bool bIsSwappedGuitarBass\r
1036                 {\r
1037                         get;\r
1038                         set;\r
1039                 }\r
1040 \r
1041                 // #24415 2011.2.21 yyagi FLIP中にalt-f4終了で、AUTOフラグがswapした状態でconfig.iniが出力されてしまうことを避けるためのフラグ\r
1042                 public bool bIsSwappedGuitarBass_AutoFlagsAreSwapped\r
1043                 {\r
1044                         get;\r
1045                         set;\r
1046                 }\r
1047 \r
1048                 // #35417 2015.8.18 yyagi FLIP中にalt-f4終了で、演奏設定がswapした状態でconfig.iniが出力されてしまうことを避けるためのフラグ\r
1049                 public bool bIsSwappedGuitarBass_PlaySettingsAreSwapped\r
1050                 {\r
1051                         get;\r
1052                         set;\r
1053                 }\r
1054 \r
1055                 public void SwapGuitarBassInfos_AutoFlags()\r
1056                 {\r
1057                         Func<EPad, EPad, bool> AutoSwapper = (x, y) =>\r
1058                         {\r
1059                                 bool t = bAutoPlay[y];\r
1060                                 bAutoPlay[y].Value = bAutoPlay[x];\r
1061                                 bAutoPlay[x].Value = t;\r
1062                                 return true;\r
1063                         };\r
1064 \r
1065                         AutoSwapper(EPad.GtR, EPad.BsR);\r
1066                         AutoSwapper(EPad.GtG, EPad.BsG);\r
1067                         AutoSwapper(EPad.GtB, EPad.BsB);\r
1068                         AutoSwapper(EPad.GtWail, EPad.BsWail);\r
1069                         AutoSwapper(EPad.GtPick, EPad.BsPick);\r
1070 \r
1071                         bIsSwappedGuitarBass_AutoFlagsAreSwapped = !bIsSwappedGuitarBass_AutoFlagsAreSwapped;\r
1072                 }\r
1073 \r
1074                 public void t指定した入力が既にアサイン済みである場合はそれを全削除する(EInputDevice DeviceType, int nID, int nCode)\r
1075                 {\r
1076                         for (EPad j = EPad.Min; j < EPad.Max; j++)\r
1077                         {\r
1078                                 for (int k = 0; k < AssignableCodes; k++)\r
1079                                 {\r
1080                                         if (((KeyAssign[j][k].入力デバイス == DeviceType) &&\r
1081                                                         (KeyAssign[j][k].ID == nID)) &&\r
1082                                                         (KeyAssign[j][k].コード == nCode))\r
1083                                         {\r
1084                                                 for (int m = k; m < AssignableCodes - 1; m++)\r
1085                                                 {\r
1086                                                         KeyAssign[j][m].CopyFrom(KeyAssign[j][m + 1].Value);\r
1087                                                 }\r
1088                                                 KeyAssign[j][AssignableCodes - 1].Reset();\r
1089                                                 k--;\r
1090                                         }\r
1091                                 }\r
1092                         }\r
1093                 }\r
1094 \r
1095                 private void ClearKeyAssign()\r
1096                 {\r
1097                         KeyAssign = new STPadValue<COptionKeyAssign[]>();\r
1098                         for (EPad j = EPad.Min; j < EPad.Max; ++j)\r
1099                         {\r
1100                                 KeyAssign[j] = new COptionKeyAssign[AssignableCodes];\r
1101                                 for (int k = 0; k < AssignableCodes; ++k)\r
1102                                 {\r
1103                                         KeyAssign[j][k] = new COptionKeyAssign();\r
1104                                 }\r
1105                         }\r
1106                 }\r
1107         }\r
1108 }\r