OSDN Git Service

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