2 using System.Collections.Generic;
\r
4 using System.Diagnostics;
\r
5 using System.Drawing;
\r
8 using System.Drawing.Text;
\r
13 internal class CStage曲読み込み : CStage
\r
17 public CStage曲読み込み()
\r
19 base.eステージID = CStage.Eステージ.曲読み込み;
\r
20 base.eフェーズID = CStage.Eフェーズ.共通_通常状態;
\r
21 base.b活性化してない = true;
\r
22 // base.list子Activities.Add( this.actFI = new CActFIFOBlack() ); // #27787 2012.3.10 yyagi 曲読み込み画面のフェードインの省略
\r
23 base.list子Activities.Add( this.actFO = new CActFIFOBlack() );
\r
29 public override void On活性化()
\r
31 Trace.TraceInformation( "曲読み込みステージを活性化します。" );
\r
36 this.strSTAGEFILE = "";
\r
37 this.b音符を表示する = false;
\r
38 this.n音符の表示位置X = 0x308;
\r
39 this.ftタイトル表示用フォント = new Font( "MS PGothic", 48f, GraphicsUnit.Pixel );
\r
40 this.nBGM再生開始時刻 = -1;
\r
41 this.nBGMの総再生時間ms = 0;
\r
42 if( this.sd読み込み音 != null )
\r
44 CDTXMania.Sound管理.tサウンドを破棄する( this.sd読み込み音 );
\r
45 this.sd読み込み音 = null;
\r
48 string strDTXファイルパス = ( CDTXMania.bコンパクトモード ) ?
\r
49 CDTXMania.strコンパクトモードファイル : CDTXMania.stage選曲.r確定されたスコア.ファイル情報.ファイルの絶対パス;
\r
51 CDTX cdtx = new CDTX( strDTXファイルパス, true );
\r
52 this.str曲タイトル = cdtx.TITLE;
\r
53 if( ( ( cdtx.STAGEFILE != null ) && ( cdtx.STAGEFILE.Length > 0 ) ) && ( File.Exists( cdtx.strフォルダ名 + cdtx.STAGEFILE ) && !CDTXMania.ConfigIni.bストイックモード ) )
\r
55 this.strSTAGEFILE = cdtx.strフォルダ名 + cdtx.STAGEFILE;
\r
56 this.b音符を表示する = false;
\r
60 this.strSTAGEFILE = CSkin.Path( @"Graphics\\ScreenNowLoading background.jpg" );
\r
61 this.b音符を表示する = true;
\r
63 if( ( ( cdtx.SOUND_NOWLOADING != null ) && ( cdtx.SOUND_NOWLOADING.Length > 0 ) ) && File.Exists( cdtx.strフォルダ名 + cdtx.SOUND_NOWLOADING ) )
\r
65 string strNowLoadingサウンドファイルパス = cdtx.strフォルダ名 + cdtx.SOUND_NOWLOADING;
\r
68 this.sd読み込み音 = CDTXMania.Sound管理.tサウンドを生成する( strNowLoadingサウンドファイルパス );
\r
72 Trace.TraceError( "#SOUND_NOWLOADING に指定されたサウンドファイルの読み込みに失敗しました。({0})", strNowLoadingサウンドファイルパス );
\r
80 Trace.TraceInformation( "曲読み込みステージの活性化を完了しました。" );
\r
84 public override void On非活性化()
\r
86 Trace.TraceInformation( "曲読み込みステージを非活性化します。" );
\r
90 if( this.ftタイトル表示用フォント != null )
\r
92 this.ftタイトル表示用フォント.Dispose();
\r
93 this.ftタイトル表示用フォント = null;
\r
99 Trace.TraceInformation( "曲読み込みステージの非活性化を完了しました。" );
\r
103 public override void OnManagedリソースの作成()
\r
105 if( !base.b活性化してない )
\r
107 this.tx音符 = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\\ScreenNowLoading onpu.png" ), false );
\r
108 this.tx背景 = CDTXMania.tテクスチャの生成( this.strSTAGEFILE, false );
\r
109 if( this.b音符を表示する )
\r
113 if( ( this.str曲タイトル != null ) && ( this.str曲タイトル.Length > 0 ) )
\r
115 Bitmap image = new Bitmap( 1, 1 );
\r
116 Graphics graphics = Graphics.FromImage( image );
\r
117 SizeF ef = graphics.MeasureString( this.str曲タイトル, this.ftタイトル表示用フォント );
\r
118 Size size = new Size( (int) Math.Ceiling( (double) ef.Width ), (int) Math.Ceiling( (double) ef.Height ) );
\r
119 graphics.Dispose();
\r
121 image = new Bitmap( size.Width, size.Height );
\r
122 graphics = Graphics.FromImage( image );
\r
123 graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
\r
124 graphics.DrawString( this.str曲タイトル, this.ftタイトル表示用フォント, Brushes.White, ( float ) 0f, ( float ) 0f );
\r
125 graphics.Dispose();
\r
126 this.txタイトル = new CTexture( CDTXMania.app.Device, image, CDTXMania.TextureFormat );
\r
127 this.txタイトル.vc拡大縮小倍率 = new Vector3( 0.5f, 0.5f, 1f );
\r
129 this.n音符の表示位置X = ( ( 640 - ( (int) ( size.Width * this.txタイトル.vc拡大縮小倍率.X ) ) ) - ( ( this.tx音符 != null ) ? this.tx音符.sz画像サイズ.Width : 0 ) ) - 2;
\r
133 this.txタイトル = null;
\r
134 this.n音符の表示位置X = ( 640 - ( ( this.tx音符 != null ) ? this.tx音符.sz画像サイズ.Width : 0 ) ) - 2;
\r
137 catch( CTextureCreateFailedException )
\r
139 Trace.TraceError( "テクスチャの生成に失敗しました。({0})", new object[] { this.strSTAGEFILE } );
\r
140 this.txタイトル = null;
\r
146 this.txタイトル = null;
\r
148 base.OnManagedリソースの作成();
\r
151 public override void OnManagedリソースの解放()
\r
153 if( !base.b活性化してない )
\r
155 CDTXMania.tテクスチャの解放( ref this.tx背景 );
\r
156 CDTXMania.tテクスチャの解放( ref this.tx音符 );
\r
157 CDTXMania.tテクスチャの解放( ref this.txタイトル );
\r
158 base.OnManagedリソースの解放();
\r
161 public override int On進行描画()
\r
165 if( base.b活性化してない )
\r
168 #region [ 初めての進行描画 ]
\r
169 //-----------------------------
\r
170 if( base.b初めての進行描画 )
\r
172 Cスコア cスコア1 = CDTXMania.stage選曲.r確定されたスコア;
\r
173 if( this.sd読み込み音 != null )
\r
175 if( CDTXMania.Skin.sound曲読込開始音.b排他 && ( CSkin.Cシステムサウンド.r最後に再生した排他システムサウンド != null ) )
\r
177 CSkin.Cシステムサウンド.r最後に再生した排他システムサウンド.t停止する();
\r
179 this.sd読み込み音.t再生を開始する();
\r
180 this.nBGM再生開始時刻 = CDTXMania.Timer.n現在時刻;
\r
181 this.nBGMの総再生時間ms = this.sd読み込み音.n総演奏時間ms;
\r
185 CDTXMania.Skin.sound曲読込開始音.t再生する();
\r
186 this.nBGM再生開始時刻 = CDTXMania.Timer.n現在時刻;
\r
187 this.nBGMの総再生時間ms = CDTXMania.Skin.sound曲読込開始音.n長さ・現在のサウンド;
\r
189 // this.actFI.tフェードイン開始(); // #27787 2012.3.10 yyagi 曲読み込み画面のフェードインの省略
\r
190 base.eフェーズID = CStage.Eフェーズ.共通_フェードイン;
\r
191 base.b初めての進行描画 = false;
\r
194 bitmapFilename = new Bitmap( 640, 24 );
\r
195 graphicsFilename = Graphics.FromImage( bitmapFilename );
\r
196 graphicsFilename.TextRenderingHint = TextRenderingHint.AntiAlias;
\r
197 ftFilename = new Font( "MS PGothic", 24f, FontStyle.Bold, GraphicsUnit.Pixel );
\r
199 //-----------------------------
\r
202 #region [ 背景、音符+タイトル表示 ]
\r
203 //-----------------------------
\r
204 if( this.tx背景 != null )
\r
205 this.tx背景.t2D描画( CDTXMania.app.Device, 0, 0 );
\r
207 if( this.b音符を表示する )
\r
210 if( this.tx音符 != null )
\r
212 this.tx音符.t2D描画( CDTXMania.app.Device, this.n音符の表示位置X, y );
\r
214 if( this.txタイトル != null )
\r
216 this.txタイトル.t2D描画( CDTXMania.app.Device, (int) ( 640 - ( this.txタイトル.sz画像サイズ.Width * this.txタイトル.vc拡大縮小倍率.X ) ), y );
\r
219 //-----------------------------
\r
222 switch( base.eフェーズID )
\r
224 case CStage.Eフェーズ.共通_フェードイン:
\r
225 // if( this.actFI.On進行描画() != 0 ) // #27787 2012.3.10 yyagi 曲読み込み画面のフェードインの省略
\r
226 // 必ず一度「CStaeg.Eフェーズ.共通_フェードイン」フェーズを経由させること。
\r
227 // さもないと、曲読み込みが完了するまで、曲読み込み画面が描画されない。
\r
228 base.eフェーズID = CStage.Eフェーズ.NOWLOADING_DTXファイルを読み込む;
\r
231 case CStage.Eフェーズ.NOWLOADING_DTXファイルを読み込む:
\r
233 timeBeginLoad = DateTime.Now;
\r
236 if( !CDTXMania.bコンパクトモード )
\r
237 str = CDTXMania.stage選曲.r確定されたスコア.ファイル情報.ファイルの絶対パス;
\r
239 str = CDTXMania.strコンパクトモードファイル;
\r
241 CScoreIni ini = new CScoreIni( str + ".score.ini" );
\r
242 ini.t全演奏記録セクションの整合性をチェックし不整合があればリセットする();
\r
244 if( ( CDTXMania.DTX != null ) && CDTXMania.DTX.b活性化してる )
\r
245 CDTXMania.DTX.On非活性化();
\r
247 CDTXMania.DTX = new CDTX( str, false, ( (double) CDTXMania.ConfigIni.n演奏速度 ) / 20.0, ini.stファイル.BGMAdjust );
\r
248 Trace.TraceInformation( "----曲情報-----------------" );
\r
249 Trace.TraceInformation( "TITLE: {0}", CDTXMania.DTX.TITLE );
\r
250 Trace.TraceInformation( "FILE: {0}", CDTXMania.DTX.strファイル名の絶対パス );
\r
251 Trace.TraceInformation( "---------------------------" );
\r
253 span = (TimeSpan) ( DateTime.Now - timeBeginLoad );
\r
254 Trace.TraceInformation( "DTX読込所要時間: {0}", span.ToString() );
\r
256 if ( CDTXMania.bコンパクトモード )
\r
257 CDTXMania.DTX.MIDIレベル = 1;
\r
259 CDTXMania.DTX.MIDIレベル = ( CDTXMania.stage選曲.r確定された曲.eノード種別 == C曲リストノード.Eノード種別.SCORE_MIDI ) ? CDTXMania.stage選曲.n現在選択中の曲の難易度 : 0;
\r
261 base.eフェーズID = CStage.Eフェーズ.NOWLOADING_WAVファイルを読み込む;
\r
262 timeBeginLoadWAV = DateTime.Now;
\r
266 case CStage.Eフェーズ.NOWLOADING_WAVファイルを読み込む:
\r
268 if ( nWAVcount == 1 && CDTXMania.DTX.listWAV.Count > 0 ) // #28934 2012.7.7 yyagi (added checking Count)
\r
270 ShowProgressByFilename( CDTXMania.DTX.listWAV[ nWAVcount ].strファイル名 );
\r
272 int looptime = (CDTXMania.ConfigIni.b垂直帰線待ちを行う)? 3 : 1; // VSyncWait=ON時は1frame(1/60s)あたり3つ読むようにする
\r
273 for ( int i = 0; i < looptime && nWAVcount <= CDTXMania.DTX.listWAV.Count; i++ )
\r
275 if ( CDTXMania.DTX.listWAV[ nWAVcount ].listこのWAVを使用するチャンネル番号の集合.Count > 0 ) // #28674 2012.5.8 yyagi
\r
277 CDTXMania.DTX.tWAVの読み込み( CDTXMania.DTX.listWAV[ nWAVcount ] );
\r
281 if ( nWAVcount <= CDTXMania.DTX.listWAV.Count )
\r
283 ShowProgressByFilename( CDTXMania.DTX.listWAV[ nWAVcount ].strファイル名 );
\r
285 if ( nWAVcount > CDTXMania.DTX.listWAV.Count )
\r
287 TimeSpan span = ( TimeSpan ) ( DateTime.Now - timeBeginLoadWAV );
\r
288 Trace.TraceInformation( "WAV読込所要時間({0,4}): {1}", CDTXMania.DTX.listWAV.Count, span.ToString() );
\r
290 CDTXMania.DTX.tギターとベースのランダム化( E楽器パート.GUITAR, CDTXMania.ConfigIni.eRandom.Guitar );
\r
291 CDTXMania.DTX.tギターとベースのランダム化( E楽器パート.BASS, CDTXMania.ConfigIni.eRandom.Bass );
\r
293 if ( CDTXMania.ConfigIni.bギタレボモード )
\r
294 CDTXMania.stage演奏ギター画面.On活性化();
\r
296 CDTXMania.stage演奏ドラム画面.On活性化();
\r
298 base.eフェーズID = CStage.Eフェーズ.NOWLOADING_BMPファイルを読み込む;
\r
303 case CStage.Eフェーズ.NOWLOADING_BMPファイルを読み込む:
\r
306 DateTime timeBeginLoadBMPAVI = DateTime.Now;
\r
307 if ( CDTXMania.ConfigIni.bBGA有効 )
\r
308 CDTXMania.DTX.tBMP_BMPTEXの読み込み();
\r
310 if ( CDTXMania.ConfigIni.bAVI有効 )
\r
311 CDTXMania.DTX.tAVIの読み込み();
\r
312 span = ( TimeSpan ) ( DateTime.Now - timeBeginLoadBMPAVI );
\r
313 Trace.TraceInformation( "BMP/AVI読込所要時間({0,4}): {1}", ( CDTXMania.DTX.listBMP.Count + CDTXMania.DTX.listBMPTEX.Count + CDTXMania.DTX.listAVI.Count ), span.ToString() );
\r
315 span = ( TimeSpan ) ( DateTime.Now - timeBeginLoad );
\r
316 Trace.TraceInformation( "総読込時間: {0}", span.ToString() );
\r
318 if ( bitmapFilename != null )
\r
320 bitmapFilename.Dispose();
\r
321 bitmapFilename = null;
\r
323 if ( graphicsFilename != null )
\r
325 graphicsFilename.Dispose();
\r
326 graphicsFilename = null;
\r
328 if ( ftFilename != null )
\r
330 ftFilename.Dispose();
\r
333 CDTXMania.Timer.t更新();
\r
334 base.eフェーズID = CStage.Eフェーズ.NOWLOADING_システムサウンドBGMの完了を待つ;
\r
338 case CStage.Eフェーズ.NOWLOADING_システムサウンドBGMの完了を待つ:
\r
340 long nCurrentTime = CDTXMania.Timer.n現在時刻;
\r
341 if( nCurrentTime < this.nBGM再生開始時刻 )
\r
342 this.nBGM再生開始時刻 = nCurrentTime;
\r
344 // if ( ( nCurrentTime - this.nBGM再生開始時刻 ) > ( this.nBGMの総再生時間ms - 1000 ) )
\r
345 if ( ( nCurrentTime - this.nBGM再生開始時刻 ) > ( this.nBGMの総再生時間ms ) ) // #27787 2012.3.10 yyagi 1000ms == フェードイン分の時間
\r
347 this.actFO.tフェードアウト開始();
\r
348 base.eフェーズID = CStage.Eフェーズ.共通_フェードアウト;
\r
353 case CStage.Eフェーズ.共通_フェードアウト:
\r
354 if( this.actFO.On進行描画() == 0 )
\r
356 if ( txFilename != null )
\r
358 txFilename.Dispose();
\r
365 private void ShowProgressByFilename(string strファイル名 )
\r
367 if ( graphicsFilename != null && ftFilename != null )
\r
369 graphicsFilename.Clear( Color.Transparent );
\r
370 graphicsFilename.DrawString( strファイル名, ftFilename, Brushes.White, new RectangleF( 0, 0, 640, 24 ) );
\r
371 if ( txFilename != null )
\r
373 txFilename.Dispose();
\r
375 txFilename = new CTexture( CDTXMania.app.Device, bitmapFilename, CDTXMania.TextureFormat );
\r
376 txFilename.vc拡大縮小倍率 = new Vector3( 0.5f, 0.5f, 1f );
\r
377 txFilename.t2D描画( CDTXMania.app.Device, 0, 480 - 16 );
\r
383 #region [ private ]
\r
384 //-----------------
\r
385 // private CActFIFOBlack actFI;
\r
386 private CActFIFOBlack actFO;
\r
387 private bool b音符を表示する;
\r
388 private Font ftタイトル表示用フォント;
\r
389 private long nBGMの総再生時間ms;
\r
390 private long nBGM再生開始時刻;
\r
391 private int n音符の表示位置X;
\r
392 private CSound sd読み込み音;
\r
393 private string strSTAGEFILE;
\r
394 private string str曲タイトル;
\r
395 private CTexture txタイトル;
\r
396 private CTexture tx音符;
\r
397 private CTexture tx背景;
\r
398 private DateTime timeBeginLoad;
\r
399 private DateTime timeBeginLoadWAV;
\r
400 private int nWAVcount;
\r
401 private CTexture txFilename;
\r
402 private Bitmap bitmapFilename;
\r
403 private Graphics graphicsFilename;
\r
404 private Font ftFilename;
\r
405 //-----------------
\r