OSDN Git Service

5a3f0ecff8c17571441a4f4d8737ab79d21e3dd8
[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 System.Threading;\r
10 using SlimDX;\r
11 using SlimDX.Direct3D9;\r
12 using FDK;\r
13 using SampleFramework;\r
14 \r
15 namespace DTXMania\r
16 {\r
17         internal class CDTXMania : Game\r
18         {\r
19                 // プロパティ\r
20 \r
21                 public static readonly string VERSION = "087(110115)";\r
22 //              public static readonly string VERSION = "086(101120)";\r
23                 public static readonly string SLIMDXDLL = "c_net20x86_Jun2010";\r
24                 public static readonly string D3DXDLL = "d3dx9_43.dll";         // June 2010\r
25         //public static readonly string D3DXDLL = "d3dx9_42.dll";       // February 2010\r
26         //public static readonly string D3DXDLL = "d3dx9_41.dll";       // March 2009\r
27 \r
28                 public static CDTXMania app\r
29                 {\r
30                         get;\r
31                         private set;\r
32                 }\r
33                 public static C文字コンソール act文字コンソール\r
34                 { \r
35                         get;\r
36                         private set;\r
37                 }\r
38                 public static bool bコンパクトモード\r
39                 {\r
40                         get;\r
41                         private set;\r
42                 }\r
43                 public static CConfigIni ConfigIni\r
44                 {\r
45                         get; \r
46                         private set;\r
47                 }\r
48                 public static CDTX DTX\r
49                 {\r
50                         get\r
51                         {\r
52                                 return dtx;\r
53                         }\r
54                         set\r
55                         {\r
56                                 if( ( dtx != null ) && ( app != null ) )\r
57                                 {\r
58                                         dtx.On非活性化();\r
59                                         app.listトップレベルActivities.Remove( dtx );\r
60                                 }\r
61                                 dtx = value;\r
62                                 if( ( dtx != null ) && ( app != null ) )\r
63                                 {\r
64                                         app.listトップレベルActivities.Add( dtx );\r
65                                 }\r
66                         }\r
67                 }\r
68                 public static CFPS FPS\r
69                 { \r
70                         get; \r
71                         private set;\r
72                 }\r
73                 public static CInput管理 Input管理 \r
74                 {\r
75                         get;\r
76                         private set;\r
77                 }\r
78                 public static int nPerfect範囲ms\r
79                 {\r
80                         get\r
81                         {\r
82                                 if( stage選曲.r確定された曲 != null )\r
83                                 {\r
84                                         C曲リストノード c曲リストノード = stage選曲.r確定された曲.r親ノード;\r
85                                         if( ( ( c曲リストノード != null ) && ( c曲リストノード.eノード種別 == C曲リストノード.Eノード種別.BOX ) ) && ( c曲リストノード.nPerfect範囲ms >= 0 ) )\r
86                                         {\r
87                                                 return c曲リストノード.nPerfect範囲ms;\r
88                                         }\r
89                                 }\r
90                                 return ConfigIni.nヒット範囲ms.Perfect;\r
91                         }\r
92                 }\r
93                 public static int nGreat範囲ms\r
94                 {\r
95                         get\r
96                         {\r
97                                 if( stage選曲.r確定された曲 != null )\r
98                                 {\r
99                                         C曲リストノード c曲リストノード = stage選曲.r確定された曲.r親ノード;\r
100                                         if( ( ( c曲リストノード != null ) && ( c曲リストノード.eノード種別 == C曲リストノード.Eノード種別.BOX ) ) && ( c曲リストノード.nGreat範囲ms >= 0 ) )\r
101                                         {\r
102                                                 return c曲リストノード.nGreat範囲ms;\r
103                                         }\r
104                                 }\r
105                                 return ConfigIni.nヒット範囲ms.Great;\r
106                         }\r
107                 }\r
108                 public static int nGood範囲ms\r
109                 {\r
110                         get\r
111                         {\r
112                                 if( stage選曲.r確定された曲 != null )\r
113                                 {\r
114                                         C曲リストノード c曲リストノード = stage選曲.r確定された曲.r親ノード;\r
115                                         if( ( ( c曲リストノード != null ) && ( c曲リストノード.eノード種別 == C曲リストノード.Eノード種別.BOX ) ) && ( c曲リストノード.nGood範囲ms >= 0 ) )\r
116                                         {\r
117                                                 return c曲リストノード.nGood範囲ms;\r
118                                         }\r
119                                 }\r
120                                 return ConfigIni.nヒット範囲ms.Good;\r
121                         }\r
122                 }\r
123                 public static int nPoor範囲ms\r
124                 {\r
125                         get\r
126                         {\r
127                                 if( stage選曲.r確定された曲 != null )\r
128                                 {\r
129                                         C曲リストノード c曲リストノード = stage選曲.r確定された曲.r親ノード;\r
130                                         if( ( ( c曲リストノード != null ) && ( c曲リストノード.eノード種別 == C曲リストノード.Eノード種別.BOX ) ) && ( c曲リストノード.nPoor範囲ms >= 0 ) )\r
131                                         {\r
132                                                 return c曲リストノード.nPoor範囲ms;\r
133                                         }\r
134                                 }\r
135                                 return ConfigIni.nヒット範囲ms.Poor;\r
136                         }\r
137                 }\r
138                 public static CPad Pad \r
139                 {\r
140                         get;\r
141                         private set;\r
142                 }\r
143                 public static Random Random\r
144                 {\r
145                         get;\r
146                         private set;\r
147                 }\r
148                 public static CSkin Skin\r
149                 {\r
150                         get; \r
151                         private set;\r
152                 }\r
153                 public static CSongs管理 Songs管理 \r
154                 {\r
155                         get;\r
156                         private set;\r
157                 }\r
158                 public static CSound管理 Sound管理\r
159                 {\r
160                         get; \r
161                         private set;\r
162                 }\r
163                 public static CStage起動 stage起動 \r
164                 {\r
165                         get; \r
166                         private set;\r
167                 }\r
168                 public static CStageタイトル stageタイトル\r
169                 {\r
170                         get;\r
171                         private set;\r
172                 }\r
173                 public static CStageオプション stageオプション\r
174                 { \r
175                         get;\r
176                         private set;\r
177                 }\r
178                 public static CStageコンフィグ stageコンフィグ \r
179                 { \r
180                         get; \r
181                         private set;\r
182                 }\r
183                 public static CStage選曲 stage選曲\r
184                 {\r
185                         get;\r
186                         private set;\r
187                 }\r
188                 public static CStage曲読み込み stage曲読み込み\r
189                 {\r
190                         get;\r
191                         private set;\r
192                 }\r
193                 public static CStage演奏ギター画面 stage演奏ギター画面\r
194                 {\r
195                         get;\r
196                         private set;\r
197                 }\r
198                 public static CStage演奏ドラム画面 stage演奏ドラム画面\r
199                 {\r
200                         get;\r
201                         private set;\r
202                 }\r
203                 public static CStage結果 stage結果\r
204                 {\r
205                         get;\r
206                         private set;\r
207                 }\r
208                 public static CStage終了 stage終了\r
209                 {\r
210                         get;\r
211                         private set;\r
212                 }\r
213                 public static CStage r現在のステージ = null;\r
214                 public static CStage r直前のステージ = null;\r
215                 public static string strEXEのあるフォルダ \r
216                 {\r
217                         get;\r
218                         private set;\r
219                 }\r
220                 public static string strコンパクトモードファイル\r
221                 { \r
222                         get; \r
223                         private set;\r
224                 }\r
225                 public static CTimer Timer\r
226                 {\r
227                         get;\r
228                         private set;\r
229                 }\r
230                 public static Format TextureFormat = Format.A8R8G8B8;\r
231                 internal static IPluginActivity act現在入力を占有中のプラグイン = null;\r
232                 public bool bApplicationActive\r
233                 {\r
234                         get; \r
235                         private set;\r
236                 }\r
237                 public bool b次のタイミングで垂直帰線同期切り替えを行う\r
238                 {\r
239                         get; \r
240                         set;\r
241                 }\r
242                 public bool b次のタイミングで全画面・ウィンドウ切り替えを行う\r
243                 {\r
244                         get;\r
245                         set;\r
246                 }\r
247                 public Device Device\r
248                 {\r
249                         get { return base.GraphicsDeviceManager.Direct3D9.Device; }\r
250                 }\r
251                 public CPluginHost PluginHost\r
252                 {\r
253                         get;\r
254                         private set;\r
255                 }\r
256                 public List<STPlugin> listプラグイン = new List<STPlugin>();\r
257                 public struct STPlugin\r
258                 {\r
259                         public IPluginActivity plugin;\r
260                         public string strプラグインフォルダ;\r
261                         public string strアセンブリ簡易名;\r
262                         public Version Version;\r
263                 }\r
264                 private static Size currentClientSize           // #23510 2010.10.27 add yyagi to keep current window size\r
265                 {\r
266                         get;\r
267                         set;\r
268                 }\r
269 \r
270                 // コンストラクタ\r
271 \r
272                 public CDTXMania()\r
273                 {\r
274                         CDTXMania.app = this;\r
275                         this.t起動処理();\r
276                 }\r
277 \r
278 \r
279                 // メソッド\r
280 \r
281                 public void t全画面・ウィンドウモード切り替え()\r
282                 {\r
283                         DeviceSettings settings = base.GraphicsDeviceManager.CurrentSettings.Clone();\r
284                         if( ( ConfigIni != null ) && ( ConfigIni.bウィンドウモード != settings.Windowed ) )\r
285                         {\r
286                                 settings.Windowed = ConfigIni.bウィンドウモード;\r
287                                 if (ConfigIni.bウィンドウモード == false)       // #23510 2010.10.27 yyagi: backup current window size before going fullscreen mode\r
288                                 {\r
289                                         currentClientSize = this.Window.ClientSize;\r
290                                         ConfigIni.nウインドウwidth = this.Window.ClientSize.Width;\r
291                                         ConfigIni.nウインドウheight = this.Window.ClientSize.Height;\r
292                                 }\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 #if false               // #23625 2011.1.11 Config.iniからダメージ/回復値の定数変更を行う場合はここを有効にする 087リリースに合わせ機能無効化\r
770 for (int i = 0; i < 5; i++)\r
771 {\r
772         for (int j = 0; j < 2; j++)\r
773         {\r
774                 stage演奏ドラム画面.fDamageGaugeDelta[i, j] = ConfigIni.fGaugeFactor[i, j];\r
775         }\r
776 }\r
777 for (int i = 0; i < 3; i++) {\r
778         stage演奏ドラム画面.fDamageLevelFactor[i] = ConfigIni.fDamageLevelFactor[i];\r
779 }               \r
780 #endif\r
781                                                                 r直前のステージ = r現在のステージ;\r
782                                                                 r現在のステージ = stage演奏ドラム画面;\r
783                                                         }\r
784                                                         else\r
785                                                         {\r
786                                                                 Trace.TraceInformation( "----------------------" );\r
787                                                                 Trace.TraceInformation( "■ 演奏(ギター画面)" );\r
788 #if false               // #23625 2011.1.11 Config.iniからダメージ/回復値の定数変更を行う場合はここを有効にする 087リリースに合わせ機能無効化\r
789 for (int i = 0; i < 5; i++)\r
790 {\r
791         for (int j = 0; j < 2; j++)\r
792         {\r
793                 stage演奏ギター画面.fDamageGaugeDelta[i, j] = ConfigIni.fGaugeFactor[i, j];\r
794         }\r
795 }\r
796 for (int i = 0; i < 3; i++) {\r
797         stage演奏ギター画面.fDamageLevelFactor[i] = ConfigIni.fDamageLevelFactor[i];\r
798 }               \r
799 #endif\r
800                                                                 r直前のステージ = r現在のステージ;\r
801                                                                 r現在のステージ = stage演奏ギター画面;\r
802                                                         }\r
803 \r
804                                                         foreach( STPlugin pg in this.listプラグイン )\r
805                                                         {\r
806                                                                 Directory.SetCurrentDirectory( pg.strプラグインフォルダ );\r
807                                                                 pg.plugin.Onステージ変更();\r
808                                                                 Directory.SetCurrentDirectory( CDTXMania.strEXEのあるフォルダ );\r
809                                                         }\r
810 \r
811                                                         this.tガベージコレクションを実行する();\r
812                                                 }\r
813                                                 //-----------------------------\r
814                                                 #endregion\r
815                                                 break;\r
816 \r
817                                         case CStage.Eステージ.演奏:\r
818                                                 #region [ *** ]\r
819                                                 //-----------------------------\r
820                                                 switch( this.n進行描画の戻り値 )\r
821                                                 {\r
822                                                         case 0:\r
823                                                                 break;\r
824 \r
825                                                         case 1:\r
826                                                                 #region [ 演奏キャンセル ]\r
827                                                                 //-----------------------------\r
828                                                                 scoreIni = this.tScoreIniへBGMAdjustとHistoryとPlayCountを更新( "Play canceled" );\r
829 \r
830                                                                 #region [ プラグイン On演奏キャンセル() の呼び出し ]\r
831                                                                 //---------------------\r
832                                                                 foreach( STPlugin pg in this.listプラグイン )\r
833                                                                 {\r
834                                                                         Directory.SetCurrentDirectory( pg.strプラグインフォルダ );\r
835                                                                         pg.plugin.On演奏キャンセル( scoreIni );\r
836                                                                         Directory.SetCurrentDirectory( CDTXMania.strEXEのあるフォルダ );\r
837                                                                 }\r
838                                                                 //---------------------\r
839                                                                 #endregion\r
840 \r
841                                                                 DTX.t全チップの再生停止();\r
842                                                                 DTX.On非活性化();\r
843                                                                 r現在のステージ.On非活性化();\r
844                                                                 if( bコンパクトモード )\r
845                                                                 {\r
846                                                                         base.Window.Close();\r
847                                                                 }\r
848                                                                 else\r
849                                                                 {\r
850                                                                         Trace.TraceInformation( "----------------------" );\r
851                                                                         Trace.TraceInformation( "■ 選曲" );\r
852                                                                         stage選曲.On活性化();\r
853                                                                         r直前のステージ = r現在のステージ;\r
854                                                                         r現在のステージ = stage選曲;\r
855 \r
856                                                                         #region [ プラグイン Onステージ変更() の呼び出し ]\r
857                                                                         //---------------------\r
858                                                                         foreach( STPlugin pg in this.listプラグイン )\r
859                                                                         {\r
860                                                                                 Directory.SetCurrentDirectory( pg.strプラグインフォルダ );\r
861                                                                                 pg.plugin.Onステージ変更();\r
862                                                                                 Directory.SetCurrentDirectory( CDTXMania.strEXEのあるフォルダ );\r
863                                                                         }\r
864                                                                         //---------------------\r
865                                                                         #endregion\r
866 \r
867                                                                         this.tガベージコレクションを実行する();\r
868                                                                 }\r
869                                                                 break;\r
870                                                         //-----------------------------\r
871                                                                 #endregion\r
872 \r
873                                                         case 2:\r
874                                                                 #region [ 演奏失敗(StageFailed) ]\r
875                                                                 //-----------------------------\r
876                                                                 scoreIni = this.tScoreIniへBGMAdjustとHistoryとPlayCountを更新( "Stage failed" );\r
877 \r
878                                                                 #region [ プラグイン On演奏失敗() の呼び出し ]\r
879                                                                 //---------------------\r
880                                                                 foreach( STPlugin pg in this.listプラグイン )\r
881                                                                 {\r
882                                                                         Directory.SetCurrentDirectory( pg.strプラグインフォルダ );\r
883                                                                         pg.plugin.On演奏失敗( scoreIni );\r
884                                                                         Directory.SetCurrentDirectory( CDTXMania.strEXEのあるフォルダ );\r
885                                                                 }\r
886                                                                 //---------------------\r
887                                                                 #endregion\r
888 \r
889                                                                 DTX.t全チップの再生停止();\r
890                                                                 DTX.On非活性化();\r
891                                                                 r現在のステージ.On非活性化();\r
892                                                                 if( bコンパクトモード )\r
893                                                                 {\r
894                                                                         base.Window.Close();\r
895                                                                 }\r
896                                                                 else\r
897                                                                 {\r
898                                                                         Trace.TraceInformation( "----------------------" );\r
899                                                                         Trace.TraceInformation( "■ 選曲" );\r
900                                                                         stage選曲.On活性化();\r
901                                                                         r直前のステージ = r現在のステージ;\r
902                                                                         r現在のステージ = stage選曲;\r
903 \r
904                                                                         #region [ プラグイン Onステージ変更() の呼び出し ]\r
905                                                                         //---------------------\r
906                                                                         foreach( STPlugin pg in this.listプラグイン )\r
907                                                                         {\r
908                                                                                 Directory.SetCurrentDirectory( pg.strプラグインフォルダ );\r
909                                                                                 pg.plugin.Onステージ変更();\r
910                                                                                 Directory.SetCurrentDirectory( CDTXMania.strEXEのあるフォルダ );\r
911                                                                         }\r
912                                                                         //---------------------\r
913                                                                         #endregion\r
914 \r
915                                                                         this.tガベージコレクションを実行する();\r
916                                                                 }\r
917                                                                 break;\r
918                                                         //-----------------------------\r
919                                                                 #endregion\r
920 \r
921                                                         case 3:\r
922                                                                 #region [ 演奏クリア ]\r
923                                                                 //-----------------------------\r
924                                                                 chipArray = new CDTX.CChip[ 10 ];\r
925                                                                 if( ConfigIni.bギタレボモード )\r
926                                                                 {\r
927                                                                         stage演奏ギター画面.t演奏結果を格納する( out c演奏記録, out c演奏記録2, out c演奏記録3 );\r
928                                                                 }\r
929                                                                 else\r
930                                                                 {\r
931                                                                         stage演奏ドラム画面.t演奏結果を格納する( out c演奏記録, out c演奏記録2, out c演奏記録3, out chipArray );\r
932                                                                 }\r
933                                                                 str = "Cleared";\r
934                                                                 switch( CScoreIni.t総合ランク値を計算して返す( c演奏記録, c演奏記録2, c演奏記録3 ) )\r
935                                                                 {\r
936                                                                         case 0:\r
937                                                                                 str = "Cleared (Rank:SS)";\r
938                                                                                 break;\r
939 \r
940                                                                         case 1:\r
941                                                                                 str = "Cleared (Rank:S)";\r
942                                                                                 break;\r
943 \r
944                                                                         case 2:\r
945                                                                                 str = "Cleared (Rank:A)";\r
946                                                                                 break;\r
947 \r
948                                                                         case 3:\r
949                                                                                 str = "Cleared (Rank:B)";\r
950                                                                                 break;\r
951 \r
952                                                                         case 4:\r
953                                                                                 str = "Cleared (Rank:C)";\r
954                                                                                 break;\r
955 \r
956                                                                         case 5:\r
957                                                                                 str = "Cleared (Rank:D)";\r
958                                                                                 break;\r
959 \r
960                                                                         case 6:\r
961                                                                                 str = "Cleared (Rank:E)";\r
962                                                                                 break;\r
963 \r
964                                                                         case 99:        // #23534 2010.10.28 yyagi add: 演奏チップが0個のとき\r
965                                                                                 str = "Cleared (No chips)";\r
966                                                                                 break;\r
967                                                                 }\r
968 \r
969                                                                 scoreIni = this.tScoreIniへBGMAdjustとHistoryとPlayCountを更新( str );\r
970 \r
971                                                                 #region [ プラグイン On演奏クリア() の呼び出し ]\r
972                                                                 //---------------------\r
973                                                                 foreach( STPlugin pg in this.listプラグイン )\r
974                                                                 {\r
975                                                                         Directory.SetCurrentDirectory( pg.strプラグインフォルダ );\r
976                                                                         pg.plugin.On演奏クリア( scoreIni );\r
977                                                                         Directory.SetCurrentDirectory( CDTXMania.strEXEのあるフォルダ );\r
978                                                                 }\r
979                                                                 //---------------------\r
980                                                                 #endregion\r
981 \r
982                                                                 r現在のステージ.On非活性化();\r
983                                                                 Trace.TraceInformation( "----------------------" );\r
984                                                                 Trace.TraceInformation( "■ 結果" );\r
985                                                                 stage結果.st演奏記録.Drums = c演奏記録;\r
986                                                                 stage結果.st演奏記録.Guitar = c演奏記録2;\r
987                                                                 stage結果.st演奏記録.Bass = c演奏記録3;\r
988                                                                 stage結果.r空うちドラムチップ = chipArray;\r
989                                                                 stage結果.On活性化();\r
990                                                                 r直前のステージ = r現在のステージ;\r
991                                                                 r現在のステージ = stage結果;\r
992 \r
993                                                                 #region [ プラグイン Onステージ変更() の呼び出し ]\r
994                                                                 //---------------------\r
995                                                                 foreach( STPlugin pg in this.listプラグイン )\r
996                                                                 {\r
997                                                                         Directory.SetCurrentDirectory( pg.strプラグインフォルダ );\r
998                                                                         pg.plugin.Onステージ変更();\r
999                                                                         Directory.SetCurrentDirectory( CDTXMania.strEXEのあるフォルダ );\r
1000                                                                 }\r
1001                                                                 //---------------------\r
1002                                                                 #endregion\r
1003 \r
1004                                                                 break;\r
1005                                                         //-----------------------------\r
1006                                                                 #endregion\r
1007                                                 }\r
1008                                                 //-----------------------------\r
1009                                                 #endregion\r
1010                                                 break;\r
1011 \r
1012                                         case CStage.Eステージ.結果:\r
1013                                                 #region [ *** ]\r
1014                                                 //-----------------------------\r
1015                                                 if( this.n進行描画の戻り値 != 0 )\r
1016                                                 {\r
1017                                                         DTX.t全チップの再生一時停止();\r
1018                                                         DTX.On非活性化();\r
1019                                                         r現在のステージ.On非活性化();\r
1020                                                         if( !bコンパクトモード )\r
1021                                                         {\r
1022                                                                 Trace.TraceInformation( "----------------------" );\r
1023                                                                 Trace.TraceInformation( "■ 選曲" );\r
1024                                                                 stage選曲.On活性化();\r
1025                                                                 r直前のステージ = r現在のステージ;\r
1026                                                                 r現在のステージ = stage選曲;\r
1027 \r
1028                                                                 foreach( STPlugin pg in this.listプラグイン )\r
1029                                                                 {\r
1030                                                                         Directory.SetCurrentDirectory( pg.strプラグインフォルダ );\r
1031                                                                         pg.plugin.Onステージ変更();\r
1032                                                                         Directory.SetCurrentDirectory( CDTXMania.strEXEのあるフォルダ );\r
1033                                                                 }\r
1034 \r
1035                                                                 this.tガベージコレクションを実行する();\r
1036                                                         }\r
1037                                                         else\r
1038                                                         {\r
1039                                                                 base.Window.Close();\r
1040                                                         }\r
1041                                                 }\r
1042                                                 //-----------------------------\r
1043                                                 #endregion\r
1044                                                 break;\r
1045 \r
1046                                         case CStage.Eステージ.終了:\r
1047                                                 #region [ *** ]\r
1048                                                 //-----------------------------\r
1049                                                 if( this.n進行描画の戻り値 != 0 )\r
1050                                                 {\r
1051                                                         base.Exit();\r
1052                                                 }\r
1053                                                 //-----------------------------\r
1054                                                 #endregion\r
1055                                                 break;\r
1056                                 }\r
1057                         }\r
1058 \r
1059                         this.Device.EndScene();\r
1060                         if( this.b次のタイミングで全画面・ウィンドウ切り替えを行う )\r
1061                         {\r
1062                                 ConfigIni.b全画面モード = !ConfigIni.b全画面モード;\r
1063                                 app.t全画面・ウィンドウモード切り替え();\r
1064                                 this.b次のタイミングで全画面・ウィンドウ切り替えを行う = false;\r
1065                         }\r
1066                         if( this.b次のタイミングで垂直帰線同期切り替えを行う )\r
1067                         {\r
1068                                 bool bIsMaximized = this.Window.IsMaximized;                                                                                    // #23510 2010.11.3 yyagi: to backup current window mode before changing VSyncWait\r
1069                                 currentClientSize = this.Window.ClientSize;                                                                                             // #23510 2010.11.3 yyagi: to backup current window size before changing VSyncWait\r
1070                                 DeviceSettings currentSettings = app.GraphicsDeviceManager.CurrentSettings;\r
1071                                 currentSettings.EnableVSync = ConfigIni.b垂直帰線待ちを行う;\r
1072                                 app.GraphicsDeviceManager.ChangeDevice( currentSettings );\r
1073                                 this.b次のタイミングで垂直帰線同期切り替えを行う = false;\r
1074                                 base.Window.ClientSize = new Size(currentClientSize.Width, currentClientSize.Height);   // #23510 2010.11.3 yyagi: to resume window size after changing VSyncWait\r
1075                                 if (bIsMaximized)\r
1076                                 {\r
1077                                         this.Window.WindowState = FormWindowState.Maximized;                                                            // #23510 2010.11.3 yyagi: to resume window mode after changing VSyncWait\r
1078                                 }\r
1079                         }\r
1080                 }\r
1081 \r
1082 \r
1083                 // その他\r
1084 \r
1085                 #region [ テクスチャの生成・解放のためのヘルパー ]\r
1086                 //-----------------\r
1087                 public static CTexture tテクスチャの生成( string fileName )\r
1088                 {\r
1089                         return tテクスチャの生成( fileName, false );\r
1090                 }\r
1091                 public static CTexture tテクスチャの生成( string fileName, bool b黒を透過する )\r
1092                 {\r
1093                         if( app == null )\r
1094                         {\r
1095                                 return null;\r
1096                         }\r
1097                         try\r
1098                         {\r
1099                                 return new CTexture( app.Device, fileName, TextureFormat, b黒を透過する );\r
1100                         }\r
1101                         catch( CTextureCreateFailedException )\r
1102                         {\r
1103                                 Trace.TraceError( "テクスチャの生成に失敗しました。({0})", new object[] { fileName } );\r
1104                                 return null;\r
1105                         }\r
1106                 }\r
1107                 public static void tテクスチャの解放( ref CTexture tx )\r
1108                 {\r
1109                         if( tx != null )\r
1110                         {\r
1111                                 tx.Dispose();\r
1112                                 tx = null;\r
1113                         }\r
1114                 }\r
1115                 //-----------------\r
1116                 #endregion\r
1117 \r
1118                 #region [ private ]\r
1119                 //-----------------\r
1120                 private bool bマウスカーソル表示中 = true;\r
1121                 private bool b終了処理完了済み;\r
1122                 private static CDTX dtx;\r
1123                 private List<CActivity> listトップレベルActivities;\r
1124                 private int n進行描画の戻り値;\r
1125 \r
1126                 private void t起動処理()\r
1127                 {\r
1128                         #region [ strEXEのあるフォルダを決定する ]\r
1129                         //-----------------\r
1130 // BEGIN #23629 2010.11.13 from: デバッグ時は Application.ExecutablePath が ($SolutionDir)/bin/x86/Debug/ などになり System/ の読み込みに失敗するので、カレントディレクトリを採用する。(プロジェクトのプロパティ→デバッグ→作業ディレクトリが有効になる)\r
1131 #if DEBUG\r
1132                         strEXEのあるフォルダ = Environment.CurrentDirectory + @"\";\r
1133 #else\r
1134                         strEXEのあるフォルダ = Path.GetDirectoryName( Application.ExecutablePath ) + @"\";       // #23629 2010.11.9 yyagi: set correct pathname where DTXManiaGR.exe is.\r
1135 #endif\r
1136 // END #23629 2010.11.13 from\r
1137                         //-----------------\r
1138                         #endregion\r
1139 \r
1140                         #region [ Config.ini の読込み ]\r
1141                         //---------------------\r
1142                         ConfigIni = new CConfigIni();\r
1143                         string path = strEXEのあるフォルダ + "Config.ini";\r
1144                         if( File.Exists( path ) )\r
1145                         {\r
1146                                 try\r
1147                                 {\r
1148                                         ConfigIni.t読み込み( path );\r
1149                                 }\r
1150                                 catch\r
1151                                 {\r
1152                                         //ConfigIni = new CConfigIni(); // 存在してなければ新規生成\r
1153                                 }\r
1154                         }\r
1155                         //---------------------\r
1156                         #endregion\r
1157                         #region [ ログ出力開始 ]\r
1158                         //---------------------\r
1159                         Trace.AutoFlush = true;\r
1160                         if( ConfigIni.bログ出力 )\r
1161                         {\r
1162                                 Trace.Listeners.Add( new CTraceLogListener( new StreamWriter( "DTXManiaLog.txt", false, Encoding.GetEncoding( "shift-jis" ) ) ) );\r
1163                         }\r
1164                         Trace.WriteLine("");\r
1165                         Trace.WriteLine( "DTXMania powered by YAMAHA Silent Session Drums" );\r
1166                         Trace.WriteLine( string.Format( "Release: {0}", VERSION ) );\r
1167                         Trace.WriteLine( "" );\r
1168                         Trace.TraceInformation( "----------------------" );\r
1169                         Trace.TraceInformation( "■ アプリケーションの初期化" );\r
1170                         Trace.TraceInformation( "OS Version: " + Environment.OSVersion );\r
1171                         Trace.TraceInformation( "ProcessorCount: " + Environment.ProcessorCount.ToString() );\r
1172                         Trace.TraceInformation( "CLR Version: " + Environment.Version.ToString() );\r
1173                         //---------------------\r
1174                         #endregion\r
1175                         #region [ コンパクトモードスイッチの有無 ]\r
1176                         //---------------------\r
1177                         bコンパクトモード = false;\r
1178                         strコンパクトモードファイル = "";\r
1179                         string[] commandLineArgs = Environment.GetCommandLineArgs();\r
1180                         if( ( commandLineArgs != null ) && ( commandLineArgs.Length > 1 ) )\r
1181                         {\r
1182                                 bコンパクトモード = true;\r
1183                                 strコンパクトモードファイル = commandLineArgs[ 1 ];\r
1184                                 Trace.TraceInformation( "コンパクトモードで起動します。[{0}]", new object[] { strコンパクトモードファイル } );\r
1185                         }\r
1186                         //---------------------\r
1187                         #endregion\r
1188 \r
1189                         #region [ ウィンドウ初期化 ]\r
1190                         //---------------------\r
1191                         base.Window.Text = "DTXMania .NET style release " + VERSION;\r
1192                         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
1193                         if (!ConfigIni.bウィンドウモード)                                               // #23510 2010.11.02 yyagi: add; to recover window size in case bootup with fullscreen mode\r
1194                         {\r
1195                                 currentClientSize = new Size(ConfigIni.nウインドウwidth, ConfigIni.nウインドウheight);\r
1196                         }\r
1197                         base.Window.MaximizeBox = true;                                                 // #23510 2010.11.04 yyagi: to support maximizing window\r
1198                         base.Window.FormBorderStyle = FormBorderStyle.Sizable;  // #23510 2010.10.27 yyagi: changed from FixedDialog to Sizable, to support window resize\r
1199                         base.Window.ShowIcon = true;\r
1200                         base.Window.Icon = Properties.Resources.dtx;\r
1201                         base.Window.KeyDown += new KeyEventHandler( this.Window_KeyDown );\r
1202                         base.Window.MouseDoubleClick += new MouseEventHandler(this.Window_MouseDoubleClick);    // #23510 2010.11.13 yyagi: to go fullscreen mode\r
1203                         base.Window.ResizeEnd += new EventHandler(this.Window_ResizeEnd);                                               // #23510 2010.11.20 yyagi: to set resized window size in Config.ini\r
1204                         base.Window.ApplicationActivated += new EventHandler(this.Window_ApplicationActivated);\r
1205                         base.Window.ApplicationDeactivated += new EventHandler( this.Window_ApplicationDeactivated );\r
1206                         //---------------------\r
1207                         #endregion\r
1208                         #region [ Direct3D9 デバイスの生成 ]\r
1209                         //---------------------\r
1210                         DeviceSettings settings = new DeviceSettings();\r
1211                         settings.Windowed = ConfigIni.bウィンドウモード;\r
1212                         settings.BackBufferWidth = 640;\r
1213                         settings.BackBufferHeight = 480;\r
1214                         settings.EnableVSync = ConfigIni.b垂直帰線待ちを行う;\r
1215                         try\r
1216                         {\r
1217                                 base.GraphicsDeviceManager.ChangeDevice(settings);\r
1218                         }\r
1219                         catch (DeviceCreationException e)\r
1220                         {\r
1221                                 Trace.TraceError(e.ToString());\r
1222                                 MessageBox.Show(e.Message + e.ToString(), "DTXMania failed to boot: DirectX9 Error", MessageBoxButtons.OK, MessageBoxIcon.Error);\r
1223                                 Environment.Exit(-1);\r
1224                         }\r
1225 \r
1226                         base.IsFixedTimeStep = false;\r
1227                         base.Window.ClientSize = new Size(ConfigIni.nウインドウwidth, ConfigIni.nウインドウheight);   // #23510 2010.10.31 yyagi: to recover window size. width and height are able to get from Config.ini.\r
1228                         base.InactiveSleepTime = TimeSpan.FromMilliseconds((float)(ConfigIni.n非フォーカス時スリープms));    // #23568 2010.11.3 yyagi: to support valiable sleep value when !IsActive\r
1229                                                                                                                                                                                                                                 // #23568 2010.11.4 ikanick changed ( 1 -> ConfigIni )\r
1230                         //---------------------\r
1231                         #endregion\r
1232 \r
1233                         DTX = null;\r
1234 \r
1235                         #region [ Skin の初期化 ]\r
1236                         //---------------------\r
1237                         Trace.TraceInformation( "スキンの初期化を行います。" );\r
1238                         Trace.Indent();\r
1239                         try\r
1240                         {\r
1241                                 Skin = new CSkin();\r
1242                                 Trace.TraceInformation( "スキンの初期化を完了しました。" );\r
1243                         }\r
1244                         catch\r
1245                         {\r
1246                                 Trace.TraceInformation( "スキンの初期化に失敗しました。" );\r
1247                                 throw;\r
1248                         }\r
1249                         finally\r
1250                         {\r
1251                                 Trace.Unindent();\r
1252                         }\r
1253                         //---------------------\r
1254                         #endregion\r
1255                         #region [ Timer の初期化 ]\r
1256                         //---------------------\r
1257                         Trace.TraceInformation( "タイマの初期化を行います。" );\r
1258                         Trace.Indent();\r
1259                         try\r
1260                         {\r
1261                                 Timer = new CTimer( CTimer.E種別.MultiMedia );\r
1262                                 Trace.TraceInformation( "タイマの初期化を完了しました。" );\r
1263                         }\r
1264                         finally\r
1265                         {\r
1266                                 Trace.Unindent();\r
1267                         }\r
1268                         //---------------------\r
1269                         #endregion\r
1270                         #region [ FPS カウンタの初期化 ]\r
1271                         //---------------------\r
1272                         Trace.TraceInformation( "FPSカウンタの初期化を行います。" );\r
1273                         Trace.Indent();\r
1274                         try\r
1275                         {\r
1276                                 FPS = new CFPS();\r
1277                                 Trace.TraceInformation( "FPSカウンタを生成しました。" );\r
1278                         }\r
1279                         finally\r
1280                         {\r
1281                                 Trace.Unindent();\r
1282                         }\r
1283                         //---------------------\r
1284                         #endregion\r
1285                         #region [ act文字コンソールの初期化 ]\r
1286                         //---------------------\r
1287                         Trace.TraceInformation( "文字コンソールの初期化を行います。" );\r
1288                         Trace.Indent();\r
1289                         try\r
1290                         {\r
1291                                 act文字コンソール = new C文字コンソール();\r
1292                                 Trace.TraceInformation( "文字コンソールを生成しました。" );\r
1293                                 act文字コンソール.On活性化();\r
1294                                 Trace.TraceInformation( "文字コンソールを活性化しました。" );\r
1295                                 Trace.TraceInformation( "文字コンソールの初期化を完了しました。" );\r
1296                         }\r
1297                         catch( Exception exception )\r
1298                         {\r
1299                                 Trace.TraceError( exception.Message );\r
1300                                 Trace.TraceError( "文字コンソールの初期化に失敗しました。" );\r
1301                         }\r
1302                         finally\r
1303                         {\r
1304                                 Trace.Unindent();\r
1305                         }\r
1306                         //---------------------\r
1307                         #endregion\r
1308                         #region [ Input管理 の初期化 ]\r
1309                         //---------------------\r
1310                         Trace.TraceInformation( "DirectInput, MIDI入力の初期化を行います。" );\r
1311                         Trace.Indent();\r
1312                         try\r
1313                         {\r
1314                                 Input管理 = new CInput管理( base.Window.Handle );\r
1315                                 foreach( IInputDevice device in Input管理.list入力デバイス )\r
1316                                 {\r
1317                                         if( ( device.e入力デバイス種別 == E入力デバイス種別.Joystick ) && !ConfigIni.dicJoystick.ContainsValue( device.GUID ) )\r
1318                                         {\r
1319                                                 int key = 0;\r
1320                                                 while( ConfigIni.dicJoystick.ContainsKey( key ) )\r
1321                                                 {\r
1322                                                         key++;\r
1323                                                 }\r
1324                                                 ConfigIni.dicJoystick.Add( key, device.GUID );\r
1325                                         }\r
1326                                 }\r
1327                                 foreach( IInputDevice device2 in Input管理.list入力デバイス )\r
1328                                 {\r
1329                                         if( device2.e入力デバイス種別 == E入力デバイス種別.Joystick )\r
1330                                         {\r
1331                                                 foreach( KeyValuePair<int, string> pair in ConfigIni.dicJoystick )\r
1332                                                 {\r
1333                                                         if( device2.GUID.Equals( pair.Value ) )\r
1334                                                         {\r
1335                                                                 ( (CInputJoystick) device2 ).SetID( pair.Key );\r
1336                                                                 break;\r
1337                                                         }\r
1338                                                 }\r
1339                                                 continue;\r
1340                                         }\r
1341                                 }\r
1342                                 Trace.TraceInformation( "DirectInput の初期化を完了しました。" );\r
1343                         }\r
1344                         catch( Exception exception2 )\r
1345                         {\r
1346                                 Trace.TraceError( exception2.Message );\r
1347                                 Trace.TraceError( "DirectInput, MIDI入力の初期化に失敗しました。" );\r
1348                                 throw;\r
1349                         }\r
1350                         finally\r
1351                         {\r
1352                                 Trace.Unindent();\r
1353                         }\r
1354                         //---------------------\r
1355                         #endregion\r
1356                         #region [ Pad の初期化 ]\r
1357                         //---------------------\r
1358                         Trace.TraceInformation( "パッドの初期化を行います。" );\r
1359                         Trace.Indent();\r
1360                         try\r
1361                         {\r
1362                                 Pad = new CPad( ConfigIni, Input管理 );\r
1363                                 Trace.TraceInformation( "パッドの初期化を完了しました。" );\r
1364                         }\r
1365                         catch( Exception exception3 )\r
1366                         {\r
1367                                 Trace.TraceError( exception3.Message );\r
1368                                 Trace.TraceError( "パッドの初期化に失敗しました。" );\r
1369                         }\r
1370                         finally\r
1371                         {\r
1372                                 Trace.Unindent();\r
1373                         }\r
1374                         //---------------------\r
1375                         #endregion\r
1376                         #region [ Sound管理 の初期化 ]\r
1377                         //---------------------\r
1378                         Trace.TraceInformation( "DirectSound の初期化を行います。" );\r
1379                         Trace.Indent();\r
1380                         try\r
1381                         {\r
1382                                 Sound管理 = new CSound管理( base.Window.Handle );\r
1383                                 Trace.TraceInformation( "DirectSound の初期化を完了しました。" );\r
1384                         }\r
1385                         catch\r
1386                         {\r
1387                                 Trace.TraceError( "DirectSound の初期化に失敗しました。" );\r
1388                                 throw;\r
1389                         }\r
1390                         finally\r
1391                         {\r
1392                                 Trace.Unindent();\r
1393                         }\r
1394                         //---------------------\r
1395                         #endregion\r
1396                         #region [ Songs管理 の初期化 ]\r
1397                         //---------------------\r
1398                         Trace.TraceInformation( "曲リストの初期化を行います。" );\r
1399                         Trace.Indent();\r
1400                         try\r
1401                         {\r
1402                                 Songs管理 = new CSongs管理();\r
1403                                 Trace.TraceInformation( "曲リストの初期化を完了しました。" );\r
1404                         }\r
1405                         catch( Exception exception4 )\r
1406                         {\r
1407                                 Trace.TraceError( exception4.Message );\r
1408                                 Trace.TraceError( "曲リストの初期化に失敗しました。" );\r
1409                         }\r
1410                         finally\r
1411                         {\r
1412                                 Trace.Unindent();\r
1413                         }\r
1414                         //---------------------\r
1415                         #endregion\r
1416                         #region [ CAvi の初期化 ]\r
1417                         //---------------------\r
1418                         CAvi.t初期化();\r
1419                         //---------------------\r
1420                         #endregion\r
1421                         #region [ Random の初期化 ]\r
1422                         //---------------------\r
1423                         Random = new Random( (int) Timer.nシステム時刻 );\r
1424                         //---------------------\r
1425                         #endregion\r
1426                         #region [ ステージの初期化 ]\r
1427                         //---------------------\r
1428                         r現在のステージ = null;\r
1429                         r直前のステージ = null;\r
1430                         stage起動 = new CStage起動();\r
1431                         stageタイトル = new CStageタイトル();\r
1432                         stageオプション = new CStageオプション();\r
1433                         stageコンフィグ = new CStageコンフィグ();\r
1434                         stage選曲 = new CStage選曲();\r
1435                         stage曲読み込み = new CStage曲読み込み();\r
1436                         stage演奏ドラム画面 = new CStage演奏ドラム画面();\r
1437                         stage演奏ギター画面 = new CStage演奏ギター画面();\r
1438                         stage結果 = new CStage結果();\r
1439                         stage終了 = new CStage終了();\r
1440                         this.listトップレベルActivities = new List<CActivity>();\r
1441                         this.listトップレベルActivities.Add( act文字コンソール );\r
1442                         this.listトップレベルActivities.Add( stage起動 );\r
1443                         this.listトップレベルActivities.Add( stageタイトル );\r
1444                         this.listトップレベルActivities.Add( stageオプション );\r
1445                         this.listトップレベルActivities.Add( stageコンフィグ );\r
1446                         this.listトップレベルActivities.Add( stage選曲 );\r
1447                         this.listトップレベルActivities.Add( stage曲読み込み );\r
1448                         this.listトップレベルActivities.Add( stage演奏ドラム画面 );\r
1449                         this.listトップレベルActivities.Add( stage演奏ギター画面 );\r
1450                         this.listトップレベルActivities.Add( stage結果 );\r
1451                         this.listトップレベルActivities.Add( stage終了 );\r
1452                         //---------------------\r
1453                         #endregion\r
1454                         #region [ プラグインの検索と生成 ]\r
1455                         //---------------------\r
1456                         PluginHost = new CPluginHost();\r
1457 \r
1458                         Trace.TraceInformation( "プラグインの検索と生成を行います。" );\r
1459                         Trace.Indent();\r
1460                         try\r
1461                         {\r
1462                                 this.tプラグイン検索と生成();\r
1463                                 Trace.TraceInformation( "プラグインの検索と生成を完了しました。" );\r
1464                         }\r
1465                         finally\r
1466                         {\r
1467                                 Trace.Unindent();\r
1468                         }\r
1469                         //---------------------\r
1470                         #endregion\r
1471                         #region [ プラグインの初期化 ]\r
1472                         //---------------------\r
1473                         if( this.listプラグイン != null && this.listプラグイン.Count > 0 )\r
1474                         {\r
1475                                 Trace.TraceInformation( "プラグインの初期化を行います。" );\r
1476                                 Trace.Indent();\r
1477                                 try\r
1478                                 {\r
1479                                         foreach( STPlugin st in this.listプラグイン )\r
1480                                         {\r
1481                                                 Directory.SetCurrentDirectory( st.strプラグインフォルダ );\r
1482                                                 st.plugin.On初期化( this.PluginHost );\r
1483                                                 st.plugin.OnManagedリソースの作成();\r
1484                                                 st.plugin.OnUnmanagedリソースの作成();\r
1485                                                 Directory.SetCurrentDirectory( CDTXMania.strEXEのあるフォルダ );\r
1486                                         }\r
1487                                         Trace.TraceInformation( "すべてのプラグインの初期化を完了しました。" );\r
1488                                 }\r
1489                                 catch\r
1490                                 {\r
1491                                         Trace.TraceError( "プラグインのどれかの初期化に失敗しました。" );\r
1492                                         throw;\r
1493                                 }\r
1494                                 finally\r
1495                                 {\r
1496                                         Trace.Unindent();\r
1497                                 }\r
1498                         }\r
1499 \r
1500                         //---------------------\r
1501                         #endregion\r
1502 \r
1503                         Trace.TraceInformation( "アプリケーションの初期化を完了しました。" );\r
1504 \r
1505                         #region [ 最初のステージの起動 ]\r
1506                         //---------------------\r
1507                         Trace.TraceInformation( "----------------------" );\r
1508                         Trace.TraceInformation( "■ 起動" );\r
1509 \r
1510                         r現在のステージ = stage起動;\r
1511                         r現在のステージ.On活性化();\r
1512                         //---------------------\r
1513                         #endregion\r
1514                 }\r
1515                 private void t終了処理()\r
1516                 {\r
1517                         if( !this.b終了処理完了済み )\r
1518                         {\r
1519                                 Trace.TraceInformation( "----------------------" );\r
1520                                 Trace.TraceInformation( "■ アプリケーションの終了" );\r
1521                                 #region [ 現在のステージの終了処理 ]\r
1522                                 //---------------------\r
1523                                 if (r現在のステージ != null)\r
1524                                 {\r
1525                                         Trace.TraceInformation( "現在のステージを終了します。" );\r
1526                                         Trace.Indent();\r
1527                                         try\r
1528                                         {\r
1529                                                 r現在のステージ.On非活性化();\r
1530                                                 Trace.TraceInformation( "現在のステージの終了処理を完了しました。" );\r
1531                                         }\r
1532                                         finally\r
1533                                         {\r
1534                                                 Trace.Unindent();\r
1535                                         }\r
1536                                 }\r
1537                                 //---------------------\r
1538                                 #endregion\r
1539                                 #region [ プラグインの終了処理 ]\r
1540                                 //---------------------\r
1541                                 if (this.listプラグイン != null && this.listプラグイン.Count > 0)\r
1542                                 {\r
1543                                         Trace.TraceInformation( "すべてのプラグインを終了します。" );\r
1544                                         Trace.Indent();\r
1545                                         try\r
1546                                         {\r
1547                                                 foreach( STPlugin st in this.listプラグイン )\r
1548                                                 {\r
1549                                                         Directory.SetCurrentDirectory( st.strプラグインフォルダ );\r
1550                                                         st.plugin.OnUnmanagedリソースの解放();\r
1551                                                         st.plugin.OnManagedリソースの解放();\r
1552                                                         st.plugin.On終了();\r
1553                                                         Directory.SetCurrentDirectory( CDTXMania.strEXEのあるフォルダ );\r
1554                                                 }\r
1555                                                 PluginHost = null;\r
1556                                                 Trace.TraceInformation( "すべてのプラグインの終了処理を完了しました。" );\r
1557                                         }\r
1558                                         finally\r
1559                                         {\r
1560                                                 Trace.Unindent();\r
1561                                         }\r
1562                                 }\r
1563                                 //---------------------\r
1564                                 #endregion\r
1565                                 #region [ 曲リストの終了処理 ]\r
1566                                 //---------------------\r
1567                                 if (Songs管理 != null)\r
1568                                 {\r
1569                                         Trace.TraceInformation( "曲リストの終了処理を行います。" );\r
1570                                         Trace.Indent();\r
1571                                         try\r
1572                                         {\r
1573                                                 Songs管理 = null;\r
1574                                                 Trace.TraceInformation( "曲リストの終了処理を完了しました。" );\r
1575                                         }\r
1576                                         catch( Exception exception )\r
1577                                         {\r
1578                                                 Trace.TraceError( exception.Message );\r
1579                                                 Trace.TraceError( "曲リストの終了処理に失敗しました。" );\r
1580                                         }\r
1581                                         finally\r
1582                                         {\r
1583                                                 Trace.Unindent();\r
1584                                         }\r
1585                                 }\r
1586                                 CAvi.t終了();\r
1587                                 //---------------------\r
1588                                 #endregion\r
1589                                 #region [ スキンの終了処理 ]\r
1590                                 //---------------------\r
1591                                 if (Skin != null)\r
1592                                 {\r
1593                                         Trace.TraceInformation( "スキンの終了処理を行います。" );\r
1594                                         Trace.Indent();\r
1595                                         try\r
1596                                         {\r
1597                                                 Skin.Dispose();\r
1598                                                 Skin = null;\r
1599                                                 Trace.TraceInformation( "スキンの終了処理を完了しました。" );\r
1600                                         }\r
1601                                         catch( Exception exception2 )\r
1602                                         {\r
1603                                                 Trace.TraceError( exception2.Message );\r
1604                                                 Trace.TraceError( "スキンの終了処理に失敗しました。" );\r
1605                                         }\r
1606                                         finally\r
1607                                         {\r
1608                                                 Trace.Unindent();\r
1609                                         }\r
1610                                 }\r
1611                                 //---------------------\r
1612                                 #endregion\r
1613                                 #region [ DirectSoundの終了処理 ]\r
1614                                 //---------------------\r
1615                                 if (Sound管理 != null)\r
1616                                 {\r
1617                                         Trace.TraceInformation( "DirectSound の終了処理を行います。" );\r
1618                                         Trace.Indent();\r
1619                                         try\r
1620                                         {\r
1621                                                 Sound管理.Dispose();\r
1622                                                 Sound管理 = null;\r
1623                                                 Trace.TraceInformation( "DirectSound の終了処理を完了しました。" );\r
1624                                         }\r
1625                                         catch( Exception exception3 )\r
1626                                         {\r
1627                                                 Trace.TraceError( exception3.Message );\r
1628                                                 Trace.TraceError( "DirectSound の終了処理に失敗しました。" );\r
1629                                         }\r
1630                                         finally\r
1631                                         {\r
1632                                                 Trace.Unindent();\r
1633                                         }\r
1634                                 }\r
1635                                 //---------------------\r
1636                                 #endregion\r
1637                                 #region [ パッドの終了処理 ]\r
1638                                 //---------------------\r
1639                                 if (Pad != null)\r
1640                                 {\r
1641                                         Trace.TraceInformation( "パッドの終了処理を行います。" );\r
1642                                         Trace.Indent();\r
1643                                         try\r
1644                                         {\r
1645                                                 Pad = null;\r
1646                                                 Trace.TraceInformation( "パッドの終了処理を完了しました。" );\r
1647                                         }\r
1648                                         catch( Exception exception4 )\r
1649                                         {\r
1650                                                 Trace.TraceError( exception4.Message );\r
1651                                                 Trace.TraceError( "パッドの終了処理に失敗しました。" );\r
1652                                         }\r
1653                                         finally\r
1654                                         {\r
1655                                                 Trace.Unindent();\r
1656                                         }\r
1657                                 }\r
1658                                 //---------------------\r
1659                                 #endregion\r
1660                                 #region [ DirectInput, MIDI入力の終了処理 ]\r
1661                                 //---------------------\r
1662                                 if (Input管理 != null)\r
1663                                 {\r
1664                                         Trace.TraceInformation( "DirectInput, MIDI入力の終了処理を行います。" );\r
1665                                         Trace.Indent();\r
1666                                         try\r
1667                                         {\r
1668                                                 Input管理.Dispose();\r
1669                                                 Input管理 = null;\r
1670                                                 Trace.TraceInformation( "DirectInput, MIDI入力の終了処理を完了しました。" );\r
1671                                         }\r
1672                                         catch( Exception exception5 )\r
1673                                         {\r
1674                                                 Trace.TraceError( exception5.Message );\r
1675                                                 Trace.TraceError( "DirectInput, MIDI入力の終了処理に失敗しました。" );\r
1676                                         }\r
1677                                         finally\r
1678                                         {\r
1679                                                 Trace.Unindent();\r
1680                                         }\r
1681                                 }\r
1682                                 //---------------------\r
1683                                 #endregion\r
1684                                 #region [ 文字コンソールの終了処理 ]\r
1685                                 //---------------------\r
1686                                 if (act文字コンソール != null)\r
1687                                 {\r
1688                                         Trace.TraceInformation( "文字コンソールの終了処理を行います。" );\r
1689                                         Trace.Indent();\r
1690                                         try\r
1691                                         {\r
1692                                                 act文字コンソール.On非活性化();\r
1693                                                 act文字コンソール = null;\r
1694                                                 Trace.TraceInformation( "文字コンソールの終了処理を完了しました。" );\r
1695                                         }\r
1696                                         catch( Exception exception6 )\r
1697                                         {\r
1698                                                 Trace.TraceError( exception6.Message );\r
1699                                                 Trace.TraceError( "文字コンソールの終了処理に失敗しました。" );\r
1700                                         }\r
1701                                         finally\r
1702                                         {\r
1703                                                 Trace.Unindent();\r
1704                                         }\r
1705                                 }\r
1706                                 //---------------------\r
1707                                 #endregion\r
1708                                 #region [ FPSカウンタの終了処理 ]\r
1709                                 //---------------------\r
1710                                 Trace.TraceInformation("FPSカウンタの終了処理を行います。");\r
1711                                 Trace.Indent();\r
1712                                 try\r
1713                                 {\r
1714                                         if( FPS != null )\r
1715                                         {\r
1716                                                 FPS = null;\r
1717                                         }\r
1718                                         Trace.TraceInformation( "FPSカウンタの終了処理を完了しました。" );\r
1719                                 }\r
1720                                 finally\r
1721                                 {\r
1722                                         Trace.Unindent();\r
1723                                 }\r
1724                                 //---------------------\r
1725                                 #endregion\r
1726                                 #region [ タイマの終了処理 ]\r
1727                                 //---------------------\r
1728                                 Trace.TraceInformation("タイマの終了処理を行います。");\r
1729                                 Trace.Indent();\r
1730                                 try\r
1731                                 {\r
1732                                         if( Timer != null )\r
1733                                         {\r
1734                                                 Timer.Dispose();\r
1735                                                 Timer = null;\r
1736                                                 Trace.TraceInformation( "タイマの終了処理を完了しました。" );\r
1737                                         }\r
1738                                         else\r
1739                                         {\r
1740                                                 Trace.TraceInformation( "タイマは使用されていません。" );\r
1741                                         }\r
1742                                 }\r
1743                                 finally\r
1744                                 {\r
1745                                         Trace.Unindent();\r
1746                                 }\r
1747                                 //---------------------\r
1748                                 #endregion\r
1749                                 #region [ Config.iniの出力 ]\r
1750                                 //---------------------\r
1751                                 Trace.TraceInformation("Config.ini を出力します。");\r
1752                                 if ( ConfigIni.bIsSwappedGuitarBass )                   // #24063 2011.1.16 yyagi ギターベースがスワップしているときは元に戻す\r
1753                                 {\r
1754                                         // ConfigIni.SwapGuitarBassKeyAssign();\r
1755                                 }\r
1756                                 string str = strEXEのあるフォルダ + "Config.ini";\r
1757                                 Trace.Indent();\r
1758                                 try\r
1759                                 {\r
1760                                         ConfigIni.t書き出し( str );\r
1761                                         Trace.TraceInformation( "保存しました。({0})", new object[] { str } );\r
1762                                 }\r
1763                                 catch( Exception e )\r
1764                                 {\r
1765                                         Trace.TraceError( e.Message );\r
1766                                         Trace.TraceError( "Config.ini の出力に失敗しました。({0})", new object[] { str } );\r
1767                                 }\r
1768                                 finally\r
1769                                 {\r
1770                                         Trace.Unindent();\r
1771                                 }\r
1772                                 //---------------------\r
1773                                 #endregion\r
1774                                 Trace.TraceInformation("アプリケーションの終了処理を完了しました。");\r
1775 \r
1776 \r
1777                                 this.b終了処理完了済み = true;\r
1778                         }\r
1779                 }\r
1780                 private void Window_ApplicationActivated( object sender, EventArgs e )\r
1781                 {\r
1782                         this.bApplicationActive = true;\r
1783                 }\r
1784                 private void Window_ApplicationDeactivated( object sender, EventArgs e )\r
1785                 {\r
1786                         this.bApplicationActive = false;\r
1787                 }\r
1788                 private void Window_KeyDown( object sender, KeyEventArgs e )\r
1789                 {\r
1790                         if (e.KeyCode == Keys.Menu)\r
1791                         {\r
1792                                 e.Handled = true;\r
1793                                 e.SuppressKeyPress = true;\r
1794                         }\r
1795                         else if ((e.KeyCode == Keys.Return) && e.Alt)\r
1796                         {\r
1797                                 if (ConfigIni != null)\r
1798                                 {\r
1799                                         ConfigIni.bウィンドウモード = !ConfigIni.bウィンドウモード;\r
1800                                         this.t全画面・ウィンドウモード切り替え();\r
1801                                 }\r
1802                                 e.Handled = true;\r
1803                                 e.SuppressKeyPress = true;\r
1804                         }\r
1805                 }\r
1806                 private CScoreIni tScoreIniへBGMAdjustとHistoryとPlayCountを更新(string str新ヒストリ行)\r
1807                 {\r
1808                         bool flag;\r
1809                         bool flag2;\r
1810                         bool flag3;\r
1811                         string str = DTX.strファイル名の絶対パス + ".score.ini";\r
1812                         CScoreIni ini = new CScoreIni( str );\r
1813                         if( !File.Exists( str ) )\r
1814                         {\r
1815                                 ini.stファイル.Title = DTX.TITLE;\r
1816                                 ini.stファイル.Name = DTX.strファイル名;\r
1817                                 ini.stファイル.Hash = CScoreIni.tファイルのMD5を求めて返す( DTX.strファイル名の絶対パス );\r
1818                                 for( int i = 0; i < 6; i++ )\r
1819                                 {\r
1820                                         ini.stセクション[ i ].nPerfectになる範囲ms = nPerfect範囲ms;\r
1821                                         ini.stセクション[ i ].nGreatになる範囲ms = nGreat範囲ms;\r
1822                                         ini.stセクション[ i ].nGoodになる範囲ms = nGood範囲ms;\r
1823                                         ini.stセクション[ i ].nPoorになる範囲ms = nPoor範囲ms;\r
1824                                 }\r
1825                         }\r
1826                         ini.stファイル.BGMAdjust = DTX.nBGMAdjust;\r
1827                         CScoreIni.t更新条件を取得する( out flag, out flag2, out flag3 );\r
1828                         if( ( flag || flag2 ) || flag3 )\r
1829                         {\r
1830                                 if( flag )\r
1831                                 {\r
1832                                         ini.stファイル.PlayCountDrums++;\r
1833                                 }\r
1834                                 if( flag2 )\r
1835                                 {\r
1836                                         ini.stファイル.PlayCountGuitar++;\r
1837                                 }\r
1838                                 if( flag3 )\r
1839                                 {\r
1840                                         ini.stファイル.PlayCountBass++;\r
1841                                 }\r
1842                                 ini.tヒストリを追加する( str新ヒストリ行 );\r
1843                                 if( !bコンパクトモード )\r
1844                                 {\r
1845                                         stage選曲.r現在選択中のスコア.譜面情報.演奏回数.Drums = ini.stファイル.PlayCountDrums;\r
1846                                         stage選曲.r現在選択中のスコア.譜面情報.演奏回数.Guitar = ini.stファイル.PlayCountGuitar;\r
1847                                         stage選曲.r現在選択中のスコア.譜面情報.演奏回数.Bass = ini.stファイル.PlayCountBass;\r
1848                                         for( int j = 0; j < ini.stファイル.History.Length; j++ )\r
1849                                         {\r
1850                                                 stage選曲.r現在選択中のスコア.譜面情報.演奏履歴[ j ] = ini.stファイル.History[ j ];\r
1851                                         }\r
1852                                 }\r
1853                         }\r
1854                         if( ConfigIni.bScoreIniを出力する )\r
1855                         {\r
1856                                 ini.t書き出し( str );\r
1857                         }\r
1858 \r
1859                         return ini;\r
1860                 }\r
1861                 private void tガベージコレクションを実行する()\r
1862                 {\r
1863                         GC.Collect();\r
1864                         GC.WaitForPendingFinalizers();\r
1865                         GC.Collect();\r
1866                         GC.WaitForPendingFinalizers();\r
1867                 }\r
1868                 private void tプラグイン検索と生成()\r
1869                 {\r
1870                         this.listプラグイン = new List<STPlugin>();\r
1871 \r
1872                         string strIPluginActivityの名前 = typeof( IPluginActivity ).FullName;\r
1873                         string strプラグインフォルダパス = strEXEのあるフォルダ + "Plugins\\";\r
1874 \r
1875                         this.t指定フォルダ内でのプラグイン検索と生成( strプラグインフォルダパス, strIPluginActivityの名前 );\r
1876 \r
1877                         if( this.listプラグイン.Count > 0 )\r
1878                                 Trace.TraceInformation( this.listプラグイン.Count + " 個のプラグインを読み込みました。" );\r
1879                 }\r
1880                 private void t指定フォルダ内でのプラグイン検索と生成( string strプラグインフォルダパス, string strプラグイン型名 )\r
1881                 {\r
1882                         // 指定されたパスが存在しないとエラー\r
1883                         if( !Directory.Exists( strプラグインフォルダパス ) )\r
1884                         {\r
1885                                 Trace.TraceWarning( "プラグインフォルダが存在しません。(" + strプラグインフォルダパス + ")" );\r
1886                                 return;\r
1887                         }\r
1888 \r
1889                         // (1) すべての *.dll について…\r
1890                         string[] strDLLs = System.IO.Directory.GetFiles( strプラグインフォルダパス, "*.dll" );\r
1891                         foreach( string dllName in strDLLs )\r
1892                         {\r
1893                                 try\r
1894                                 {\r
1895                                         // (1-1) dll をアセンブリとして読み込む。\r
1896                                         System.Reflection.Assembly asm = System.Reflection.Assembly.LoadFrom( dllName );\r
1897 \r
1898                                         // (1-2) アセンブリ内のすべての型について、プラグインとして有効か調べる\r
1899                                         foreach( Type t in asm.GetTypes() )\r
1900                                         {\r
1901                                                 //  (1-3) ↓クラスであり↓Publicであり↓抽象クラスでなく↓IPlugin型のインスタンスが作れる 型を持っていれば有効\r
1902                                                 if( t.IsClass && t.IsPublic && !t.IsAbstract && t.GetInterface( strプラグイン型名 ) != null )\r
1903                                                 {\r
1904                                                         // (1-4) クラス名からインスタンスを作成する\r
1905                                                         var st = new STPlugin() {\r
1906                                                                 plugin = (IPluginActivity) asm.CreateInstance( t.FullName ),\r
1907                                                                 strプラグインフォルダ = Path.GetDirectoryName( dllName ),\r
1908                                                                 strアセンブリ簡易名 = asm.GetName().Name,\r
1909                                                                 Version = asm.GetName().Version,\r
1910                                                         };\r
1911 \r
1912                                                         // (1-5) プラグインリストへ登録\r
1913                                                         this.listプラグイン.Add( st );\r
1914                                                         Trace.TraceInformation( "プラグイン {0} ({1}, {2}, {3}) を読み込みました。", t.FullName, Path.GetFileName( dllName ), st.strアセンブリ簡易名, st.Version.ToString() );\r
1915                                                 }\r
1916                                         }\r
1917                                 }\r
1918                                 catch\r
1919                                 {\r
1920                                         Trace.TraceInformation( dllName + " からプラグインを生成することに失敗しました。スキップします。" );\r
1921                                 }\r
1922                         }\r
1923 \r
1924                         // (2) サブフォルダがあれば再帰する\r
1925                         string[] strDirs = Directory.GetDirectories( strプラグインフォルダパス, "*" );\r
1926                         foreach( string dir in strDirs )\r
1927                                 this.t指定フォルダ内でのプラグイン検索と生成( dir + "\\", strプラグイン型名 );\r
1928                 }\r
1929                 //-----------------\r
1930                 private void Window_MouseDoubleClick( object sender, MouseEventArgs e)  // #23510 2010.11.13 yyagi: to go full screen mode\r
1931                 {\r
1932                         ConfigIni.bウィンドウモード = false;\r
1933                         this.t全画面・ウィンドウモード切り替え();\r
1934                 }\r
1935                 private void Window_ResizeEnd(object sender, EventArgs e)                               // #23510 2010.11.20 yyagi: to get resized window size\r
1936                 {\r
1937                         ConfigIni.nウインドウwidth = (ConfigIni.bウィンドウモード) ? base.Window.ClientSize.Width : currentClientSize.Width;       // #23510 2010.10.31 yyagi add\r
1938                         ConfigIni.nウインドウheight = (ConfigIni.bウィンドウモード) ? base.Window.ClientSize.Height : currentClientSize.Height;\r
1939                 }\r
1940                 #endregion\r
1941         }\r
1942 }\r