OSDN Git Service

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