OSDN Git Service

DTXManiaソリューション、DTXManiaプロジェクト、DTXCreatorプロジェクト、FDKプロジェクトについて英語化。
[dtxmania/dtxmania.git] / DTXMania / コード / ステージ / 01.起動 / CStage起動.cs
1 using System;
2 using System.Collections.Generic;
3 using System.Text;
4 using System.Diagnostics;
5 using System.Threading;
6 using System.IO;
7 using FDK;
8 using System.Runtime.Serialization.Formatters.Binary;
9
10
11 namespace DTXMania
12 {
13         internal class CStage起動 : CStage
14         {
15                 // コンストラクタ
16
17                 public CStage起動()
18                 {
19                         base.eステージID = CStage.Eステージ.起動;
20                         base.b活性化してない = true;
21                 }
22
23                 public List<string> list進行文字列;
24
25                 // CStage 実装
26
27                 public override void On活性化()
28                 {
29                         Trace.TraceInformation("起動ステージを活性化します。");
30                         Trace.Indent();
31                         try
32                         {
33                                 this.list進行文字列 = new List<string>();
34                                 base.eフェーズID = CStage.Eフェーズ.共通_通常状態;
35                                 base.On活性化();
36                                 Trace.TraceInformation("起動ステージの活性化を完了しました。");
37                         }
38                         finally
39                         {
40                                 Trace.Unindent();
41                         }
42                 }
43                 public override void On非活性化()
44                 {
45                         Trace.TraceInformation("起動ステージを非活性化します。");
46                         Trace.Indent();
47                         try
48                         {
49                                 this.list進行文字列 = null;
50                                 if (es != null)
51                                 {
52                                         if ((es.thDTXFileEnumerate != null) && es.thDTXFileEnumerate.IsAlive)
53                                         {
54                                                 Trace.TraceWarning("リスト構築スレッドを強制停止します。");
55                                                 es.thDTXFileEnumerate.Abort();
56                                                 es.thDTXFileEnumerate.Join();
57                                         }
58                                 }
59                                 base.On非活性化();
60                                 Trace.TraceInformation("起動ステージの非活性化を完了しました。");
61                         }
62                         finally
63                         {
64                                 Trace.Unindent();
65                         }
66                 }
67                 public override void OnManagedリソースの作成()
68                 {
69                         if (!base.b活性化してない)
70                         {
71                                 this.tx背景 = TextureFactory.tテクスチャの生成(CSkin.Path(@"Graphics\ScreenSetup background.jpg"), false);
72                                 base.OnManagedリソースの作成();
73                         }
74                 }
75                 public override void OnManagedリソースの解放()
76                 {
77                         if (!base.b活性化してない)
78                         {
79                                 TextureFactory.tテクスチャの解放(ref this.tx背景);
80                                 base.OnManagedリソースの解放();
81                         }
82                 }
83                 public override int On進行描画()
84                 {
85                         if (!base.b活性化してない)
86                         {
87                                 if (base.b初めての進行描画)
88                                 {
89                                         this.list進行文字列.Add("DTXMania powered by YAMAHA Silent Session Drums\n");
90                                         this.list進行文字列.Add("Release: " + CDTXMania.VERSION + " [" + System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString() + "]");
91
92                                         es = new CEnumSongs();
93                                         es.StartEnumFromCache();                    // 曲リスト取得(別スレッドで実行される)
94                                         base.b初めての進行描画 = false;
95                                         return 0;
96                                 }
97
98                                 // CSongs管理 s管理 = CDTXMania.Instance.Songs管理;
99
100                                 if (this.tx背景 != null)
101                                         this.tx背景.t2D描画(CDTXMania.Instance.Device, 0, 0);
102
103                                 #region [ this.str現在進行中 の決定 ]
104                                 //-----------------
105                                 switch (base.eフェーズID)
106                                 {
107                                         case CStage.Eフェーズ.起動0_システムサウンドを構築:
108                                                 this.str現在進行中 = "Loading system sounds ... ";
109                                                 break;
110
111                                         case CStage.Eフェーズ.起動00_songlistから曲リストを作成する:
112                                                 this.str現在進行中 = "Loading songlist.db ... ";
113                                                 break;
114
115                                         case CStage.Eフェーズ.起動1_SongsDBからスコアキャッシュを構築:
116                                                 this.str現在進行中 = "Loading songs.db ... ";
117                                                 break;
118
119                                         case CStage.Eフェーズ.起動2_曲を検索してリストを作成する:
120                                                 this.str現在進行中 = string.Format("{0} ... {1}", "Enumerating songs", es.Songs管理.n検索されたスコア数);
121                                                 break;
122
123                                         case CStage.Eフェーズ.起動3_スコアキャッシュをリストに反映する:
124                                                 this.str現在進行中 = string.Format("{0} ... {1}/{2}", "Loading score properties from songs.db", es.Songs管理.nスコアキャッシュから反映できたスコア数, es.Songs管理.n検索されたスコア数);
125                                                 break;
126
127                                         case CStage.Eフェーズ.起動4_スコアキャッシュになかった曲をファイルから読み込んで反映する:
128                                                 this.str現在進行中 = string.Format("{0} ... {1}/{2}", "Loading score properties from files", es.Songs管理.nファイルから反映できたスコア数, es.Songs管理.n検索されたスコア数 - es.Songs管理.nスコアキャッシュから反映できたスコア数);
129                                                 break;
130
131                                         case CStage.Eフェーズ.起動5_曲リストへ後処理を適用する:
132                                                 this.str現在進行中 = string.Format("{0} ... ", "Building songlists");
133                                                 break;
134
135                                         case CStage.Eフェーズ.起動6_スコアキャッシュをSongsDBに出力する:
136                                                 this.str現在進行中 = string.Format("{0} ... ", "Saving songs.db");
137                                                 break;
138
139                                         case CStage.Eフェーズ.起動7_完了:
140                                                 this.str現在進行中 = "Setup done.";
141                                                 break;
142                                 }
143                                 //-----------------
144                                 #endregion
145                                 #region [ this.list進行文字列+this.現在進行中 の表示 ]
146                                 //-----------------
147                                 lock (this.list進行文字列)
148                                 {
149                                         int x = 0;
150                                         int y = 0;
151                                         foreach (string str in this.list進行文字列)
152                                         {
153                                                 CDTXMania.Instance.act文字コンソール.tPrint(x, y, C文字コンソール.Eフォント種別.灰細, str);
154                                                 y += 14 * 2;
155                                         }
156                                         CDTXMania.Instance.act文字コンソール.tPrint(x, y, C文字コンソール.Eフォント種別.灰細, this.str現在進行中);
157                                 }
158                                 //-----------------
159                                 #endregion
160
161                                 if (es != null && es.IsSongListEnumCompletelyDone)              // 曲リスト作成が終わったら
162                                 {
163                                         CDTXMania.Instance.Songs管理 = (es != null) ? es.Songs管理 : null;    // 最後に、曲リストを拾い上げる
164                                         return 1;
165                                 }
166                         }
167                         return 0;
168                 }
169
170
171                 // その他
172
173                 #region [ private ]
174                 //-----------------
175                 private string str現在進行中 = "";
176                 private CTexture tx背景;
177                 private CEnumSongs es;
178
179 #if false
180                 private void t曲リストの構築()
181                 {
182                         // !注意!
183                         // 本メソッドは別スレッドで動作するが、プラグイン側でカレントディレクトリを変更しても大丈夫なように、
184                         // すべてのファイルアクセスは「絶対パス」で行うこと。(2010.9.16)
185
186                         DateTime now = DateTime.Now;
187                         string strPathSongsDB = CDTXMania.Instance.strEXEのあるフォルダ + "songs.db";
188                         string strPathSongList = CDTXMania.Instance.strEXEのあるフォルダ + "songlist.db";
189
190                         try
191                         {
192                 #region [ 0) システムサウンドの構築  ]
193                                 //-----------------------------
194                                 base.eフェーズID = CStage.Eフェーズ.起動0_システムサウンドを構築;
195
196                                 Trace.TraceInformation( "0) システムサウンドを構築します。" );
197                                 Trace.Indent();
198
199                                 try
200                                 {
201                                         for( int i = 0; i < CDTXMania.Instance.Skin.nシステムサウンド数; i++ )
202                                         {
203                                                 CSkin.Cシステムサウンド cシステムサウンド = CDTXMania.Instance.Skin[ i ];
204                                                 if( !CDTXMania.Instance.bコンパクトモード || cシステムサウンド.bCompact対象 )
205                                                 {
206                                                         try
207                                                         {
208                                                                 cシステムサウンド.t読み込み();
209                                                                 Trace.TraceInformation( "システムサウンドを読み込みました。({0})", new object[] { cシステムサウンド.strファイル名 } );
210                                                                 if( ( cシステムサウンド == CDTXMania.Instance.Skin.bgm起動画面 ) && cシステムサウンド.b読み込み成功 )
211                                                                 {
212                                                                         cシステムサウンド.t再生する();
213                                                                 }
214                                                         }
215                                                         catch( FileNotFoundException )
216                                                         {
217                                                                 Trace.TraceWarning( "システムサウンドが存在しません。({0})", new object[] { cシステムサウンド.strファイル名 } );
218                                                         }
219                                                         catch( Exception exception )
220                                                         {
221                                                                 Trace.TraceError( exception.Message );
222                                                                 Trace.TraceWarning( "システムサウンドの読み込みに失敗しました。({0})", new object[] { cシステムサウンド.strファイル名 } );
223                                                         }
224                                                 }
225                                         }
226                                         lock( this.list進行文字列 )
227                                         {
228                                                 this.list進行文字列.Add( "Loading system sounds ... OK " );
229                                         }
230                                 }
231                                 finally
232                                 {
233                                         Trace.Unindent();
234                                 }
235                                 //-----------------------------
236                 #endregion
237
238                                 if( CDTXMania.Instance.bコンパクトモード )
239                                 {
240                                         Trace.TraceInformation( "コンパクトモードなので残りの起動処理は省略します。" );
241                                         return;
242                                 }
243
244                 #region [ 00) songlist.dbの読み込みによる曲リストの構築  ]
245                                 //-----------------------------
246                                 base.eフェーズID = CStage.Eフェーズ.起動00_songlistから曲リストを作成する;
247
248                                 Trace.TraceInformation( "1) songlist.dbを読み込みます。" );
249                                 Trace.Indent();
250
251                                 try
252                                 {
253                                         if ( !CDTXMania.Instance.ConfigIni.bConfigIniがないかDTXManiaのバージョンが異なる )
254                                         {
255                                                 try
256                                                 {
257                                                         CDTXMania.Instance.Songs管理.tSongListDBを読み込む( strPathSongList );
258                                                 }
259                                                 catch
260                                                 {
261                                                         Trace.TraceError( "songlist.db の読み込みに失敗しました。" );
262                                                 }
263
264                                                 int scores = ( CDTXMania.Instance.Songs管理 == null ) ? 0 : CDTXMania.Instance.Songs管理.n検索されたスコア数;              // 読み込み途中でアプリ終了した場合など、CDTXMania.Instance.Songs管理 がnullの場合があるので注意
265                                                 Trace.TraceInformation( "songlist.db の読み込みを完了しました。[{0}スコア]", scores );
266                                                 lock ( this.list進行文字列 )
267                                                 {
268                                                         this.list進行文字列.Add( "Loading songlist.db ... OK" );
269                                                 }
270                                         }
271                                         else
272                                         {
273                                                 Trace.TraceInformation( "初回の起動であるかまたはDTXManiaのバージョンが上がったため、songlist.db の読み込みをスキップします。" );
274                                                 lock ( this.list進行文字列 )
275                                                 {
276                                                         this.list進行文字列.Add( "Loading songlist.db ... Skip" );
277                                                 }
278                                         }
279                                 }
280                                 finally
281                                 {
282                                         Trace.Unindent();
283                                 }
284
285                 #endregion
286
287                 #region [ 1) songs.db の読み込み ]
288                                 //-----------------------------
289                                 base.eフェーズID = CStage.Eフェーズ.起動1_SongsDBからスコアキャッシュを構築;
290
291                                 Trace.TraceInformation( "2) songs.db を読み込みます。" );
292                                 Trace.Indent();
293
294                                 try
295                                 {
296                                         if ( !CDTXMania.Instance.ConfigIni.bConfigIniがないかDTXManiaのバージョンが異なる )
297                                         {
298                                                 try
299                                                 {
300                                                         CDTXMania.Instance.Songs管理.tSongsDBを読み込む( strPathSongsDB );
301                                                 }
302                                                 catch
303                                                 {
304                                                         Trace.TraceError( "songs.db の読み込みに失敗しました。" );
305                                                 }
306
307                                                 int scores = ( CDTXMania.Instance.Songs管理 == null ) ? 0 : CDTXMania.Instance.Songs管理.nSongsDBから取得できたスコア数; // 読み込み途中でアプリ終了した場合など、CDTXMania.Instance.Songs管理 がnullの場合があるので注意
308                                                 Trace.TraceInformation( "songs.db の読み込みを完了しました。[{0}スコア]", scores );
309                                                 lock ( this.list進行文字列 )
310                                                 {
311                                                         this.list進行文字列.Add( "Loading songs.db ... OK" );
312                                                 }
313                                         }
314                                         else
315                                         {
316                                                 Trace.TraceInformation( "初回の起動であるかまたはDTXManiaのバージョンが上がったため、songs.db の読み込みをスキップします。" );
317                                                 lock ( this.list進行文字列 )
318                                                 {
319                                                         this.list進行文字列.Add( "Loading songs.db ... Skip" );
320                                                 }
321                                         }
322                                 }
323                                 finally
324                                 {
325                                         Trace.Unindent();
326                                 }
327                                 //-----------------------------
328                 #endregion
329
330                         }
331                         finally
332                         {
333                                 base.eフェーズID = CStage.Eフェーズ.起動7_完了;
334                                 TimeSpan span = (TimeSpan) ( DateTime.Now - now );
335                                 Trace.TraceInformation( "起動所要時間: {0}", new object[] { span.ToString() } );
336                         }
337                 }
338 #endif
339                 #endregion
340         }
341 }