OSDN Git Service

085のリリースに向け、バージョン情報を修正。
[dtxmania/dtxmania.git] / DTXManiaプロジェクト / コード / 全体 / CDTXMania.cs
1 using System;\r
2 using System.Collections.Generic;\r
3 using System.Text;\r
4 using System.Windows.Forms;\r
5 using System.Drawing;\r
6 using System.Diagnostics;\r
7 using System.Runtime.InteropServices;\r
8 using System.IO;\r
9 using SlimDX;\r
10 using SlimDX.Direct3D9;\r
11 using FDK;\r
12 using SampleFramework;\r
13 \r
14 namespace DTXMania\r
15 {\r
16         internal class CDTXMania : Game\r
17         {\r
18                 // プロパティ\r
19 \r
20                 public static readonly string VERSION = "085(101102)";\r
21                 public static readonly string SLIMDXDLL = "c_net20x86_Jun2010";\r
22                 public static readonly string D3DXDLL = "d3dx9_43.dll";         // June 2010\r
23         //public static readonly string D3DXDLL = "d3dx9_42.dll";       // February 2010\r
24         //public static readonly string D3DXDLL = "d3dx9_41.dll";       // March 2009\r
25 \r
26                 public static CDTXMania app\r
27                 {\r
28                         get;\r
29                         private set;\r
30                 }\r
31                 public static C文字コンソール act文字コンソール\r
32                 { \r
33                         get;\r
34                         private set;\r
35                 }\r
36                 public static bool bコンパクトモード\r
37                 {\r
38                         get;\r
39                         private set;\r
40                 }\r
41                 public static CConfigIni ConfigIni\r
42                 {\r
43                         get; \r
44                         private set;\r
45                 }\r
46                 public static CDTX DTX\r
47                 {\r
48                         get\r
49                         {\r
50                                 return dtx;\r
51                         }\r
52                         set\r
53                         {\r
54                                 if( ( dtx != null ) && ( app != null ) )\r
55                                 {\r
56                                         dtx.On非活性化();\r
57                                         app.listトップレベルActivities.Remove( dtx );\r
58                                 }\r
59                                 dtx = value;\r
60                                 if( ( dtx != null ) && ( app != null ) )\r
61                                 {\r
62                                         app.listトップレベルActivities.Add( dtx );\r
63                                 }\r
64                         }\r
65                 }\r
66                 public static CFPS FPS\r
67                 { \r
68                         get; \r
69                         private set;\r
70                 }\r
71                 public static CInput管理 Input管理 \r
72                 {\r
73                         get;\r
74                         private set;\r
75                 }\r
76                 public static int nPerfect範囲ms\r
77                 {\r
78                         get\r
79                         {\r
80                                 if( stage選曲.r確定された曲 != null )\r
81                                 {\r
82                                         C曲リストノード c曲リストノード = stage選曲.r確定された曲.r親ノード;\r
83                                         if( ( ( c曲リストノード != null ) && ( c曲リストノード.eノード種別 == C曲リストノード.Eノード種別.BOX ) ) && ( c曲リストノード.nPerfect範囲ms >= 0 ) )\r
84                                         {\r
85                                                 return c曲リストノード.nPerfect範囲ms;\r
86                                         }\r
87                                 }\r
88                                 return ConfigIni.nヒット範囲ms.Perfect;\r
89                         }\r
90                 }\r
91                 public static int nGreat範囲ms\r
92                 {\r
93                         get\r
94                         {\r
95                                 if( stage選曲.r確定された曲 != null )\r
96                                 {\r
97                                         C曲リストノード c曲リストノード = stage選曲.r確定された曲.r親ノード;\r
98                                         if( ( ( c曲リストノード != null ) && ( c曲リストノード.eノード種別 == C曲リストノード.Eノード種別.BOX ) ) && ( c曲リストノード.nGreat範囲ms >= 0 ) )\r
99                                         {\r
100                                                 return c曲リストノード.nGreat範囲ms;\r
101                                         }\r
102                                 }\r
103                                 return ConfigIni.nヒット範囲ms.Great;\r
104                         }\r
105                 }\r
106                 public static int nGood範囲ms\r
107                 {\r
108                         get\r
109                         {\r
110                                 if( stage選曲.r確定された曲 != null )\r
111                                 {\r
112                                         C曲リストノード c曲リストノード = stage選曲.r確定された曲.r親ノード;\r
113                                         if( ( ( c曲リストノード != null ) && ( c曲リストノード.eノード種別 == C曲リストノード.Eノード種別.BOX ) ) && ( c曲リストノード.nGood範囲ms >= 0 ) )\r
114                                         {\r
115                                                 return c曲リストノード.nGood範囲ms;\r
116                                         }\r
117                                 }\r
118                                 return ConfigIni.nヒット範囲ms.Good;\r
119                         }\r
120                 }\r
121                 public static int nPoor範囲ms\r
122                 {\r
123                         get\r
124                         {\r
125                                 if( stage選曲.r確定された曲 != null )\r
126                                 {\r
127                                         C曲リストノード c曲リストノード = stage選曲.r確定された曲.r親ノード;\r
128                                         if( ( ( c曲リストノード != null ) && ( c曲リストノード.eノード種別 == C曲リストノード.Eノード種別.BOX ) ) && ( c曲リストノード.nPoor範囲ms >= 0 ) )\r
129                                         {\r
130                                                 return c曲リストノード.nPoor範囲ms;\r
131                                         }\r
132                                 }\r
133                                 return ConfigIni.nヒット範囲ms.Poor;\r
134                         }\r
135                 }\r
136                 public static CPad Pad \r
137                 {\r
138                         get;\r
139                         private set;\r
140                 }\r
141                 public static Random Random\r
142                 {\r
143                         get;\r
144                         private set;\r
145                 }\r
146                 public static CSkin Skin\r
147                 {\r
148                         get; \r
149                         private set;\r
150                 }\r
151                 public static CSongs管理 Songs管理 \r
152                 {\r
153                         get;\r
154                         private set;\r
155                 }\r
156                 public static CSound管理 Sound管理\r
157                 {\r
158                         get; \r
159                         private set;\r
160                 }\r
161                 public static CStage起動 stage起動 \r
162                 {\r
163                         get; \r
164                         private set;\r
165                 }\r
166                 public static CStageタイトル stageタイトル\r
167                 {\r
168                         get;\r
169                         private set;\r
170                 }\r
171                 public static CStageオプション stageオプション\r
172                 { \r
173                         get;\r
174                         private set;\r
175                 }\r
176                 public static CStageコンフィグ stageコンフィグ \r
177                 { \r
178                         get; \r
179                         private set;\r
180                 }\r
181                 public static CStage選曲 stage選曲\r
182                 {\r
183                         get;\r
184                         private set;\r
185                 }\r
186                 public static CStage曲読み込み stage曲読み込み\r
187                 {\r
188                         get;\r
189                         private set;\r
190                 }\r
191                 public static CStage演奏ギター画面 stage演奏ギター画面\r
192                 {\r
193                         get;\r
194                         private set;\r
195                 }\r
196                 public static CStage演奏ドラム画面 stage演奏ドラム画面\r
197                 {\r
198                         get;\r
199                         private set;\r
200                 }\r
201                 public static CStage結果 stage結果\r
202                 {\r
203                         get;\r
204                         private set;\r
205                 }\r
206                 public static CStage終了 stage終了\r
207                 {\r
208                         get;\r
209                         private set;\r
210                 }\r
211                 public static CStage r現在のステージ = null;\r
212                 public static CStage r直前のステージ = null;\r
213                 public static string strEXEのあるフォルダ \r
214                 {\r
215                         get;\r
216                         private set;\r
217                 }\r
218                 public static string strコンパクトモードファイル\r
219                 { \r
220                         get; \r
221                         private set;\r
222                 }\r
223                 public static CTimer Timer\r
224                 {\r
225                         get;\r
226                         private set;\r
227                 }\r
228                 public static Format TextureFormat = Format.A8R8G8B8;\r
229                 internal static IPluginActivity act現在入力を占有中のプラグイン = null;\r
230                 public bool bApplicationActive\r
231                 {\r
232                         get; \r
233                         private set;\r
234                 }\r
235                 public bool b次のタイミングで垂直帰線同期切り替えを行う\r
236                 {\r
237                         get; \r
238                         set;\r
239                 }\r
240                 public bool b次のタイミングで全画面・ウィンドウ切り替えを行う\r
241                 {\r
242                         get;\r
243                         set;\r
244                 }\r
245                 public Device Device\r
246                 {\r
247                         get { return base.GraphicsDeviceManager.Direct3D9.Device; }\r
248                 }\r
249                 public CPluginHost PluginHost\r
250                 {\r
251                         get;\r
252                         private set;\r
253                 }\r
254                 public List<STPlugin> listプラグイン = new List<STPlugin>();\r
255                 public struct STPlugin\r
256                 {\r
257                         public IPluginActivity plugin;\r
258                         public string strプラグインフォルダ;\r
259                         public string strアセンブリ簡易名;\r
260                         public Version Version;\r
261                 }\r
262                 private static Size currentClientSize           // #23510 2010.10.27 add yyagi to keep current window size\r
263                 {\r
264                         get;\r
265                         set;\r
266                 }\r
267 \r
268 \r
269                 // コンストラクタ\r
270 \r
271                 public CDTXMania()\r
272                 {\r
273                         CDTXMania.app = this;\r
274                         this.t起動処理();\r
275                 }\r
276 \r
277 \r
278                 // メソッド\r
279 \r
280                 public void t全画面・ウィンドウモード切り替え()\r
281                 {\r
282                         DeviceSettings settings = base.GraphicsDeviceManager.CurrentSettings.Clone();\r
283                         if( ( ConfigIni != null ) && ( ConfigIni.bウィンドウモード != settings.Windowed ) )\r
284                         {\r
285                                 settings.Windowed = ConfigIni.bウィンドウモード;\r
286                                 if (ConfigIni.bウィンドウモード == false)       // #23510 2010.10.27 yyagi: backup current window size before going fullscreen mode\r
287                                 {\r
288                                         currentClientSize = this.Window.ClientSize;\r
289                                         ConfigIni.nウインドウwidth = this.Window.ClientSize.Width;\r
290                                         ConfigIni.nウインドウheight = this.Window.ClientSize.Height;\r
291                                 }\r
292 //                              base.GraphicsDeviceManager.ToggleFullScreen();\r
293                                 base.GraphicsDeviceManager.ChangeDevice( settings );\r
294                                 if (ConfigIni.bウィンドウモード == true)        // #23510 2010.10.27 yyagi: to resume window size from backuped value\r
295                                 {\r
296                                         base.Window.ClientSize =\r
297                                                 new Size(currentClientSize.Width, currentClientSize.Height);\r
298                                 }                                       \r
299                         }\r
300                 }\r
301 \r
302 \r
303                 // Game 実装\r
304 \r
305                 protected override void Initialize()\r
306                 {\r
307                         if( this.listトップレベルActivities != null )\r
308                         {\r
309                                 foreach( CActivity activity in this.listトップレベルActivities )\r
310                                         activity.OnManagedリソースの作成();\r
311                         }\r
312 \r
313                         foreach( STPlugin st in this.listプラグイン )\r
314                         {\r
315                                 Directory.SetCurrentDirectory( st.strプラグインフォルダ );\r
316                                 st.plugin.OnManagedリソースの作成();\r
317                                 Directory.SetCurrentDirectory( CDTXMania.strEXEのあるフォルダ );\r
318                         }\r
319                 }\r
320                 protected override void LoadContent()\r
321                 {\r
322                         if ( ConfigIni.bウィンドウモード )\r
323                         {\r
324                                 if( !this.bマウスカーソル表示中 )\r
325                                 {\r
326                                         Cursor.Show();\r
327                                         this.bマウスカーソル表示中 = true;\r
328                                 }\r
329                         }\r
330                         else if( this.bマウスカーソル表示中 )\r
331                         {\r
332                                 Cursor.Hide();\r
333                                 this.bマウスカーソル表示中 = false;\r
334                         }\r
335                         this.Device.SetTransform( TransformState.View, Matrix.LookAtLH( new Vector3( 0f, 0f, (float) ( -240.0 * Math.Sqrt( 3.0 ) ) ), new Vector3( 0f, 0f, 0f ), new Vector3( 0f, 1f, 0f ) ) );\r
336                         this.Device.SetTransform( TransformState.Projection, Matrix.PerspectiveFovLH( C変換.DegreeToRadian( (float) 60f ), ( (float) this.Device.Viewport.Width ) / ( (float) this.Device.Viewport.Height ), -100f, 100f ) );\r
337                         this.Device.SetRenderState( RenderState.Lighting, false );\r
338                         this.Device.SetRenderState( RenderState.ZEnable, false );\r
339                         this.Device.SetRenderState( RenderState.AntialiasedLineEnable, false );\r
340                         this.Device.SetRenderState( RenderState.AlphaTestEnable, true );\r
341                         this.Device.SetRenderState( RenderState.AlphaRef, 10 );\r
342                         this.Device.SetRenderState<Compare>( RenderState.AlphaFunc, Compare.Greater );\r
343                         this.Device.SetRenderState( RenderState.AlphaBlendEnable, true );\r
344                         this.Device.SetRenderState<Blend>( RenderState.SourceBlend, Blend.SourceAlpha );\r
345                         this.Device.SetRenderState<Blend>( RenderState.DestinationBlend, Blend.InverseSourceAlpha );\r
346                         this.Device.SetTextureStageState( 0, TextureStage.AlphaOperation, TextureOperation.Modulate );\r
347                         this.Device.SetTextureStageState( 0, TextureStage.AlphaArg1, 2 );\r
348                         this.Device.SetTextureStageState( 0, TextureStage.AlphaArg2, 1 );\r
349                         \r
350                         if( this.listトップレベルActivities != null )\r
351                         {\r
352                                 foreach( CActivity activity in this.listトップレベルActivities )\r
353                                         activity.OnUnmanagedリソースの作成();\r
354                         }\r
355 \r
356                         foreach( STPlugin st in this.listプラグイン )\r
357                         {\r
358                                 Directory.SetCurrentDirectory( st.strプラグインフォルダ );\r
359                                 st.plugin.OnUnmanagedリソースの作成();\r
360                                 Directory.SetCurrentDirectory( CDTXMania.strEXEのあるフォルダ );\r
361                         }\r
362                 }\r
363                 protected override void UnloadContent()\r
364                 {\r
365                         if( this.listトップレベルActivities != null )\r
366                         {\r
367                                 foreach( CActivity activity in this.listトップレベルActivities )\r
368                                         activity.OnUnmanagedリソースの解放();\r
369                         }\r
370 \r
371                         foreach( STPlugin st in this.listプラグイン )\r
372                         {\r
373                                 Directory.SetCurrentDirectory( st.strプラグインフォルダ );\r
374                                 st.plugin.OnUnmanagedリソースの解放();\r
375                                 Directory.SetCurrentDirectory( CDTXMania.strEXEのあるフォルダ );\r
376                         }\r
377                 }\r
378                 protected override void OnExiting( EventArgs e )\r
379                 {\r
380                         this.t終了処理();\r
381                         base.OnExiting( e );\r
382                 }\r
383                 protected override void Update( GameTime gameTime )\r
384                 {\r
385                 }\r
386                 protected override void Draw( GameTime gameTime )\r
387                 {\r
388                         CScoreIni.C演奏記録 c演奏記録;\r
389                         CScoreIni.C演奏記録 c演奏記録2;\r
390                         CScoreIni.C演奏記録 c演奏記録3;\r
391                         CDTX.CChip[] chipArray;\r
392                         string str;\r
393 \r
394                         Sound管理.t再生中の処理をする();\r
395 \r
396                         if( Timer != null )\r
397                                 Timer.t更新();\r
398 \r
399                         if( Input管理 != null )\r
400                                 Input管理.tポーリング( this.bApplicationActive, CDTXMania.ConfigIni.bバッファ入力を行う );\r
401 \r
402                         if( FPS != null )\r
403                                 FPS.tカウンタ更新();\r
404 \r
405                         //if( Pad != null )                                     ポーリング時にクリアしたらダメ!曲の開始時に1回だけクリアする。(2010.9.11)\r
406                         //      Pad.st検知したデバイス.Clear();\r
407 \r
408                         if( this.Device == null )\r
409                                 return;\r
410 \r
411                         this.Device.BeginScene();\r
412                         this.Device.Clear( ClearFlags.ZBuffer | ClearFlags.Target, Color.Black, 1f, 0 );\r
413 \r
414                         if( r現在のステージ != null )\r
415                         {\r
416                                 this.n進行描画の戻り値 = ( r現在のステージ != null ) ? r現在のステージ.On進行描画() : 0;\r
417 \r
418                                 #region [ プラグインの進行描画 ]\r
419                                 //---------------------\r
420                                 foreach( STPlugin sp in this.listプラグイン )\r
421                                 {\r
422                                         Directory.SetCurrentDirectory( sp.strプラグインフォルダ );\r
423 \r
424                                         if( CDTXMania.act現在入力を占有中のプラグイン == null || CDTXMania.act現在入力を占有中のプラグイン == sp.plugin )\r
425                                                 sp.plugin.On進行描画( CDTXMania.Pad, CDTXMania.Input管理.Keyboard );\r
426                                         else\r
427                                                 sp.plugin.On進行描画( null, null );\r
428 \r
429                                         Directory.SetCurrentDirectory( CDTXMania.strEXEのあるフォルダ );\r
430                                 }\r
431                                 //---------------------\r
432                                 #endregion\r
433 \r
434                                 CScoreIni scoreIni = null;\r
435 \r
436                                 switch( r現在のステージ.eステージID )\r
437                                 {\r
438                                         case CStage.Eステージ.何もしない:\r
439                                                 break;\r
440 \r
441                                         case CStage.Eステージ.起動:\r
442                                                 #region [ *** ]\r
443                                                 //-----------------------------\r
444                                                 if( this.n進行描画の戻り値 != 0 )\r
445                                                 {\r
446                                                         if( !bコンパクトモード )\r
447                                                         {\r
448                                                                 r現在のステージ.On非活性化();\r
449                                                                 Trace.TraceInformation( "----------------------" );\r
450                                                                 Trace.TraceInformation( "■ タイトル" );\r
451                                                                 stageタイトル.On活性化();\r
452                                                                 r直前のステージ = r現在のステージ;\r
453                                                                 r現在のステージ = stageタイトル;\r
454                                                         }\r
455                                                         else\r
456                                                         {\r
457                                                                 r現在のステージ.On非活性化();\r
458                                                                 Trace.TraceInformation( "----------------------" );\r
459                                                                 Trace.TraceInformation( "■ 曲読み込み" );\r
460                                                                 stage曲読み込み.On活性化();\r
461                                                                 r直前のステージ = r現在のステージ;\r
462                                                                 r現在のステージ = stage曲読み込み;\r
463 \r
464                                                         }\r
465                                                         foreach( STPlugin pg in this.listプラグイン )\r
466                                                         {\r
467                                                                 Directory.SetCurrentDirectory( pg.strプラグインフォルダ );\r
468                                                                 pg.plugin.Onステージ変更();\r
469                                                                 Directory.SetCurrentDirectory( CDTXMania.strEXEのあるフォルダ );\r
470                                                         }\r
471 \r
472                                                         this.tガベージコレクションを実行する();\r
473                                                 }\r
474                                                 //-----------------------------\r
475                                                 #endregion\r
476                                                 break;\r
477 \r
478                                         case CStage.Eステージ.タイトル:\r
479                                                 #region [ *** ]\r
480                                                 //-----------------------------\r
481                                                 switch( this.n進行描画の戻り値 )\r
482                                                 {\r
483                                                         case 1:\r
484                                                                 #region [ *** ]\r
485                                                                 //-----------------------------\r
486                                                                 r現在のステージ.On非活性化();\r
487                                                                 Trace.TraceInformation( "----------------------" );\r
488                                                                 Trace.TraceInformation( "■ 選曲" );\r
489                                                                 stage選曲.On活性化();\r
490                                                                 r直前のステージ = r現在のステージ;\r
491                                                                 r現在のステージ = stage選曲;\r
492                                                                 //-----------------------------\r
493                                                                 #endregion\r
494                                                                 break;\r
495 \r
496                                                         case 2:\r
497                                                                 #region [ *** ]\r
498                                                                 //-----------------------------\r
499                                                                 r現在のステージ.On非活性化();\r
500                                                                 Trace.TraceInformation( "----------------------" );\r
501                                                                 Trace.TraceInformation( "■ オプション" );\r
502                                                                 stageオプション.On活性化();\r
503                                                                 r直前のステージ = r現在のステージ;\r
504                                                                 r現在のステージ = stageオプション;\r
505                                                                 //-----------------------------\r
506                                                                 #endregion\r
507                                                                 break;\r
508 \r
509                                                         case 3:\r
510                                                                 #region [ *** ]\r
511                                                                 //-----------------------------\r
512                                                                 r現在のステージ.On非活性化();\r
513                                                                 Trace.TraceInformation( "----------------------" );\r
514                                                                 Trace.TraceInformation( "■ コンフィグ" );\r
515                                                                 stageコンフィグ.On活性化();\r
516                                                                 r直前のステージ = r現在のステージ;\r
517                                                                 r現在のステージ = stageコンフィグ;\r
518                                                                 //-----------------------------\r
519                                                                 #endregion\r
520                                                                 break;\r
521 \r
522                                                         case 4:\r
523                                                                 #region [ *** ]\r
524                                                                 //-----------------------------\r
525                                                                 r現在のステージ.On非活性化();\r
526                                                                 Trace.TraceInformation( "----------------------" );\r
527                                                                 Trace.TraceInformation( "■ 終了" );\r
528                                                                 stage終了.On活性化();\r
529                                                                 r直前のステージ = r現在のステージ;\r
530                                                                 r現在のステージ = stage終了;\r
531                                                                 //-----------------------------\r
532                                                                 #endregion\r
533                                                                 break;\r
534                                                 }\r
535 \r
536                                                 foreach( STPlugin pg in this.listプラグイン )\r
537                                                 {\r
538                                                         Directory.SetCurrentDirectory( pg.strプラグインフォルダ );\r
539                                                         pg.plugin.Onステージ変更();\r
540                                                         Directory.SetCurrentDirectory( CDTXMania.strEXEのあるフォルダ );\r
541                                                 }\r
542 \r
543                                                 this.tガベージコレクションを実行する();\r
544                                                 //-----------------------------\r
545                                                 #endregion\r
546                                                 break;\r
547 \r
548                                         case CStage.Eステージ.オプション:\r
549                                                 #region [ *** ]\r
550                                                 //-----------------------------\r
551                                                 if( this.n進行描画の戻り値 != 0 )\r
552                                                 {\r
553                                                         switch( r直前のステージ.eステージID )\r
554                                                         {\r
555                                                                 case CStage.Eステージ.タイトル:\r
556                                                                         #region [ *** ]\r
557                                                                         //-----------------------------\r
558                                                                         r現在のステージ.On非活性化();\r
559                                                                         Trace.TraceInformation( "----------------------" );\r
560                                                                         Trace.TraceInformation( "■ タイトル" );\r
561                                                                         stageタイトル.On活性化();\r
562                                                                         r直前のステージ = r現在のステージ;\r
563                                                                         r現在のステージ = stageタイトル;\r
564 \r
565                                                                         foreach( STPlugin pg in this.listプラグイン )\r
566                                                                         {\r
567                                                                                 Directory.SetCurrentDirectory( pg.strプラグインフォルダ );\r
568                                                                                 pg.plugin.Onステージ変更();\r
569                                                                                 Directory.SetCurrentDirectory( CDTXMania.strEXEのあるフォルダ );\r
570                                                                         }\r
571 \r
572                                                                         this.tガベージコレクションを実行する();\r
573                                                                         break;\r
574                                                                 //-----------------------------\r
575                                                                         #endregion\r
576 \r
577                                                                 case CStage.Eステージ.選曲:\r
578                                                                         #region [ *** ]\r
579                                                                         //-----------------------------\r
580                                                                         r現在のステージ.On非活性化();\r
581                                                                         Trace.TraceInformation( "----------------------" );\r
582                                                                         Trace.TraceInformation( "■ 選曲" );\r
583                                                                         stage選曲.On活性化();\r
584                                                                         r直前のステージ = r現在のステージ;\r
585                                                                         r現在のステージ = stage選曲;\r
586 \r
587                                                                         foreach( STPlugin pg in this.listプラグイン )\r
588                                                                         {\r
589                                                                                 Directory.SetCurrentDirectory( pg.strプラグインフォルダ );\r
590                                                                                 pg.plugin.Onステージ変更();\r
591                                                                                 Directory.SetCurrentDirectory( CDTXMania.strEXEのあるフォルダ );\r
592                                                                         }\r
593 \r
594                                                                         this.tガベージコレクションを実行する();\r
595                                                                         break;\r
596                                                                 //-----------------------------\r
597                                                                         #endregion\r
598                                                         }\r
599                                                 }\r
600                                                 //-----------------------------\r
601                                                 #endregion\r
602                                                 break;\r
603 \r
604                                         case CStage.Eステージ.コンフィグ:\r
605                                                 #region [ *** ]\r
606                                                 //-----------------------------\r
607                                                 if( this.n進行描画の戻り値 != 0 )\r
608                                                 {\r
609                                                         switch( r直前のステージ.eステージID )\r
610                                                         {\r
611                                                                 case CStage.Eステージ.タイトル:\r
612                                                                         #region [ *** ]\r
613                                                                         //-----------------------------\r
614                                                                         r現在のステージ.On非活性化();\r
615                                                                         Trace.TraceInformation( "----------------------" );\r
616                                                                         Trace.TraceInformation( "■ タイトル" );\r
617                                                                         stageタイトル.On活性化();\r
618                                                                         r直前のステージ = r現在のステージ;\r
619                                                                         r現在のステージ = stageタイトル;\r
620 \r
621                                                                         foreach( STPlugin pg in this.listプラグイン )\r
622                                                                         {\r
623                                                                                 Directory.SetCurrentDirectory( pg.strプラグインフォルダ );\r
624                                                                                 pg.plugin.Onステージ変更();\r
625                                                                                 Directory.SetCurrentDirectory( CDTXMania.strEXEのあるフォルダ );\r
626                                                                         }\r
627 \r
628                                                                         this.tガベージコレクションを実行する();\r
629                                                                         break;\r
630                                                                 //-----------------------------\r
631                                                                         #endregion\r
632 \r
633                                                                 case CStage.Eステージ.選曲:\r
634                                                                         #region [ *** ]\r
635                                                                         //-----------------------------\r
636                                                                         r現在のステージ.On非活性化();\r
637                                                                         Trace.TraceInformation( "----------------------" );\r
638                                                                         Trace.TraceInformation( "■ 選曲" );\r
639                                                                         stage選曲.On活性化();\r
640                                                                         r直前のステージ = r現在のステージ;\r
641                                                                         r現在のステージ = stage選曲;\r
642 \r
643                                                                         foreach( STPlugin pg in this.listプラグイン )\r
644                                                                         {\r
645                                                                                 Directory.SetCurrentDirectory( pg.strプラグインフォルダ );\r
646                                                                                 pg.plugin.Onステージ変更();\r
647                                                                                 Directory.SetCurrentDirectory( CDTXMania.strEXEのあるフォルダ );\r
648                                                                         }\r
649 \r
650                                                                         this.tガベージコレクションを実行する();\r
651                                                                         break;\r
652                                                                 //-----------------------------\r
653                                                                         #endregion\r
654                                                         }\r
655                                                 }\r
656                                                 //-----------------------------\r
657                                                 #endregion\r
658                                                 break;\r
659 \r
660                                         case CStage.Eステージ.選曲:\r
661                                                 #region [ *** ]\r
662                                                 //-----------------------------\r
663                                                 switch( this.n進行描画の戻り値 )\r
664                                                 {\r
665                                                         case 1:\r
666                                                                 #region [ *** ]\r
667                                                                 //-----------------------------\r
668                                                                 r現在のステージ.On非活性化();\r
669                                                                 Trace.TraceInformation( "----------------------" );\r
670                                                                 Trace.TraceInformation( "■ タイトル" );\r
671                                                                 stageタイトル.On活性化();\r
672                                                                 r直前のステージ = r現在のステージ;\r
673                                                                 r現在のステージ = stageタイトル;\r
674 \r
675                                                                 foreach( STPlugin pg in this.listプラグイン )\r
676                                                                 {\r
677                                                                         Directory.SetCurrentDirectory( pg.strプラグインフォルダ );\r
678                                                                         pg.plugin.Onステージ変更();\r
679                                                                         Directory.SetCurrentDirectory( CDTXMania.strEXEのあるフォルダ );\r
680                                                                 }\r
681 \r
682                                                                 this.tガベージコレクションを実行する();\r
683                                                                 break;\r
684                                                         //-----------------------------\r
685                                                                 #endregion\r
686 \r
687                                                         case 2:\r
688                                                                 #region [ *** ]\r
689                                                                 //-----------------------------\r
690                                                                 r現在のステージ.On非活性化();\r
691                                                                 Trace.TraceInformation( "----------------------" );\r
692                                                                 Trace.TraceInformation( "■ 曲読み込み" );\r
693                                                                 stage曲読み込み.On活性化();\r
694                                                                 r直前のステージ = r現在のステージ;\r
695                                                                 r現在のステージ = stage曲読み込み;\r
696 \r
697                                                                 foreach( STPlugin pg in this.listプラグイン )\r
698                                                                 {\r
699                                                                         Directory.SetCurrentDirectory( pg.strプラグインフォルダ );\r
700                                                                         pg.plugin.Onステージ変更();\r
701                                                                         Directory.SetCurrentDirectory( CDTXMania.strEXEのあるフォルダ );\r
702                                                                 }\r
703 \r
704                                                                 this.tガベージコレクションを実行する();\r
705                                                                 break;\r
706                                                         //-----------------------------\r
707                                                                 #endregion\r
708 \r
709                                                         case 3:\r
710                                                                 #region [ *** ]\r
711                                                                 //-----------------------------\r
712                                                                 r現在のステージ.On非活性化();\r
713                                                                 Trace.TraceInformation( "----------------------" );\r
714                                                                 Trace.TraceInformation( "■ オプション" );\r
715                                                                 stageオプション.On活性化();\r
716                                                                 r直前のステージ = r現在のステージ;\r
717                                                                 r現在のステージ = stageオプション;\r
718 \r
719                                                                 foreach( STPlugin pg in this.listプラグイン )\r
720                                                                 {\r
721                                                                         Directory.SetCurrentDirectory( pg.strプラグインフォルダ );\r
722                                                                         pg.plugin.Onステージ変更();\r
723                                                                         Directory.SetCurrentDirectory( CDTXMania.strEXEのあるフォルダ );\r
724                                                                 }\r
725 \r
726                                                                 this.tガベージコレクションを実行する();\r
727                                                                 break;\r
728                                                         //-----------------------------\r
729                                                                 #endregion\r
730 \r
731                                                         case 4:\r
732                                                                 #region [ *** ]\r
733                                                                 //-----------------------------\r
734                                                                 r現在のステージ.On非活性化();\r
735                                                                 Trace.TraceInformation( "----------------------" );\r
736                                                                 Trace.TraceInformation( "■ コンフィグ" );\r
737                                                                 stageコンフィグ.On活性化();\r
738                                                                 r直前のステージ = r現在のステージ;\r
739                                                                 r現在のステージ = stageコンフィグ;\r
740 \r
741                                                                 foreach( STPlugin pg in this.listプラグイン )\r
742                                                                 {\r
743                                                                         Directory.SetCurrentDirectory( pg.strプラグインフォルダ );\r
744                                                                         pg.plugin.Onステージ変更();\r
745                                                                         Directory.SetCurrentDirectory( CDTXMania.strEXEのあるフォルダ );\r
746                                                                 }\r
747 \r
748                                                                 this.tガベージコレクションを実行する();\r
749                                                                 break;\r
750                                                         //-----------------------------\r
751                                                                 #endregion\r
752                                                 }\r
753                                                 //-----------------------------\r
754                                                 #endregion\r
755                                                 break;\r
756 \r
757                                         case CStage.Eステージ.曲読み込み:\r
758                                                 #region [ *** ]\r
759                                                 //-----------------------------\r
760                                                 if( this.n進行描画の戻り値 != 0 )\r
761                                                 {\r
762                                                         CDTXMania.Pad.st検知したデバイス.Clear();       // 入力デバイスフラグクリア(2010.9.11)\r
763 \r
764                                                         r現在のステージ.On非活性化();\r
765                                                         if( !ConfigIni.bギタレボモード )\r
766                                                         {\r
767                                                                 Trace.TraceInformation( "----------------------" );\r
768                                                                 Trace.TraceInformation( "■ 演奏(ドラム画面)" );\r
769                                                                 r直前のステージ = r現在のステージ;\r
770                                                                 r現在のステージ = stage演奏ドラム画面;\r
771                                                         }\r
772                                                         else\r
773                                                         {\r
774                                                                 Trace.TraceInformation( "----------------------" );\r
775                                                                 Trace.TraceInformation( "■ 演奏(ギター画面)" );\r
776                                                                 r直前のステージ = r現在のステージ;\r
777                                                                 r現在のステージ = stage演奏ギター画面;\r
778                                                         }\r
779 \r
780                                                         foreach( STPlugin pg in this.listプラグイン )\r
781                                                         {\r
782                                                                 Directory.SetCurrentDirectory( pg.strプラグインフォルダ );\r
783                                                                 pg.plugin.Onステージ変更();\r
784                                                                 Directory.SetCurrentDirectory( CDTXMania.strEXEのあるフォルダ );\r
785                                                         }\r
786 \r
787                                                         this.tガベージコレクションを実行する();\r
788                                                 }\r
789                                                 //-----------------------------\r
790                                                 #endregion\r
791                                                 break;\r
792 \r
793                                         case CStage.Eステージ.演奏:\r
794                                                 #region [ *** ]\r
795                                                 //-----------------------------\r
796                                                 switch( this.n進行描画の戻り値 )\r
797                                                 {\r
798                                                         case 0:\r
799                                                                 break;\r
800 \r
801                                                         case 1:\r
802                                                                 #region [ 演奏キャンセル ]\r
803                                                                 //-----------------------------\r
804                                                                 scoreIni = this.tScoreIniへBGMAdjustとHistoryとPlayCountを更新( "Play canceled" );\r
805 \r
806                                                                 #region [ プラグイン On演奏キャンセル() の呼び出し ]\r
807                                                                 //---------------------\r
808                                                                 foreach( STPlugin pg in this.listプラグイン )\r
809                                                                 {\r
810                                                                         Directory.SetCurrentDirectory( pg.strプラグインフォルダ );\r
811                                                                         pg.plugin.On演奏キャンセル( scoreIni );\r
812                                                                         Directory.SetCurrentDirectory( CDTXMania.strEXEのあるフォルダ );\r
813                                                                 }\r
814                                                                 //---------------------\r
815                                                                 #endregion\r
816 \r
817                                                                 DTX.t全チップの再生停止();\r
818                                                                 DTX.On非活性化();\r
819                                                                 r現在のステージ.On非活性化();\r
820                                                                 if( bコンパクトモード )\r
821                                                                 {\r
822                                                                         base.Window.Close();\r
823                                                                 }\r
824                                                                 else\r
825                                                                 {\r
826                                                                         Trace.TraceInformation( "----------------------" );\r
827                                                                         Trace.TraceInformation( "■ 選曲" );\r
828                                                                         stage選曲.On活性化();\r
829                                                                         r直前のステージ = r現在のステージ;\r
830                                                                         r現在のステージ = stage選曲;\r
831 \r
832                                                                         #region [ プラグイン Onステージ変更() の呼び出し ]\r
833                                                                         //---------------------\r
834                                                                         foreach( STPlugin pg in this.listプラグイン )\r
835                                                                         {\r
836                                                                                 Directory.SetCurrentDirectory( pg.strプラグインフォルダ );\r
837                                                                                 pg.plugin.Onステージ変更();\r
838                                                                                 Directory.SetCurrentDirectory( CDTXMania.strEXEのあるフォルダ );\r
839                                                                         }\r
840                                                                         //---------------------\r
841                                                                         #endregion\r
842 \r
843                                                                         this.tガベージコレクションを実行する();\r
844                                                                 }\r
845                                                                 break;\r
846                                                         //-----------------------------\r
847                                                                 #endregion\r
848 \r
849                                                         case 2:\r
850                                                                 #region [ 演奏失敗(StageFailed) ]\r
851                                                                 //-----------------------------\r
852                                                                 scoreIni = this.tScoreIniへBGMAdjustとHistoryとPlayCountを更新( "Stage failed" );\r
853 \r
854                                                                 #region [ プラグイン On演奏失敗() の呼び出し ]\r
855                                                                 //---------------------\r
856                                                                 foreach( STPlugin pg in this.listプラグイン )\r
857                                                                 {\r
858                                                                         Directory.SetCurrentDirectory( pg.strプラグインフォルダ );\r
859                                                                         pg.plugin.On演奏失敗( scoreIni );\r
860                                                                         Directory.SetCurrentDirectory( CDTXMania.strEXEのあるフォルダ );\r
861                                                                 }\r
862                                                                 //---------------------\r
863                                                                 #endregion\r
864 \r
865                                                                 DTX.t全チップの再生停止();\r
866                                                                 DTX.On非活性化();\r
867                                                                 r現在のステージ.On非活性化();\r
868                                                                 if( bコンパクトモード )\r
869                                                                 {\r
870                                                                         base.Window.Close();\r
871                                                                 }\r
872                                                                 else\r
873                                                                 {\r
874                                                                         Trace.TraceInformation( "----------------------" );\r
875                                                                         Trace.TraceInformation( "■ 選曲" );\r
876                                                                         stage選曲.On活性化();\r
877                                                                         r直前のステージ = r現在のステージ;\r
878                                                                         r現在のステージ = stage選曲;\r
879 \r
880                                                                         #region [ プラグイン Onステージ変更() の呼び出し ]\r
881                                                                         //---------------------\r
882                                                                         foreach( STPlugin pg in this.listプラグイン )\r
883                                                                         {\r
884                                                                                 Directory.SetCurrentDirectory( pg.strプラグインフォルダ );\r
885                                                                                 pg.plugin.Onステージ変更();\r
886                                                                                 Directory.SetCurrentDirectory( CDTXMania.strEXEのあるフォルダ );\r
887                                                                         }\r
888                                                                         //---------------------\r
889                                                                         #endregion\r
890 \r
891                                                                         this.tガベージコレクションを実行する();\r
892                                                                 }\r
893                                                                 break;\r
894                                                         //-----------------------------\r
895                                                                 #endregion\r
896 \r
897                                                         case 3:\r
898                                                                 #region [ 演奏クリア ]\r
899                                                                 //-----------------------------\r
900                                                                 chipArray = new CDTX.CChip[ 10 ];\r
901                                                                 if( ConfigIni.bギタレボモード )\r
902                                                                 {\r
903                                                                         stage演奏ギター画面.t演奏結果を格納する( out c演奏記録, out c演奏記録2, out c演奏記録3 );\r
904                                                                 }\r
905                                                                 else\r
906                                                                 {\r
907                                                                         stage演奏ドラム画面.t演奏結果を格納する( out c演奏記録, out c演奏記録2, out c演奏記録3, out chipArray );\r
908                                                                 }\r
909                                                                 str = "Cleared";\r
910                                                                 switch( CScoreIni.t総合ランク値を計算して返す( c演奏記録, c演奏記録2, c演奏記録3 ) )\r
911                                                                 {\r
912                                                                         case 0:\r
913                                                                                 str = "Cleared (Rank:SS)";\r
914                                                                                 break;\r
915 \r
916                                                                         case 1:\r
917                                                                                 str = "Cleared (Rank:S)";\r
918                                                                                 break;\r
919 \r
920                                                                         case 2:\r
921                                                                                 str = "Cleared (Rank:A)";\r
922                                                                                 break;\r
923 \r
924                                                                         case 3:\r
925                                                                                 str = "Cleared (Rank:B)";\r
926                                                                                 break;\r
927 \r
928                                                                         case 4:\r
929                                                                                 str = "Cleared (Rank:C)";\r
930                                                                                 break;\r
931 \r
932                                                                         case 5:\r
933                                                                                 str = "Cleared (Rank:D)";\r
934                                                                                 break;\r
935 \r
936                                                                         case 6:\r
937                                                                                 str = "Cleared (Rank:E)";\r
938                                                                                 break;\r
939 \r
940                                                                         case 99:        // #23534 2010.10.28 yyagi add: 演奏チップが0個のとき\r
941                                                                                 str = "Cleared (No chips)";\r
942                                                                                 break;\r
943                                                                 }\r
944 \r
945                                                                 scoreIni = this.tScoreIniへBGMAdjustとHistoryとPlayCountを更新( str );\r
946 \r
947                                                                 #region [ プラグイン On演奏クリア() の呼び出し ]\r
948                                                                 //---------------------\r
949                                                                 foreach( STPlugin pg in this.listプラグイン )\r
950                                                                 {\r
951                                                                         Directory.SetCurrentDirectory( pg.strプラグインフォルダ );\r
952                                                                         pg.plugin.On演奏クリア( scoreIni );\r
953                                                                         Directory.SetCurrentDirectory( CDTXMania.strEXEのあるフォルダ );\r
954                                                                 }\r
955                                                                 //---------------------\r
956                                                                 #endregion\r
957 \r
958                                                                 r現在のステージ.On非活性化();\r
959                                                                 Trace.TraceInformation( "----------------------" );\r
960                                                                 Trace.TraceInformation( "■ 結果" );\r
961                                                                 stage結果.st演奏記録.Drums = c演奏記録;\r
962                                                                 stage結果.st演奏記録.Guitar = c演奏記録2;\r
963                                                                 stage結果.st演奏記録.Bass = c演奏記録3;\r
964                                                                 stage結果.r空うちドラムチップ = chipArray;\r
965                                                                 stage結果.On活性化();\r
966                                                                 r直前のステージ = r現在のステージ;\r
967                                                                 r現在のステージ = stage結果;\r
968 \r
969                                                                 #region [ プラグイン Onステージ変更() の呼び出し ]\r
970                                                                 //---------------------\r
971                                                                 foreach( STPlugin pg in this.listプラグイン )\r
972                                                                 {\r
973                                                                         Directory.SetCurrentDirectory( pg.strプラグインフォルダ );\r
974                                                                         pg.plugin.Onステージ変更();\r
975                                                                         Directory.SetCurrentDirectory( CDTXMania.strEXEのあるフォルダ );\r
976                                                                 }\r
977                                                                 //---------------------\r
978                                                                 #endregion\r
979 \r
980                                                                 break;\r
981                                                         //-----------------------------\r
982                                                                 #endregion\r
983                                                 }\r
984                                                 //-----------------------------\r
985                                                 #endregion\r
986                                                 break;\r
987 \r
988                                         case CStage.Eステージ.結果:\r
989                                                 #region [ *** ]\r
990                                                 //-----------------------------\r
991                                                 if( this.n進行描画の戻り値 != 0 )\r
992                                                 {\r
993                                                         DTX.t全チップの再生一時停止();\r
994                                                         DTX.On非活性化();\r
995                                                         r現在のステージ.On非活性化();\r
996                                                         if( !bコンパクトモード )\r
997                                                         {\r
998                                                                 Trace.TraceInformation( "----------------------" );\r
999                                                                 Trace.TraceInformation( "■ 選曲" );\r
1000                                                                 stage選曲.On活性化();\r
1001                                                                 r直前のステージ = r現在のステージ;\r
1002                                                                 r現在のステージ = stage選曲;\r
1003 \r
1004                                                                 foreach( STPlugin pg in this.listプラグイン )\r
1005                                                                 {\r
1006                                                                         Directory.SetCurrentDirectory( pg.strプラグインフォルダ );\r
1007                                                                         pg.plugin.Onステージ変更();\r
1008                                                                         Directory.SetCurrentDirectory( CDTXMania.strEXEのあるフォルダ );\r
1009                                                                 }\r
1010 \r
1011                                                                 this.tガベージコレクションを実行する();\r
1012                                                         }\r
1013                                                         else\r
1014                                                         {\r
1015                                                                 base.Window.Close();\r
1016                                                         }\r
1017                                                 }\r
1018                                                 //-----------------------------\r
1019                                                 #endregion\r
1020                                                 break;\r
1021 \r
1022                                         case CStage.Eステージ.終了:\r
1023                                                 #region [ *** ]\r
1024                                                 //-----------------------------\r
1025                                                 if( this.n進行描画の戻り値 != 0 )\r
1026                                                 {\r
1027                                                         base.Exit();\r
1028                                                 }\r
1029                                                 //-----------------------------\r
1030                                                 #endregion\r
1031                                                 break;\r
1032                                 }\r
1033                         }\r
1034 \r
1035                         this.Device.EndScene();\r
1036                         if( this.b次のタイミングで全画面・ウィンドウ切り替えを行う )\r
1037                         {\r
1038                                 ConfigIni.b全画面モード = !ConfigIni.b全画面モード;\r
1039                                 app.t全画面・ウィンドウモード切り替え();\r
1040                                 this.b次のタイミングで全画面・ウィンドウ切り替えを行う = false;\r
1041                         }\r
1042                         if( this.b次のタイミングで垂直帰線同期切り替えを行う )\r
1043                         {\r
1044                                 DeviceSettings currentSettings = app.GraphicsDeviceManager.CurrentSettings;\r
1045                                 currentSettings.EnableVSync = ConfigIni.b垂直帰線待ちを行う;\r
1046                                 app.GraphicsDeviceManager.ChangeDevice( currentSettings );\r
1047                                 this.b次のタイミングで垂直帰線同期切り替えを行う = false;\r
1048                         }\r
1049                 }\r
1050 \r
1051 \r
1052                 // その他\r
1053 \r
1054                 #region [ テクスチャの生成・解放のためのヘルパー ]\r
1055                 //-----------------\r
1056                 public static CTexture tテクスチャの生成( string fileName )\r
1057                 {\r
1058                         return tテクスチャの生成( fileName, false );\r
1059                 }\r
1060                 public static CTexture tテクスチャの生成( string fileName, bool b黒を透過する )\r
1061                 {\r
1062                         if( app == null )\r
1063                         {\r
1064                                 return null;\r
1065                         }\r
1066                         try\r
1067                         {\r
1068                                 return new CTexture( app.Device, fileName, TextureFormat, b黒を透過する );\r
1069                         }\r
1070                         catch( CTextureCreateFailedException )\r
1071                         {\r
1072                                 Trace.TraceError( "テクスチャの生成に失敗しました。({0})", new object[] { fileName } );\r
1073                                 return null;\r
1074                         }\r
1075                 }\r
1076                 public static void tテクスチャの解放( ref CTexture tx )\r
1077                 {\r
1078                         if( tx != null )\r
1079                         {\r
1080                                 tx.Dispose();\r
1081                                 tx = null;\r
1082                         }\r
1083                 }\r
1084                 //-----------------\r
1085                 #endregion\r
1086 \r
1087                 #region [ private ]\r
1088                 //-----------------\r
1089                 private bool bマウスカーソル表示中 = true;\r
1090                 private bool b終了処理完了済み;\r
1091                 private static CDTX dtx;\r
1092                 private List<CActivity> listトップレベルActivities;\r
1093                 private int n進行描画の戻り値;\r
1094 \r
1095                 private void t起動処理()\r
1096                 {\r
1097                         strEXEのあるフォルダ = Environment.CurrentDirectory + @"\";\r
1098 \r
1099                         #region [ Config.ini の読込み ]\r
1100                         //---------------------\r
1101                         ConfigIni = new CConfigIni();\r
1102                         string path = strEXEのあるフォルダ + "Config.ini";\r
1103                         if( File.Exists( path ) )\r
1104                         {\r
1105                                 try\r
1106                                 {\r
1107                                         ConfigIni.t読み込み( path );\r
1108                                 }\r
1109                                 catch\r
1110                                 {\r
1111                                         ConfigIni = new CConfigIni();   // 存在してなければ新規生成\r
1112                                 }\r
1113                         }\r
1114                         //---------------------\r
1115                         #endregion\r
1116                         #region [ ログ出力開始 ]\r
1117                         //---------------------\r
1118                         Trace.AutoFlush = true;\r
1119                         if( ConfigIni.bログ出力 )\r
1120                         {\r
1121                                 Trace.Listeners.Add( new CTraceLogListener( new StreamWriter( "DTXManiaLog.txt", false, Encoding.GetEncoding( "shift-jis" ) ) ) );\r
1122                         }\r
1123                         Trace.WriteLine( "" );\r
1124                         Trace.WriteLine( "DTXMania powered by YAMAHA Silent Session Drums" );\r
1125                         Trace.WriteLine( string.Format( "Release: {0}", VERSION ) );\r
1126                         Trace.WriteLine( "" );\r
1127                         Trace.TraceInformation( "----------------------" );\r
1128                         Trace.TraceInformation( "■ アプリケーションの初期化" );\r
1129                         Trace.TraceInformation( "OS Version: " + Environment.OSVersion );\r
1130                         Trace.TraceInformation( "ProcessorCount: " + Environment.ProcessorCount.ToString() );\r
1131                         Trace.TraceInformation( "CLR Version: " + Environment.Version.ToString() );\r
1132                         //---------------------\r
1133                         #endregion\r
1134                         #region [ コンパクトモードスイッチの有無 ]\r
1135                         //---------------------\r
1136                         bコンパクトモード = false;\r
1137                         strコンパクトモードファイル = "";\r
1138                         string[] commandLineArgs = Environment.GetCommandLineArgs();\r
1139                         \r
1140                         if( ( commandLineArgs != null ) && ( commandLineArgs.Length > 1 ) )\r
1141                         {\r
1142                                 bコンパクトモード = true;\r
1143                                 strコンパクトモードファイル = commandLineArgs[ 1 ];\r
1144                                 Trace.TraceInformation( "コンパクトモードで起動します。[{0}]", new object[] { strコンパクトモードファイル } );\r
1145                         }\r
1146                         //---------------------\r
1147                         #endregion\r
1148 \r
1149                         #region [ ウィンドウ初期化 ]\r
1150                         //---------------------\r
1151                         base.Window.Text = "DTXMania .NET style release " + VERSION;\r
1152                         base.Window.ClientSize = new Size(ConfigIni.nウインドウwidth, ConfigIni.nウインドウheight);   // #34510 yyagi 2010.10.31 to change window size got from Config.ini\r
1153                         base.Window.MaximizeBox = false;\r
1154                         base.Window.FormBorderStyle = FormBorderStyle.Sizable;  // #23510 2010.10.27 yyagi: changed from FixedDialog to Sizable, to support window resize\r
1155                         base.Window.ShowIcon = true;\r
1156                         base.Window.Icon = Properties.Resources.dtx;\r
1157                         base.Window.KeyDown += new KeyEventHandler( this.Window_KeyDown );\r
1158                         base.Window.ApplicationActivated += new EventHandler( this.Window_ApplicationActivated );\r
1159                         base.Window.ApplicationDeactivated += new EventHandler( this.Window_ApplicationDeactivated );\r
1160 //                      base.Window.Resize += new EventHandler(Window_Resize);\r
1161                         //---------------------\r
1162                         #endregion\r
1163                         #region [ Direct3D9 デバイスの生成 ]\r
1164                         //---------------------\r
1165                         DeviceSettings settings = new DeviceSettings();\r
1166                         settings.Windowed = ConfigIni.bウィンドウモード;\r
1167                         settings.BackBufferWidth = 640;\r
1168                         settings.BackBufferHeight = 480;\r
1169                         settings.EnableVSync = ConfigIni.b垂直帰線待ちを行う;\r
1170                         base.GraphicsDeviceManager.ChangeDevice( settings );\r
1171                         base.IsFixedTimeStep = false;\r
1172                         base.Window.ClientSize = new Size(ConfigIni.nウインドウwidth, ConfigIni.nウインドウheight);   // #23510 2010.10.31 yyagi\r
1173                         //---------------------\r
1174                         #endregion\r
1175 \r
1176                         DTX = null;\r
1177 \r
1178                         #region [ Skin の初期化 ]\r
1179                         //---------------------\r
1180                         Trace.TraceInformation( "スキンの初期化を行います。" );\r
1181                         Trace.Indent();\r
1182                         try\r
1183                         {\r
1184                                 Skin = new CSkin();\r
1185                                 Trace.TraceInformation( "スキンの初期化を完了しました。" );\r
1186                         }\r
1187                         catch\r
1188                         {\r
1189                                 Trace.TraceInformation( "スキンの初期化に失敗しました。" );\r
1190                                 throw;\r
1191                         }\r
1192                         finally\r
1193                         {\r
1194                                 Trace.Unindent();\r
1195                         }\r
1196                         //---------------------\r
1197                         #endregion\r
1198                         #region [ Timer の初期化 ]\r
1199                         //---------------------\r
1200                         Trace.TraceInformation( "タイマの初期化を行います。" );\r
1201                         Trace.Indent();\r
1202                         try\r
1203                         {\r
1204                                 Timer = new CTimer( CTimer.E種別.MultiMedia );\r
1205                                 Trace.TraceInformation( "タイマの初期化を完了しました。" );\r
1206                         }\r
1207                         finally\r
1208                         {\r
1209                                 Trace.Unindent();\r
1210                         }\r
1211                         //---------------------\r
1212                         #endregion\r
1213                         #region [ FPS カウンタの初期化 ]\r
1214                         //---------------------\r
1215                         Trace.TraceInformation( "FPSカウンタの初期化を行います。" );\r
1216                         Trace.Indent();\r
1217                         try\r
1218                         {\r
1219                                 FPS = new CFPS();\r
1220                                 Trace.TraceInformation( "FPSカウンタを生成しました。" );\r
1221                         }\r
1222                         finally\r
1223                         {\r
1224                                 Trace.Unindent();\r
1225                         }\r
1226                         //---------------------\r
1227                         #endregion\r
1228                         #region [ act文字コンソールの初期化 ]\r
1229                         //---------------------\r
1230                         Trace.TraceInformation( "文字コンソールの初期化を行います。" );\r
1231                         Trace.Indent();\r
1232                         try\r
1233                         {\r
1234                                 act文字コンソール = new C文字コンソール();\r
1235                                 Trace.TraceInformation( "文字コンソールを生成しました。" );\r
1236                                 act文字コンソール.On活性化();\r
1237                                 Trace.TraceInformation( "文字コンソールを活性化しました。" );\r
1238                                 Trace.TraceInformation( "文字コンソールの初期化を完了しました。" );\r
1239                         }\r
1240                         catch( Exception exception )\r
1241                         {\r
1242                                 Trace.TraceError( exception.Message );\r
1243                                 Trace.TraceError( "文字コンソールの初期化に失敗しました。" );\r
1244                         }\r
1245                         finally\r
1246                         {\r
1247                                 Trace.Unindent();\r
1248                         }\r
1249                         //---------------------\r
1250                         #endregion\r
1251                         #region [ Input管理 の初期化 ]\r
1252                         //---------------------\r
1253                         Trace.TraceInformation( "DirectInput, MIDI入力の初期化を行います。" );\r
1254                         Trace.Indent();\r
1255                         try\r
1256                         {\r
1257                                 Input管理 = new CInput管理( base.Window.Handle );\r
1258                                 foreach( IInputDevice device in Input管理.list入力デバイス )\r
1259                                 {\r
1260                                         if( ( device.e入力デバイス種別 == E入力デバイス種別.Joystick ) && !ConfigIni.dicJoystick.ContainsValue( device.GUID ) )\r
1261                                         {\r
1262                                                 int key = 0;\r
1263                                                 while( ConfigIni.dicJoystick.ContainsKey( key ) )\r
1264                                                 {\r
1265                                                         key++;\r
1266                                                 }\r
1267                                                 ConfigIni.dicJoystick.Add( key, device.GUID );\r
1268                                         }\r
1269                                 }\r
1270                                 foreach( IInputDevice device2 in Input管理.list入力デバイス )\r
1271                                 {\r
1272                                         if( device2.e入力デバイス種別 == E入力デバイス種別.Joystick )\r
1273                                         {\r
1274                                                 foreach( KeyValuePair<int, string> pair in ConfigIni.dicJoystick )\r
1275                                                 {\r
1276                                                         if( device2.GUID.Equals( pair.Value ) )\r
1277                                                         {\r
1278                                                                 ( (CInputJoystick) device2 ).SetID( pair.Key );\r
1279                                                                 break;\r
1280                                                         }\r
1281                                                 }\r
1282                                                 continue;\r
1283                                         }\r
1284                                 }\r
1285                                 Trace.TraceInformation( "DirectInput の初期化を完了しました。" );\r
1286                         }\r
1287                         catch( Exception exception2 )\r
1288                         {\r
1289                                 Trace.TraceError( exception2.Message );\r
1290                                 Trace.TraceError( "DirectInput, MIDI入力の初期化に失敗しました。" );\r
1291                                 throw;\r
1292                         }\r
1293                         finally\r
1294                         {\r
1295                                 Trace.Unindent();\r
1296                         }\r
1297                         //---------------------\r
1298                         #endregion\r
1299                         #region [ Pad の初期化 ]\r
1300                         //---------------------\r
1301                         Trace.TraceInformation( "パッドの初期化を行います。" );\r
1302                         Trace.Indent();\r
1303                         try\r
1304                         {\r
1305                                 Pad = new CPad( ConfigIni, Input管理 );\r
1306                                 Trace.TraceInformation( "パッドの初期化を完了しました。" );\r
1307                         }\r
1308                         catch( Exception exception3 )\r
1309                         {\r
1310                                 Trace.TraceError( exception3.Message );\r
1311                                 Trace.TraceError( "パッドの初期化に失敗しました。" );\r
1312                         }\r
1313                         finally\r
1314                         {\r
1315                                 Trace.Unindent();\r
1316                         }\r
1317                         //---------------------\r
1318                         #endregion\r
1319                         #region [ Sound管理 の初期化 ]\r
1320                         //---------------------\r
1321                         Trace.TraceInformation( "DirectSound の初期化を行います。" );\r
1322                         Trace.Indent();\r
1323                         try\r
1324                         {\r
1325                                 Sound管理 = new CSound管理( base.Window.Handle );\r
1326                                 Trace.TraceInformation( "DirectSound の初期化を完了しました。" );\r
1327                         }\r
1328                         catch\r
1329                         {\r
1330                                 Trace.TraceError( "DirectSound の初期化に失敗しました。" );\r
1331                                 throw;\r
1332                         }\r
1333                         finally\r
1334                         {\r
1335                                 Trace.Unindent();\r
1336                         }\r
1337                         //---------------------\r
1338                         #endregion\r
1339                         #region [ Songs管理 の初期化 ]\r
1340                         //---------------------\r
1341                         Trace.TraceInformation( "曲リストの初期化を行います。" );\r
1342                         Trace.Indent();\r
1343                         try\r
1344                         {\r
1345                                 Songs管理 = new CSongs管理();\r
1346                                 Trace.TraceInformation( "曲リストの初期化を完了しました。" );\r
1347                         }\r
1348                         catch( Exception exception4 )\r
1349                         {\r
1350                                 Trace.TraceError( exception4.Message );\r
1351                                 Trace.TraceError( "曲リストの初期化に失敗しました。" );\r
1352                         }\r
1353                         finally\r
1354                         {\r
1355                                 Trace.Unindent();\r
1356                         }\r
1357                         //---------------------\r
1358                         #endregion\r
1359                         #region [ CAvi の初期化 ]\r
1360                         //---------------------\r
1361                         CAvi.t初期化();\r
1362                         //---------------------\r
1363                         #endregion\r
1364                         #region [ Random の初期化 ]\r
1365                         //---------------------\r
1366                         Random = new Random( (int) Timer.nシステム時刻 );\r
1367                         //---------------------\r
1368                         #endregion\r
1369                         #region [ ステージの初期化 ]\r
1370                         //---------------------\r
1371                         r現在のステージ = null;\r
1372                         r直前のステージ = null;\r
1373                         stage起動 = new CStage起動();\r
1374                         stageタイトル = new CStageタイトル();\r
1375                         stageオプション = new CStageオプション();\r
1376                         stageコンフィグ = new CStageコンフィグ();\r
1377                         stage選曲 = new CStage選曲();\r
1378                         stage曲読み込み = new CStage曲読み込み();\r
1379                         stage演奏ドラム画面 = new CStage演奏ドラム画面();\r
1380                         stage演奏ギター画面 = new CStage演奏ギター画面();\r
1381                         stage結果 = new CStage結果();\r
1382                         stage終了 = new CStage終了();\r
1383                         this.listトップレベルActivities = new List<CActivity>();\r
1384                         this.listトップレベルActivities.Add( act文字コンソール );\r
1385                         this.listトップレベルActivities.Add( stage起動 );\r
1386                         this.listトップレベルActivities.Add( stageタイトル );\r
1387                         this.listトップレベルActivities.Add( stageオプション );\r
1388                         this.listトップレベルActivities.Add( stageコンフィグ );\r
1389                         this.listトップレベルActivities.Add( stage選曲 );\r
1390                         this.listトップレベルActivities.Add( stage曲読み込み );\r
1391                         this.listトップレベルActivities.Add( stage演奏ドラム画面 );\r
1392                         this.listトップレベルActivities.Add( stage演奏ギター画面 );\r
1393                         this.listトップレベルActivities.Add( stage結果 );\r
1394                         this.listトップレベルActivities.Add( stage終了 );\r
1395                         //---------------------\r
1396                         #endregion\r
1397                         #region [ プラグインの検索と生成 ]\r
1398                         //---------------------\r
1399                         PluginHost = new CPluginHost();\r
1400 \r
1401                         Trace.TraceInformation( "プラグインの検索と生成を行います。" );\r
1402                         Trace.Indent();\r
1403                         try\r
1404                         {\r
1405                                 this.tプラグイン検索と生成();\r
1406                                 Trace.TraceInformation( "プラグインの検索と生成を完了しました。" );\r
1407                         }\r
1408                         finally\r
1409                         {\r
1410                                 Trace.Unindent();\r
1411                         }\r
1412                         //---------------------\r
1413                         #endregion\r
1414                         #region [ プラグインの初期化 ]\r
1415                         //---------------------\r
1416                         if( this.listプラグイン != null && this.listプラグイン.Count > 0 )\r
1417                         {\r
1418                                 Trace.TraceInformation( "プラグインの初期化を行います。" );\r
1419                                 Trace.Indent();\r
1420                                 try\r
1421                                 {\r
1422                                         foreach( STPlugin st in this.listプラグイン )\r
1423                                         {\r
1424                                                 Directory.SetCurrentDirectory( st.strプラグインフォルダ );\r
1425                                                 st.plugin.On初期化( this.PluginHost );\r
1426                                                 st.plugin.OnManagedリソースの作成();\r
1427                                                 st.plugin.OnUnmanagedリソースの作成();\r
1428                                                 Directory.SetCurrentDirectory( CDTXMania.strEXEのあるフォルダ );\r
1429                                         }\r
1430                                         Trace.TraceInformation( "すべてのプラグインの初期化を完了しました。" );\r
1431                                 }\r
1432                                 catch\r
1433                                 {\r
1434                                         Trace.TraceError( "プラグインのどれかの初期化に失敗しました。" );\r
1435                                         throw;\r
1436                                 }\r
1437                                 finally\r
1438                                 {\r
1439                                         Trace.Unindent();\r
1440                                 }\r
1441                         }\r
1442 \r
1443                         //---------------------\r
1444                         #endregion\r
1445 \r
1446                         Trace.TraceInformation( "アプリケーションの初期化を完了しました。" );\r
1447 \r
1448                         #region [ 最初のステージの起動 ]\r
1449                         //---------------------\r
1450                         Trace.TraceInformation( "----------------------" );\r
1451                         Trace.TraceInformation( "■ 起動" );\r
1452 \r
1453                         r現在のステージ = stage起動;\r
1454                         r現在のステージ.On活性化();\r
1455                         //---------------------\r
1456                         #endregion\r
1457                 }\r
1458                 private void t終了処理()\r
1459                 {\r
1460                         if( !this.b終了処理完了済み )\r
1461                         {\r
1462                                 Trace.TraceInformation( "----------------------" );\r
1463                                 Trace.TraceInformation( "■ アプリケーションの終了" );\r
1464                                 if( r現在のステージ != null )\r
1465                                 {\r
1466                                         Trace.TraceInformation( "現在のステージを終了します。" );\r
1467                                         Trace.Indent();\r
1468                                         try\r
1469                                         {\r
1470                                                 r現在のステージ.On非活性化();\r
1471                                                 Trace.TraceInformation( "現在のステージの終了処理を完了しました。" );\r
1472                                         }\r
1473                                         finally\r
1474                                         {\r
1475                                                 Trace.Unindent();\r
1476                                         }\r
1477                                 }\r
1478 \r
1479                                 if( this.listプラグイン != null && this.listプラグイン.Count > 0 )\r
1480                                 {\r
1481                                         Trace.TraceInformation( "すべてのプラグインを終了します。" );\r
1482                                         Trace.Indent();\r
1483                                         try\r
1484                                         {\r
1485                                                 foreach( STPlugin st in this.listプラグイン )\r
1486                                                 {\r
1487                                                         Directory.SetCurrentDirectory( st.strプラグインフォルダ );\r
1488                                                         st.plugin.OnUnmanagedリソースの解放();\r
1489                                                         st.plugin.OnManagedリソースの解放();\r
1490                                                         st.plugin.On終了();\r
1491                                                         Directory.SetCurrentDirectory( CDTXMania.strEXEのあるフォルダ );\r
1492                                                 }\r
1493                                                 PluginHost = null;\r
1494                                                 Trace.TraceInformation( "すべてのプラグインの終了処理を完了しました。" );\r
1495                                         }\r
1496                                         finally\r
1497                                         {\r
1498                                                 Trace.Unindent();\r
1499                                         }\r
1500                                 }\r
1501 \r
1502                                 if( Songs管理 != null )\r
1503                                 {\r
1504                                         Trace.TraceInformation( "曲リストの終了処理を行います。" );\r
1505                                         Trace.Indent();\r
1506                                         try\r
1507                                         {\r
1508                                                 Songs管理 = null;\r
1509                                                 Trace.TraceInformation( "曲リストの終了処理を完了しました。" );\r
1510                                         }\r
1511                                         catch( Exception exception )\r
1512                                         {\r
1513                                                 Trace.TraceError( exception.Message );\r
1514                                                 Trace.TraceError( "曲リストの終了処理に失敗しました。" );\r
1515                                         }\r
1516                                         finally\r
1517                                         {\r
1518                                                 Trace.Unindent();\r
1519                                         }\r
1520                                 }\r
1521                                 CAvi.t終了();\r
1522                                 if( Skin != null )\r
1523                                 {\r
1524                                         Trace.TraceInformation( "スキンの終了処理を行います。" );\r
1525                                         Trace.Indent();\r
1526                                         try\r
1527                                         {\r
1528                                                 Skin.Dispose();\r
1529                                                 Skin = null;\r
1530                                                 Trace.TraceInformation( "スキンの終了処理を完了しました。" );\r
1531                                         }\r
1532                                         catch( Exception exception2 )\r
1533                                         {\r
1534                                                 Trace.TraceError( exception2.Message );\r
1535                                                 Trace.TraceError( "スキンの終了処理に失敗しました。" );\r
1536                                         }\r
1537                                         finally\r
1538                                         {\r
1539                                                 Trace.Unindent();\r
1540                                         }\r
1541                                 }\r
1542                                 if( Sound管理 != null )\r
1543                                 {\r
1544                                         Trace.TraceInformation( "DirectSound の終了処理を行います。" );\r
1545                                         Trace.Indent();\r
1546                                         try\r
1547                                         {\r
1548                                                 Sound管理.Dispose();\r
1549                                                 Sound管理 = null;\r
1550                                                 Trace.TraceInformation( "DirectSound の終了処理を完了しました。" );\r
1551                                         }\r
1552                                         catch( Exception exception3 )\r
1553                                         {\r
1554                                                 Trace.TraceError( exception3.Message );\r
1555                                                 Trace.TraceError( "DirectSound の終了処理に失敗しました。" );\r
1556                                         }\r
1557                                         finally\r
1558                                         {\r
1559                                                 Trace.Unindent();\r
1560                                         }\r
1561                                 }\r
1562                                 if( Pad != null )\r
1563                                 {\r
1564                                         Trace.TraceInformation( "パッドの終了処理を行います。" );\r
1565                                         Trace.Indent();\r
1566                                         try\r
1567                                         {\r
1568                                                 Pad = null;\r
1569                                                 Trace.TraceInformation( "パッドの終了処理を完了しました。" );\r
1570                                         }\r
1571                                         catch( Exception exception4 )\r
1572                                         {\r
1573                                                 Trace.TraceError( exception4.Message );\r
1574                                                 Trace.TraceError( "パッドの終了処理に失敗しました。" );\r
1575                                         }\r
1576                                         finally\r
1577                                         {\r
1578                                                 Trace.Unindent();\r
1579                                         }\r
1580                                 }\r
1581                                 if( Input管理 != null )\r
1582                                 {\r
1583                                         Trace.TraceInformation( "DirectInput, MIDI入力の終了処理を行います。" );\r
1584                                         Trace.Indent();\r
1585                                         try\r
1586                                         {\r
1587                                                 Input管理.Dispose();\r
1588                                                 Input管理 = null;\r
1589                                                 Trace.TraceInformation( "DirectInput, MIDI入力の終了処理を完了しました。" );\r
1590                                         }\r
1591                                         catch( Exception exception5 )\r
1592                                         {\r
1593                                                 Trace.TraceError( exception5.Message );\r
1594                                                 Trace.TraceError( "DirectInput, MIDI入力の終了処理に失敗しました。" );\r
1595                                         }\r
1596                                         finally\r
1597                                         {\r
1598                                                 Trace.Unindent();\r
1599                                         }\r
1600                                 }\r
1601                                 if( act文字コンソール != null )\r
1602                                 {\r
1603                                         Trace.TraceInformation( "文字コンソールの終了処理を行います。" );\r
1604                                         Trace.Indent();\r
1605                                         try\r
1606                                         {\r
1607                                                 act文字コンソール.On非活性化();\r
1608                                                 act文字コンソール = null;\r
1609                                                 Trace.TraceInformation( "文字コンソールの終了処理を完了しました。" );\r
1610                                         }\r
1611                                         catch( Exception exception6 )\r
1612                                         {\r
1613                                                 Trace.TraceError( exception6.Message );\r
1614                                                 Trace.TraceError( "文字コンソールの終了処理に失敗しました。" );\r
1615                                         }\r
1616                                         finally\r
1617                                         {\r
1618                                                 Trace.Unindent();\r
1619                                         }\r
1620                                 }\r
1621                                 Trace.TraceInformation( "FPSカウンタの終了処理を行います。" );\r
1622                                 Trace.Indent();\r
1623                                 try\r
1624                                 {\r
1625                                         if( FPS != null )\r
1626                                         {\r
1627                                                 FPS = null;\r
1628                                         }\r
1629                                         Trace.TraceInformation( "FPSカウンタの終了処理を完了しました。" );\r
1630                                 }\r
1631                                 finally\r
1632                                 {\r
1633                                         Trace.Unindent();\r
1634                                 }\r
1635                                 Trace.TraceInformation( "タイマの終了処理を行います。" );\r
1636                                 Trace.Indent();\r
1637                                 try\r
1638                                 {\r
1639                                         if( Timer != null )\r
1640                                         {\r
1641                                                 Timer.Dispose();\r
1642                                                 Timer = null;\r
1643                                                 Trace.TraceInformation( "タイマの終了処理を完了しました。" );\r
1644                                         }\r
1645                                         else\r
1646                                         {\r
1647                                                 Trace.TraceInformation( "タイマは使用されていません。" );\r
1648                                         }\r
1649                                 }\r
1650                                 finally\r
1651                                 {\r
1652                                         Trace.Unindent();\r
1653                                 }\r
1654                                 Trace.TraceInformation( "Config.ini を出力します。" );\r
1655                                 // #23510 2010.10.31 yyagi\r
1656                                 // とりあえずここでConfigへの変数書き戻しを行っているが、\r
1657                                 // 一段落したらリサイズイベントの処理中に入れ込んでしまう予定。\r
1658                                         ConfigIni.nウインドウwidth = (base.Window.ClientSize.Width > 0) ? base.Window.ClientSize.Width : currentClientSize.Width;  // #23510 2010.10.31 yyagi add\r
1659                                         ConfigIni.nウインドウheight = (base.Window.ClientSize.Height > 0) ? base.Window.ClientSize.Height : currentClientSize.Height;\r
1660 Debug.WriteLine("width,height=" + base.Window.ClientSize.Width + " " + base.Window.ClientSize.Height);\r
1661                                 string str = strEXEのあるフォルダ + "Config.ini";\r
1662                                 Trace.Indent();\r
1663                                 try\r
1664                                 {\r
1665                                         ConfigIni.t書き出し( str );\r
1666                                         Trace.TraceInformation( "保存しました。({0})", new object[] { str } );\r
1667                                 }\r
1668                                 catch( Exception exception7 )\r
1669                                 {\r
1670                                         Trace.TraceError( exception7.Message );\r
1671                                         Trace.TraceError( "Config.ini の出力に失敗しました。({0})", new object[] { str } );\r
1672                                 }\r
1673                                 finally\r
1674                                 {\r
1675                                         Trace.Unindent();\r
1676                                 }\r
1677                                 Trace.TraceInformation( "アプリケーションの終了処理を完了しました。" );\r
1678 \r
1679 \r
1680                                 this.b終了処理完了済み = true;\r
1681                         }\r
1682                 }\r
1683                 private void Window_ApplicationActivated( object sender, EventArgs e )\r
1684                 {\r
1685                         this.bApplicationActive = true;\r
1686                 }\r
1687                 private void Window_ApplicationDeactivated( object sender, EventArgs e )\r
1688                 {\r
1689                         this.bApplicationActive = false;\r
1690                 }\r
1691                 private void Window_KeyDown( object sender, KeyEventArgs e )\r
1692                 {\r
1693                         if( e.KeyCode == Keys.Menu )\r
1694                         {\r
1695                                 e.SuppressKeyPress = true;\r
1696                         }\r
1697                         else if( ( e.KeyCode == Keys.Return ) && e.Alt )\r
1698                         {\r
1699                                 if( ConfigIni != null )\r
1700                                 {\r
1701                                         ConfigIni.bウィンドウモード = !ConfigIni.bウィンドウモード;\r
1702                                         this.t全画面・ウィンドウモード切り替え();\r
1703                                 }\r
1704                                 e.SuppressKeyPress = true;\r
1705                         }\r
1706                 }\r
1707                 private CScoreIni tScoreIniへBGMAdjustとHistoryとPlayCountを更新( string str新ヒストリ行 )\r
1708                 {\r
1709                         bool flag;\r
1710                         bool flag2;\r
1711                         bool flag3;\r
1712                         string str = DTX.strファイル名の絶対パス + ".score.ini";\r
1713                         CScoreIni ini = new CScoreIni( str );\r
1714                         if( !File.Exists( str ) )\r
1715                         {\r
1716                                 ini.stファイル.Title = DTX.TITLE;\r
1717                                 ini.stファイル.Name = DTX.strファイル名;\r
1718                                 ini.stファイル.Hash = CScoreIni.tファイルのMD5を求めて返す( DTX.strファイル名の絶対パス );\r
1719                                 for( int i = 0; i < 6; i++ )\r
1720                                 {\r
1721                                         ini.stセクション[ i ].nPerfectになる範囲ms = nPerfect範囲ms;\r
1722                                         ini.stセクション[ i ].nGreatになる範囲ms = nGreat範囲ms;\r
1723                                         ini.stセクション[ i ].nGoodになる範囲ms = nGood範囲ms;\r
1724                                         ini.stセクション[ i ].nPoorになる範囲ms = nPoor範囲ms;\r
1725                                 }\r
1726                         }\r
1727                         ini.stファイル.BGMAdjust = DTX.nBGMAdjust;\r
1728                         CScoreIni.t更新条件を取得する( out flag, out flag2, out flag3 );\r
1729                         if( ( flag || flag2 ) || flag3 )\r
1730                         {\r
1731                                 if( flag )\r
1732                                 {\r
1733                                         ini.stファイル.PlayCountDrums++;\r
1734                                 }\r
1735                                 if( flag2 )\r
1736                                 {\r
1737                                         ini.stファイル.PlayCountGuitar++;\r
1738                                 }\r
1739                                 if( flag3 )\r
1740                                 {\r
1741                                         ini.stファイル.PlayCountBass++;\r
1742                                 }\r
1743                                 ini.tヒストリを追加する( str新ヒストリ行 );\r
1744                                 if( !bコンパクトモード )\r
1745                                 {\r
1746                                         stage選曲.r現在選択中のスコア.譜面情報.演奏回数.Drums = ini.stファイル.PlayCountDrums;\r
1747                                         stage選曲.r現在選択中のスコア.譜面情報.演奏回数.Guitar = ini.stファイル.PlayCountGuitar;\r
1748                                         stage選曲.r現在選択中のスコア.譜面情報.演奏回数.Bass = ini.stファイル.PlayCountBass;\r
1749                                         for( int j = 0; j < ini.stファイル.History.Length; j++ )\r
1750                                         {\r
1751                                                 stage選曲.r現在選択中のスコア.譜面情報.演奏履歴[ j ] = ini.stファイル.History[ j ];\r
1752                                         }\r
1753                                 }\r
1754                         }\r
1755                         if( ConfigIni.bScoreIniを出力する )\r
1756                         {\r
1757                                 ini.t書き出し( str );\r
1758                         }\r
1759 \r
1760                         return ini;\r
1761                 }\r
1762                 private void tガベージコレクションを実行する()\r
1763                 {\r
1764                         GC.Collect();\r
1765                         GC.WaitForPendingFinalizers();\r
1766                         GC.Collect();\r
1767                         GC.WaitForPendingFinalizers();\r
1768                 }\r
1769                 private void tプラグイン検索と生成()\r
1770                 {\r
1771                         this.listプラグイン = new List<STPlugin>();\r
1772 \r
1773                         string strIPluginActivityの名前 = typeof( IPluginActivity ).FullName;\r
1774                         string strプラグインフォルダパス = strEXEのあるフォルダ + "Plugins\\";\r
1775 \r
1776                         this.t指定フォルダ内でのプラグイン検索と生成( strプラグインフォルダパス, strIPluginActivityの名前 );\r
1777 \r
1778                         if( this.listプラグイン.Count > 0 )\r
1779                                 Trace.TraceInformation( this.listプラグイン.Count + " 個のプラグインを読み込みました。" );\r
1780                 }\r
1781                 private void t指定フォルダ内でのプラグイン検索と生成( string strプラグインフォルダパス, string strプラグイン型名 )\r
1782                 {\r
1783                         // 指定されたパスが存在しないとエラー\r
1784                         if( !Directory.Exists( strプラグインフォルダパス ) )\r
1785                         {\r
1786                                 Trace.TraceWarning( "プラグインフォルダが存在しません。(" + strプラグインフォルダパス + ")" );\r
1787                                 return;\r
1788                         }\r
1789 \r
1790                         // (1) すべての *.dll について…\r
1791                         string[] strDLLs = System.IO.Directory.GetFiles( strプラグインフォルダパス, "*.dll" );\r
1792                         foreach( string dllName in strDLLs )\r
1793                         {\r
1794                                 try\r
1795                                 {\r
1796                                         // (1-1) dll をアセンブリとして読み込む。\r
1797                                         System.Reflection.Assembly asm = System.Reflection.Assembly.LoadFrom( dllName );\r
1798 \r
1799                                         // (1-2) アセンブリ内のすべての型について、プラグインとして有効か調べる\r
1800                                         foreach( Type t in asm.GetTypes() )\r
1801                                         {\r
1802                                                 //  (1-3) ↓クラスであり↓Publicであり↓抽象クラスでなく↓IPlugin型のインスタンスが作れる 型を持っていれば有効\r
1803                                                 if( t.IsClass && t.IsPublic && !t.IsAbstract && t.GetInterface( strプラグイン型名 ) != null )\r
1804                                                 {\r
1805                                                         // (1-4) クラス名からインスタンスを作成する\r
1806                                                         var st = new STPlugin() {\r
1807                                                                 plugin = (IPluginActivity) asm.CreateInstance( t.FullName ),\r
1808                                                                 strプラグインフォルダ = Path.GetDirectoryName( dllName ),\r
1809                                                                 strアセンブリ簡易名 = asm.GetName().Name,\r
1810                                                                 Version = asm.GetName().Version,\r
1811                                                         };\r
1812 \r
1813                                                         // (1-5) プラグインリストへ登録\r
1814                                                         this.listプラグイン.Add( st );\r
1815                                                         Trace.TraceInformation( "プラグイン {0} ({1}, {2}, {3}) を読み込みました。", t.FullName, Path.GetFileName( dllName ), st.strアセンブリ簡易名, st.Version.ToString() );\r
1816                                                 }\r
1817                                         }\r
1818                                 }\r
1819                                 catch\r
1820                                 {\r
1821                                         Trace.TraceInformation( dllName + " からプラグインを生成することに失敗しました。スキップします。" );\r
1822                                 }\r
1823                         }\r
1824 \r
1825                         // (2) サブフォルダがあれば再帰する\r
1826                         string[] strDirs = Directory.GetDirectories( strプラグインフォルダパス, "*" );\r
1827                         foreach( string dir in strDirs )\r
1828                                 this.t指定フォルダ内でのプラグイン検索と生成( dir + "\\", strプラグイン型名 );\r
1829                 }\r
1830                 //-----------------\r
1831                 #endregion\r
1832         }\r
1833 }\r