2 using System.Collections.Generic;
\r
4 using System.Diagnostics;
\r
5 using System.Threading;
\r
8 using System.Runtime.Serialization.Formatters.Binary;
\r
13 internal class CStage起動 : CStage
\r
19 base.eステージID = CStage.Eステージ.起動;
\r
20 base.b活性化してない = true;
\r
23 public List<string> list進行文字列;
\r
27 public override void On活性化()
\r
29 Trace.TraceInformation("起動ステージを活性化します。");
\r
33 this.list進行文字列 = new List<string>();
\r
34 base.eフェーズID = CStage.Eフェーズ.共通_通常状態;
\r
36 Trace.TraceInformation("起動ステージの活性化を完了しました。");
\r
43 public override void On非活性化()
\r
45 Trace.TraceInformation("起動ステージを非活性化します。");
\r
49 this.list進行文字列 = null;
\r
52 if ((es.thDTXFileEnumerate != null) && es.thDTXFileEnumerate.IsAlive)
\r
54 Trace.TraceWarning("リスト構築スレッドを強制停止します。");
\r
55 es.thDTXFileEnumerate.Abort();
\r
56 es.thDTXFileEnumerate.Join();
\r
60 Trace.TraceInformation("起動ステージの非活性化を完了しました。");
\r
67 public override void OnManagedリソースの作成()
\r
71 this.tx背景 = TextureFactory.tテクスチャの生成(CSkin.Path(@"Graphics\ScreenSetup background.jpg"), false);
\r
72 base.OnManagedリソースの作成();
\r
75 public override void OnManagedリソースの解放()
\r
79 TextureFactory.tテクスチャの解放(ref this.tx背景);
\r
80 base.OnManagedリソースの解放();
\r
83 public override int On進行描画()
\r
89 this.list進行文字列.Add("DTXMania powered by YAMAHA Silent Session Drums\n");
\r
90 this.list進行文字列.Add("Release: " + CDTXMania.VERSION + " [" + System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString() + "]");
\r
92 es = new CEnumSongs();
\r
93 es.StartEnumFromCache(); // 曲リスト取得(別スレッドで実行される)
\r
94 base.b初めての進行描画 = false;
\r
98 // CSongs管理 s管理 = CDTXMania.Instance.Songs管理;
\r
100 if (this.tx背景 != null)
\r
101 this.tx背景.t2D描画(CDTXMania.Instance.Device, 0, 0);
\r
103 #region [ this.str現在進行中 の決定 ]
\r
104 //-----------------
\r
105 switch (base.eフェーズID)
\r
107 case CStage.Eフェーズ.起動0_システムサウンドを構築:
\r
108 this.str現在進行中 = "Loading system sounds ... ";
\r
111 case CStage.Eフェーズ.起動00_songlistから曲リストを作成する:
\r
112 this.str現在進行中 = "Loading songlist.db ... ";
\r
115 case CStage.Eフェーズ.起動1_SongsDBからスコアキャッシュを構築:
\r
116 this.str現在進行中 = "Loading songs.db ... ";
\r
119 case CStage.Eフェーズ.起動2_曲を検索してリストを作成する:
\r
120 this.str現在進行中 = string.Format("{0} ... {1}", "Enumerating songs", es.Songs管理.n検索されたスコア数);
\r
123 case CStage.Eフェーズ.起動3_スコアキャッシュをリストに反映する:
\r
124 this.str現在進行中 = string.Format("{0} ... {1}/{2}", "Loading score properties from songs.db", es.Songs管理.nスコアキャッシュから反映できたスコア数, es.Songs管理.n検索されたスコア数);
\r
127 case CStage.Eフェーズ.起動4_スコアキャッシュになかった曲をファイルから読み込んで反映する:
\r
128 this.str現在進行中 = string.Format("{0} ... {1}/{2}", "Loading score properties from files", es.Songs管理.nファイルから反映できたスコア数, es.Songs管理.n検索されたスコア数 - es.Songs管理.nスコアキャッシュから反映できたスコア数);
\r
131 case CStage.Eフェーズ.起動5_曲リストへ後処理を適用する:
\r
132 this.str現在進行中 = string.Format("{0} ... ", "Building songlists");
\r
135 case CStage.Eフェーズ.起動6_スコアキャッシュをSongsDBに出力する:
\r
136 this.str現在進行中 = string.Format("{0} ... ", "Saving songs.db");
\r
139 case CStage.Eフェーズ.起動7_完了:
\r
140 this.str現在進行中 = "Setup done.";
\r
143 //-----------------
\r
145 #region [ this.list進行文字列+this.現在進行中 の表示 ]
\r
146 //-----------------
\r
147 lock (this.list進行文字列)
\r
151 foreach (string str in this.list進行文字列)
\r
153 CDTXMania.Instance.act文字コンソール.tPrint(x, y, C文字コンソール.Eフォント種別.灰細, str);
\r
156 CDTXMania.Instance.act文字コンソール.tPrint(x, y, C文字コンソール.Eフォント種別.灰細, this.str現在進行中);
\r
158 //-----------------
\r
161 if (es != null && es.IsSongListEnumCompletelyDone) // 曲リスト作成が終わったら
\r
163 CDTXMania.Instance.Songs管理 = (es != null) ? es.Songs管理 : null; // 最後に、曲リストを拾い上げる
\r
173 #region [ private ]
\r
174 //-----------------
\r
175 private string str現在進行中 = "";
\r
176 private CTexture tx背景;
\r
177 private CEnumSongs es;
\r
180 private void t曲リストの構築()
\r
183 // 本メソッドは別スレッドで動作するが、プラグイン側でカレントディレクトリを変更しても大丈夫なように、
\r
184 // すべてのファイルアクセスは「絶対パス」で行うこと。(2010.9.16)
\r
186 DateTime now = DateTime.Now;
\r
187 string strPathSongsDB = CDTXMania.Instance.strEXEのあるフォルダ + "songs.db";
\r
188 string strPathSongList = CDTXMania.Instance.strEXEのあるフォルダ + "songlist.db";
\r
192 #region [ 0) システムサウンドの構築 ]
\r
193 //-----------------------------
\r
194 base.eフェーズID = CStage.Eフェーズ.起動0_システムサウンドを構築;
\r
196 Trace.TraceInformation( "0) システムサウンドを構築します。" );
\r
201 for( int i = 0; i < CDTXMania.Instance.Skin.nシステムサウンド数; i++ )
\r
203 CSkin.Cシステムサウンド cシステムサウンド = CDTXMania.Instance.Skin[ i ];
\r
204 if( !CDTXMania.Instance.bコンパクトモード || cシステムサウンド.bCompact対象 )
\r
209 Trace.TraceInformation( "システムサウンドを読み込みました。({0})", new object[] { cシステムサウンド.strファイル名 } );
\r
210 if( ( cシステムサウンド == CDTXMania.Instance.Skin.bgm起動画面 ) && cシステムサウンド.b読み込み成功 )
\r
215 catch( FileNotFoundException )
\r
217 Trace.TraceWarning( "システムサウンドが存在しません。({0})", new object[] { cシステムサウンド.strファイル名 } );
\r
219 catch( Exception exception )
\r
221 Trace.TraceError( exception.Message );
\r
222 Trace.TraceWarning( "システムサウンドの読み込みに失敗しました。({0})", new object[] { cシステムサウンド.strファイル名 } );
\r
226 lock( this.list進行文字列 )
\r
228 this.list進行文字列.Add( "Loading system sounds ... OK " );
\r
235 //-----------------------------
\r
238 if( CDTXMania.Instance.bコンパクトモード )
\r
240 Trace.TraceInformation( "コンパクトモードなので残りの起動処理は省略します。" );
\r
244 #region [ 00) songlist.dbの読み込みによる曲リストの構築 ]
\r
245 //-----------------------------
\r
246 base.eフェーズID = CStage.Eフェーズ.起動00_songlistから曲リストを作成する;
\r
248 Trace.TraceInformation( "1) songlist.dbを読み込みます。" );
\r
253 if ( !CDTXMania.Instance.ConfigIni.bConfigIniがないかDTXManiaのバージョンが異なる )
\r
257 CDTXMania.Instance.Songs管理.tSongListDBを読み込む( strPathSongList );
\r
261 Trace.TraceError( "songlist.db の読み込みに失敗しました。" );
\r
264 int scores = ( CDTXMania.Instance.Songs管理 == null ) ? 0 : CDTXMania.Instance.Songs管理.n検索されたスコア数; // 読み込み途中でアプリ終了した場合など、CDTXMania.Instance.Songs管理 がnullの場合があるので注意
\r
265 Trace.TraceInformation( "songlist.db の読み込みを完了しました。[{0}スコア]", scores );
\r
266 lock ( this.list進行文字列 )
\r
268 this.list進行文字列.Add( "Loading songlist.db ... OK" );
\r
273 Trace.TraceInformation( "初回の起動であるかまたはDTXManiaのバージョンが上がったため、songlist.db の読み込みをスキップします。" );
\r
274 lock ( this.list進行文字列 )
\r
276 this.list進行文字列.Add( "Loading songlist.db ... Skip" );
\r
287 #region [ 1) songs.db の読み込み ]
\r
288 //-----------------------------
\r
289 base.eフェーズID = CStage.Eフェーズ.起動1_SongsDBからスコアキャッシュを構築;
\r
291 Trace.TraceInformation( "2) songs.db を読み込みます。" );
\r
296 if ( !CDTXMania.Instance.ConfigIni.bConfigIniがないかDTXManiaのバージョンが異なる )
\r
300 CDTXMania.Instance.Songs管理.tSongsDBを読み込む( strPathSongsDB );
\r
304 Trace.TraceError( "songs.db の読み込みに失敗しました。" );
\r
307 int scores = ( CDTXMania.Instance.Songs管理 == null ) ? 0 : CDTXMania.Instance.Songs管理.nSongsDBから取得できたスコア数; // 読み込み途中でアプリ終了した場合など、CDTXMania.Instance.Songs管理 がnullの場合があるので注意
\r
308 Trace.TraceInformation( "songs.db の読み込みを完了しました。[{0}スコア]", scores );
\r
309 lock ( this.list進行文字列 )
\r
311 this.list進行文字列.Add( "Loading songs.db ... OK" );
\r
316 Trace.TraceInformation( "初回の起動であるかまたはDTXManiaのバージョンが上がったため、songs.db の読み込みをスキップします。" );
\r
317 lock ( this.list進行文字列 )
\r
319 this.list進行文字列.Add( "Loading songs.db ... Skip" );
\r
327 //-----------------------------
\r
333 base.eフェーズID = CStage.Eフェーズ.起動7_完了;
\r
334 TimeSpan span = (TimeSpan) ( DateTime.Now - now );
\r
335 Trace.TraceInformation( "起動所要時間: {0}", new object[] { span.ToString() } );
\r