2 using System.Collections.Generic;
4 using System.Diagnostics;
8 using System.Drawing.Text;
9 using System.Runtime.InteropServices;
14 internal class CStage曲読み込み : CStage
20 base.eステージID = CStage.Eステージ.曲読み込み;
21 base.eフェーズID = CStage.Eフェーズ.共通_通常状態;
23 base.list子Activities.Add( this.actFI = new CActFIFOBlack() ); // #27787 2012.3.10 yyagi 曲読み込み画面のフェードインの省略
24 base.list子Activities.Add( this.actFO = new CActFIFOBlack() );
30 public override void On活性化()
32 Trace.TraceInformation( "曲読み込みステージを活性化します。" );
37 this.strSTAGEFILE = "";
38 this.b音符を表示する = false;
39 this.n音符の表示位置X = 0x308;
40 this.ftタイトル表示用フォント = new Font( "MS PGothic", fFontSizeTitle * Scale.Y, GraphicsUnit.Pixel );
42 this.nBGMの総再生時間ms = 0;
43 if( this.sd読み込み音 != null )
45 CDTXMania.Sound管理.tサウンドを破棄する( this.sd読み込み音 );
49 string strDTXファイルパス = ( CDTXMania.bコンパクトモード ) ?
50 CDTXMania.strコンパクトモードファイル : CDTXMania.stage選曲.r確定されたスコア.ファイル情報.ファイルの絶対パス;
52 CDTX cdtx = new CDTX( strDTXファイルパス, true );
53 this.str曲タイトル = cdtx.TITLE;
54 if( ( ( cdtx.STAGEFILE != null ) && ( cdtx.STAGEFILE.Length > 0 ) ) && ( File.Exists( cdtx.strフォルダ名 + cdtx.STAGEFILE ) && !CDTXMania.ConfigIni.bストイックモード ) )
56 this.strSTAGEFILE = cdtx.strフォルダ名 + cdtx.PATH + cdtx.STAGEFILE;
57 this.b音符を表示する = false;
61 this.strSTAGEFILE = CSkin.Path( @"Graphics\\6_background.png" );
64 if( ( ( cdtx.SOUND_NOWLOADING != null ) && ( cdtx.SOUND_NOWLOADING.Length > 0 ) ) && File.Exists( cdtx.strフォルダ名 + cdtx.SOUND_NOWLOADING ) )
66 string strNowLoadingサウンドファイルパス = cdtx.strフォルダ名 + cdtx.PATH + cdtx.SOUND_NOWLOADING;
69 this.sd読み込み音 = CDTXMania.Sound管理.tサウンドを生成する( strNowLoadingサウンドファイルパス );
73 Trace.TraceError( "#SOUND_NOWLOADING に指定されたサウンドファイルの読み込みに失敗しました。({0})", strNowLoadingサウンドファイルパス );
77 // #35411 2015.08.19 chnmr0 add
78 // Read ghost data by config
79 // It does not exist a ghost file for 'perfect' actually
80 string [] inst = {"dr", "gt", "bs"};
81 if( CDTXMania.ConfigIni.bIsSwappedGuitarBass )
87 for(int instIndex = 0; instIndex < inst.Length; ++instIndex)
89 bool readAutoGhostCond = false;
90 readAutoGhostCond |= instIndex == 0 ? CDTXMania.ConfigIni.bドラムが全部オートプレイである : false;
91 readAutoGhostCond |= instIndex == 1 ? CDTXMania.ConfigIni.bギターが全部オートプレイである : false;
92 readAutoGhostCond |= instIndex == 2 ? CDTXMania.ConfigIni.bベースが全部オートプレイである : false;
94 CDTXMania.listTargetGhsotLag[instIndex] = null;
95 CDTXMania.listAutoGhostLag[instIndex] = null;
96 CDTXMania.listTargetGhostScoreData[instIndex] = null;
97 this.nCurrentInst = instIndex;
99 if ( readAutoGhostCond )
101 string[] prefix = { "perfect", "lastplay", "hiskill", "hiscore", "online" };
102 int indPrefix = (int)CDTXMania.ConfigIni.eAutoGhost[instIndex];
103 string filename = cdtx.strフォルダ名 + "\\" + cdtx.strファイル名 + "." + prefix[indPrefix] + "." + inst[instIndex] + ".ghost";
104 if ( File.Exists(filename) )
106 CDTXMania.listAutoGhostLag[instIndex] = new List<int>();
107 CDTXMania.listTargetGhostScoreData[ instIndex ] = new CScoreIni.C演奏記録();
108 ReadGhost(filename, CDTXMania.listAutoGhostLag[instIndex]);
112 if( CDTXMania.ConfigIni.eTargetGhost[instIndex] != ETargetGhostData.NONE )
114 string[] prefix = { "none", "perfect", "lastplay", "hiskill", "hiscore", "online" };
115 int indPrefix = (int)CDTXMania.ConfigIni.eTargetGhost[instIndex];
116 string filename = cdtx.strフォルダ名 + "\\" + cdtx.strファイル名 + "." + prefix[indPrefix] + "." + inst[instIndex] + ".ghost";
117 if (File.Exists(filename))
119 CDTXMania.listTargetGhsotLag[instIndex] = new List<int>();
120 CDTXMania.listTargetGhostScoreData[ instIndex ] = new CScoreIni.C演奏記録();
121 this.stGhostLag[instIndex] = new List<STGhostLag>();
122 ReadGhost(filename, CDTXMania.listTargetGhsotLag[instIndex]);
124 else if( CDTXMania.ConfigIni.eTargetGhost[instIndex] == ETargetGhostData.PERFECT )
127 CDTXMania.listTargetGhsotLag[instIndex] = new List<int>();
137 Trace.TraceInformation( "曲読み込みステージの活性化を完了しました。" );
142 private void ReadGhost(string filename, List<int> list) // #35411 2015.08.19 chnmr0 add
144 if (File.Exists(filename))
146 using (FileStream fs = new FileStream(filename, FileMode.Open, FileAccess.Read))
148 using (BinaryReader br = new BinaryReader(fs))
152 int cnt = br.ReadInt32();
153 for (int i = 0; i < cnt; ++i)
155 short lag = br.ReadInt16();
159 catch( EndOfStreamException )
161 Trace.TraceInformation("ゴーストデータは正しく読み込まれませんでした。");
168 //if( File.Exists( filename + ".score" ) )
170 // using( FileStream fs = new FileStream( filename + ".score", FileMode.Open, FileAccess.Read ) )
172 // using( StreamReader sr = new StreamReader( fs ) )
176 // string strScoreDataFile = sr.ReadToEnd();
178 // strScoreDataFile = strScoreDataFile.Replace( Environment.NewLine, "\n" );
179 // string[] delimiter = { "\n" };
180 // string[] strSingleLine = strScoreDataFile.Split( delimiter, StringSplitOptions.RemoveEmptyEntries );
182 // for( int i = 0; i < strSingleLine.Length; i++ )
184 // string[] strA = strSingleLine[ i ].Split( '=' );
185 // if (strA.Length != 2)
188 // switch( strA[ 0 ] )
191 // CDTXMania.listTargetGhostScoreData[ (int)this.nCurrentInst ].nスコア = Convert.ToInt32( strA[ 1 ] );
194 // CDTXMania.listTargetGhostScoreData[ (int)this.nCurrentInst ].db演奏型スキル値 = Convert.ToDouble( strA[ 1 ] );
197 // CDTXMania.listTargetGhostScoreData[ (int)this.nCurrentInst ].dbゲーム型スキル値 = Convert.ToDouble( strA[ 1 ] );
200 // CDTXMania.listTargetGhostScoreData[ (int)this.nCurrentInst ].nPerfect数_Auto含まない = Convert.ToInt32( strA[ 1 ] );
203 // CDTXMania.listTargetGhostScoreData[ (int)this.nCurrentInst ].nGreat数_Auto含まない = Convert.ToInt32( strA[ 1 ] );
206 // CDTXMania.listTargetGhostScoreData[ (int)this.nCurrentInst ].nGood数_Auto含まない = Convert.ToInt32( strA[ 1 ] );
209 // CDTXMania.listTargetGhostScoreData[ (int)this.nCurrentInst ].nPoor数_Auto含まない = Convert.ToInt32( strA[ 1 ] );
212 // CDTXMania.listTargetGhostScoreData[ (int)this.nCurrentInst ].nMiss数_Auto含まない = Convert.ToInt32( strA[ 1 ] );
215 // CDTXMania.listTargetGhostScoreData[ (int)this.nCurrentInst ].n最大コンボ数 = Convert.ToInt32( strA[ 1 ] );
222 // catch( NullReferenceException )
224 // Trace.TraceInformation("ゴーストデータの記録が正しく読み込まれませんでした。");
226 // catch( EndOfStreamException )
228 // Trace.TraceInformation("ゴーストデータの記録が正しく読み込まれませんでした。");
235 // CDTXMania.listTargetGhostScoreData[ (int)this.nCurrentInst ] = null;
239 public override void On非活性化()
241 Trace.TraceInformation( "曲読み込みステージを非活性化します。" );
245 if( this.ftタイトル表示用フォント != null )
247 this.ftタイトル表示用フォント.Dispose();
248 this.ftタイトル表示用フォント = null;
254 Trace.TraceInformation( "曲読み込みステージの非活性化を完了しました。" );
258 public override void OnManagedリソースの作成()
262 this.tx背景 = CDTXMania.tテクスチャの生成( this.strSTAGEFILE, false );
264 if ( !this.b音符を表示する && this.tx背景 != null )
266 this.tx背景.vc拡大縮小倍率 = new Vector3( Scale.X, Scale.Y, 1f ); // とりあえずFullHD化
268 base.OnManagedリソースの作成();
271 public override void OnManagedリソースの解放()
275 CDTXMania.tテクスチャの解放( ref this.tx背景 );
276 base.OnManagedリソースの解放();
279 public override int On進行描画()
287 //-----------------------------
290 Cスコア cスコア1 = CDTXMania.stage選曲.r確定されたスコア;
291 if( this.sd読み込み音 != null )
293 if( CDTXMania.Skin.sound曲読込開始音.b排他 && ( CSkin.Cシステムサウンド.r最後に再生した排他システムサウンド != null ) )
295 CSkin.Cシステムサウンド.r最後に再生した排他システムサウンド.t停止する();
297 this.sd読み込み音.t再生を開始する();
298 this.nBGM再生開始時刻 = CSound管理.rc演奏用タイマ.n現在時刻;
299 this.nBGMの総再生時間ms = this.sd読み込み音.n総演奏時間ms;
303 CDTXMania.Skin.sound曲読込開始音.t再生する();
304 this.nBGM再生開始時刻 = CSound管理.rc演奏用タイマ.n現在時刻;
305 this.nBGMの総再生時間ms = CDTXMania.Skin.sound曲読込開始音.n長さ_現在のサウンド;
307 // this.actFI.tフェードイン開始(); // #27787 2012.3.10 yyagi 曲読み込み画面のフェードインの省略
308 base.eフェーズID = CStage.Eフェーズ.共通_フェードイン;
309 base.b初めての進行描画 = false;
312 bitmapFilename = new Bitmap( SampleFramework.GameWindowSize.Width, (int)(fFontSizeFilename * Scale.X) );
313 graphicsFilename = Graphics.FromImage( bitmapFilename );
314 graphicsFilename.TextRenderingHint = TextRenderingHint.AntiAlias;
315 ftFilename = new Font( "MS PGothic", fFontSizeFilename * Scale.X, FontStyle.Bold, GraphicsUnit.Pixel );
317 //-----------------------------
320 #region [ ESC押下時は選曲画面に戻る ]
323 if ( this.sd読み込み音 != null )
325 this.sd読み込み音.tサウンドを停止する();
326 this.sd読み込み音.t解放する();
328 return (int) E曲読込画面の戻り値.読込中止;
333 //-----------------------------
334 if( this.tx背景 != null )
335 this.tx背景.t2D描画( CDTXMania.app.Device, 0, 0 );
336 //-----------------------------
339 switch( base.eフェーズID )
341 case CStage.Eフェーズ.共通_フェードイン:
342 // if( this.actFI.On進行描画() != 0 ) // #27787 2012.3.10 yyagi 曲読み込み画面のフェードインの省略
343 // 必ず一度「CStaeg.Eフェーズ.共通_フェードイン」フェーズを経由させること。
344 // さもないと、曲読み込みが完了するまで、曲読み込み画面が描画されない。
345 base.eフェーズID = CStage.Eフェーズ.NOWLOADING_DTXファイルを読み込む;
346 return (int) E曲読込画面の戻り値.継続;
348 case CStage.Eフェーズ.NOWLOADING_DTXファイルを読み込む:
350 timeBeginLoad = DateTime.Now;
353 if( !CDTXMania.bコンパクトモード )
354 str = CDTXMania.stage選曲.r確定されたスコア.ファイル情報.ファイルの絶対パス;
356 str = CDTXMania.strコンパクトモードファイル;
358 CScoreIni ini = new CScoreIni( str + ".score.ini" );
359 ini.t全演奏記録セクションの整合性をチェックし不整合があればリセットする();
361 if( ( CDTXMania.DTX != null ) && CDTXMania.DTX.b活性化してる )
362 CDTXMania.DTX.On非活性化();
364 CDTXMania.DTX = new CDTX( str, false, ( (double) CDTXMania.ConfigIni.n演奏速度 ) / 20.0, ini.stファイル.BGMAdjust );
365 Trace.TraceInformation( "----曲情報-----------------" );
366 Trace.TraceInformation( "TITLE: {0}", CDTXMania.DTX.TITLE );
367 Trace.TraceInformation( "FILE: {0}", CDTXMania.DTX.strファイル名の絶対パス );
368 Trace.TraceInformation( "---------------------------" );
370 if( !CDTXMania.bコンパクトモード )
372 if( CDTXMania.ConfigIni.bSkillModeを自動切替えする && CDTXMania.ConfigIni.bDrums有効 )
373 this.tSkillModeを譜面に応じて切り替える( CDTXMania.DTX );
376 // #35411 2015.08.19 chnmr0 add ゴースト機能のためList chip 読み込み後楽器パート出現順インデックスを割り振る
377 int[] curCount = new int[(int)E楽器パート.UNKNOWN];
378 for (int i = 0; i < curCount.Length; ++i)
382 foreach (CDTX.CChip chip in CDTXMania.DTX.listChip)
384 if (chip.e楽器パート != E楽器パート.UNKNOWN)
386 chip.n楽器パートでの出現順 = curCount[(int)chip.e楽器パート]++;
387 if( CDTXMania.listTargetGhsotLag[ (int)chip.e楽器パート ] != null )
389 var lag = new STGhostLag();
390 lag.index = chip.n楽器パートでの出現順;
391 lag.nJudgeTime = chip.n発声時刻ms + CDTXMania.listTargetGhsotLag[ (int)chip.e楽器パート ][ chip.n楽器パートでの出現順 ];
392 lag.nLagTime = CDTXMania.listTargetGhsotLag[ (int)chip.e楽器パート ][ chip.n楽器パートでの出現順 ];
394 this.stGhostLag[ (int)chip.e楽器パート ].Add( lag );
400 for( int i = 0; i < 3; i++ )
404 CDTXMania.listTargetGhostScoreData[ i ] = new CScoreIni.C演奏記録();
405 if( this.stGhostLag[ i ] == null )
407 for( int j = 0; j < this.stGhostLag[ i ].Count; j++ )
410 ghostLag = this.stGhostLag[ i ][ j ].nLagTime;
411 // 上位8ビットが1ならコンボが途切れている(ギターBAD空打ちでコンボ数を再現するための措置)
416 ghostLag = (ghostLag & 255) - 128;
418 if( ghostLag <= 127 )
420 E判定 eJudge = this.e指定時刻からChipのJUDGEを返す(ghostLag, 0);
426 CDTXMania.listTargetGhostScoreData[ i ].nPerfect数++;
429 CDTXMania.listTargetGhostScoreData[ i ].nGreat数++;
432 CDTXMania.listTargetGhostScoreData[ i ].nGood数++;
435 CDTXMania.listTargetGhostScoreData[ i ].nPoor数++;
439 CDTXMania.listTargetGhostScoreData[ i ].nMiss数++;
449 CDTXMania.listTargetGhostScoreData[ i ].n最大コンボ数 = Math.Max( nNowCombo, CDTXMania.listTargetGhostScoreData[ i ].n最大コンボ数 );
454 CDTXMania.listTargetGhostScoreData[ i ].n最大コンボ数 = Math.Max( nNowCombo, CDTXMania.listTargetGhostScoreData[ i ].n最大コンボ数 );
458 //Trace.WriteLine( eJudge.ToString() + " " + nNowCombo.ToString() + "Combo Max:" + nMaxCombo.ToString() + "Combo" );
461 //CDTXMania.listTargetGhostScoreData[ i ].n最大コンボ数 = nMaxCombo;
462 int nTotal = CDTXMania.DTX.n可視チップ数.Drums;
463 if( i == 1 ) nTotal = CDTXMania.DTX.n可視チップ数.Guitar;
464 else if( i == 2 ) nTotal = CDTXMania.DTX.n可視チップ数.Bass;
465 if( CDTXMania.ConfigIni.eSkillMode == ESkillType.DTXMania )
467 CDTXMania.listTargetGhostScoreData[ i ].db演奏型スキル値 = CScoreIni.t演奏型スキルを計算して返す( nTotal, CDTXMania.listTargetGhostScoreData[ i ].nPerfect数, CDTXMania.listTargetGhostScoreData[ i ].nGreat数, CDTXMania.listTargetGhostScoreData[ i ].nGood数, CDTXMania.listTargetGhostScoreData[ i ].nPoor数, CDTXMania.listTargetGhostScoreData[ i ].nMiss数, (E楽器パート)i, CDTXMania.listTargetGhostScoreData[ i ].bAutoPlay );
471 CDTXMania.listTargetGhostScoreData[ i ].db演奏型スキル値 = CScoreIni.tXG演奏型スキルを計算して返す( nTotal, CDTXMania.listTargetGhostScoreData[ i ].nPerfect数, CDTXMania.listTargetGhostScoreData[ i ].nGreat数, CDTXMania.listTargetGhostScoreData[ i ].nGood数, CDTXMania.listTargetGhostScoreData[ i ].nPoor数, CDTXMania.listTargetGhostScoreData[ i ].nMiss数, CDTXMania.listTargetGhostScoreData[ i ].n最大コンボ数, (E楽器パート)i, CDTXMania.listTargetGhostScoreData[ i ].bAutoPlay );
475 span = (TimeSpan) ( DateTime.Now - timeBeginLoad );
476 Trace.TraceInformation( "DTX読込所要時間: {0}", span.ToString() );
478 if ( CDTXMania.bコンパクトモード )
479 CDTXMania.DTX.MIDIレベル = 1;
481 CDTXMania.DTX.MIDIレベル = ( CDTXMania.stage選曲.r確定された曲.eノード種別 == C曲リストノード.Eノード種別.SCORE_MIDI ) ? CDTXMania.stage選曲.n現在選択中の曲の難易度 : 0;
483 base.eフェーズID = CStage.Eフェーズ.NOWLOADING_WAVファイルを読み込む;
484 timeBeginLoadWAV = DateTime.Now;
485 return (int) E曲読込画面の戻り値.継続;
488 case CStage.Eフェーズ.NOWLOADING_WAVファイルを読み込む:
490 if ( nWAVcount == 1 && CDTXMania.DTX.listWAV.Count > 0 ) // #28934 2012.7.7 yyagi (added checking Count)
492 ShowProgressByFilename( CDTXMania.DTX.listWAV[ nWAVcount ].strファイル名 );
494 int looptime = (CDTXMania.ConfigIni.b垂直帰線待ちを行う)? 3 : 1; // VSyncWait=ON時は1frame(1/60s)あたり3つ読むようにする
495 for ( int i = 0; i < looptime && nWAVcount <= CDTXMania.DTX.listWAV.Count; i++ )
497 if ( CDTXMania.DTX.listWAV[ nWAVcount ].listこのWAVを使用するチャンネル番号の集合.Count > 0 ) // #28674 2012.5.8 yyagi
499 CDTXMania.DTX.tWAVの読み込み( CDTXMania.DTX.listWAV[ nWAVcount ] );
503 if ( nWAVcount <= CDTXMania.DTX.listWAV.Count )
505 ShowProgressByFilename( CDTXMania.DTX.listWAV[ nWAVcount ].strファイル名 );
507 if ( nWAVcount > CDTXMania.DTX.listWAV.Count )
509 TimeSpan span = ( TimeSpan ) ( DateTime.Now - timeBeginLoadWAV );
510 Trace.TraceInformation( "WAV読込所要時間({0,4}): {1}", CDTXMania.DTX.listWAV.Count, span.ToString() );
511 timeBeginLoadWAV = DateTime.Now;
513 if ( CDTXMania.ConfigIni.bDynamicBassMixerManagement )
515 CDTXMania.DTX.PlanToAddMixerChannel();
517 CDTXMania.DTX.tギターとベースのランダム化( E楽器パート.GUITAR, CDTXMania.ConfigIni.eRandom.Guitar );
518 CDTXMania.DTX.tギターとベースのランダム化( E楽器パート.BASS, CDTXMania.ConfigIni.eRandom.Bass );
519 //CDTXMania.DTX.tドコドコ仕様変更( E楽器パート.DRUMS, Eタイプ.A );
520 CDTXMania.DTX.t旧仕様のドコドコチップを振り分ける( E楽器パート.DRUMS, true );
522 #region[ 譜面に応じてSkillMode変更 ]
523 if( CDTXMania.ConfigIni.bSkillModeを自動切替えする )
525 if( CDTXMania.ConfigIni.bDrums有効 ? CDTXMania.DTX.bCLASSIC譜面である[ 0 ] : CDTXMania.DTX.bCLASSIC譜面である[ 1 ] | CDTXMania.DTX.bCLASSIC譜面である[ 2 ] )
527 CDTXMania.ConfigIni.eSkillMode = ESkillType.DTXMania;
531 CDTXMania.ConfigIni.eSkillMode = ESkillType.XG;
536 if ( CDTXMania.ConfigIni.bギタレボモード )
537 CDTXMania.stage演奏ギター画面.On活性化();
539 CDTXMania.stage演奏ドラム画面.On活性化();
541 span = (TimeSpan) ( DateTime.Now - timeBeginLoadWAV );
542 Trace.TraceInformation( "WAV/譜面後処理時間({0,4}): {1}", ( CDTXMania.DTX.listBMP.Count + CDTXMania.DTX.listBMPTEX.Count + CDTXMania.DTX.listAVI.Count ), span.ToString() );
544 base.eフェーズID = CStage.Eフェーズ.NOWLOADING_BMPファイルを読み込む;
546 return (int) E曲読込画面の戻り値.継続;
549 case CStage.Eフェーズ.NOWLOADING_BMPファイルを読み込む:
552 DateTime timeBeginLoadBMPAVI = DateTime.Now;
553 if ( CDTXMania.ConfigIni.bBGA有効 )
554 CDTXMania.DTX.tBMP_BMPTEXの読み込み();
556 if ( CDTXMania.ConfigIni.bAVI有効 )
557 CDTXMania.DTX.tAVIの読み込み();
558 span = ( TimeSpan ) ( DateTime.Now - timeBeginLoadBMPAVI );
559 Trace.TraceInformation( "BMP/AVI読込所要時間({0,4}): {1}", ( CDTXMania.DTX.listBMP.Count + CDTXMania.DTX.listBMPTEX.Count + CDTXMania.DTX.listAVI.Count ), span.ToString() );
561 span = ( TimeSpan ) ( DateTime.Now - timeBeginLoad );
562 Trace.TraceInformation( "総読込時間: {0}", span.ToString() );
564 if ( bitmapFilename != null )
566 bitmapFilename.Dispose();
567 bitmapFilename = null;
569 if ( graphicsFilename != null )
571 graphicsFilename.Dispose();
572 graphicsFilename = null;
574 if ( ftFilename != null )
576 ftFilename.Dispose();
579 CDTXMania.Timer.t更新();
580 base.eフェーズID = CStage.Eフェーズ.NOWLOADING_システムサウンドBGMの完了を待つ;
581 return (int) E曲読込画面の戻り値.継続;
584 case CStage.Eフェーズ.NOWLOADING_システムサウンドBGMの完了を待つ:
586 long nCurrentTime = CDTXMania.Timer.n現在時刻;
587 if( nCurrentTime < this.nBGM再生開始時刻 )
588 this.nBGM再生開始時刻 = nCurrentTime;
590 // if ( ( nCurrentTime - this.nBGM再生開始時刻 ) > ( this.nBGMの総再生時間ms - 1000 ) )
591 if ( ( nCurrentTime - this.nBGM再生開始時刻 ) >= ( this.nBGMの総再生時間ms ) ) // #27787 2012.3.10 yyagi 1000ms == フェードイン分の時間
593 if ( !CDTXMania.DTXVmode.Enabled )
595 this.actFO.tフェードアウト開始();
597 base.eフェーズID = CStage.Eフェーズ.共通_フェードアウト;
599 return (int) E曲読込画面の戻り値.継続;
602 case CStage.Eフェーズ.共通_フェードアウト:
603 if ( this.actFO.On進行描画() == 0 && !CDTXMania.DTXVmode.Enabled ) // DTXVモード時は、フェードアウト省略
606 if ( txFilename != null )
608 txFilename.Dispose();
610 if ( this.sd読み込み音 != null )
612 this.sd読み込み音.t解放する();
614 return (int) E曲読込画面の戻り値.読込完了;
616 return (int) E曲読込画面の戻り値.継続;
622 /// <returns></returns>
623 protected bool tキー入力()
625 IInputDevice keyboard = CDTXMania.Input管理.Keyboard;
626 if ( keyboard.bキーが押された( (int) SlimDX.DirectInput.Key.Escape ) ) // escape (exit)
634 private void ShowProgressByFilename(string strファイル名 )
636 if ( graphicsFilename != null && ftFilename != null )
638 graphicsFilename.Clear( Color.Transparent );
639 graphicsFilename.DrawString( strファイル名, ftFilename, Brushes.White, new RectangleF( 0, 0, SampleFramework.GameWindowSize.Width, fFontSizeFilename * Scale.X ) );
640 if ( txFilename != null )
642 txFilename.Dispose();
644 txFilename = new CTexture( CDTXMania.app.Device, bitmapFilename, CDTXMania.TextureFormat );
645 txFilename.vc拡大縮小倍率 = new Vector3( 0.5f, 0.5f, 1f );
647 CDTXMania.app.Device,
649 ( SampleFramework.GameWindowSize.Height - (int) ( txFilename.szテクスチャサイズ.Height * 0.5 ) )
654 private void tSkillModeを譜面に応じて切り替える( CDTX cdtx )
656 if( CDTXMania.ConfigIni.bDrums有効 ? ( CDTXMania.stage選曲.r確定されたスコア.譜面情報.b完全にCLASSIC譜面である.Drums ) :
657 ( CDTXMania.stage選曲.r確定されたスコア.譜面情報.b完全にCLASSIC譜面である.Guitar | CDTXMania.stage選曲.r確定されたスコア.譜面情報.b完全にCLASSIC譜面である.Bass ) &&
659 CDTXMania.ConfigIni.eSkillMode = ESkillType.DTXMania;
661 CDTXMania.ConfigIni.eSkillMode = ESkillType.XG;
668 private CActFIFOBlack actFI;
669 private CActFIFOBlack actFO;
670 private bool b音符を表示する;
671 private Font ftタイトル表示用フォント;
672 private long nBGMの総再生時間ms;
673 private long nBGM再生開始時刻;
674 private int nCurrentInst;
675 private int n音符の表示位置X;
676 private CSound sd読み込み音;
677 private string strSTAGEFILE;
678 private string str曲タイトル;
679 private CTexture tx背景;
680 private DateTime timeBeginLoad;
681 private DateTime timeBeginLoadWAV;
682 private int nWAVcount;
683 private CTexture txFilename;
684 private Bitmap bitmapFilename;
685 private Graphics graphicsFilename;
686 private Font ftFilename;
687 private const float fFontSizeFilename = 12.0f;
688 private const float fFontSizeTitle = 48;
690 private STDGBVALUE<List<STGhostLag>> stGhostLag;
692 [StructLayout(LayoutKind.Sequential)]
693 private struct STGhostLag
696 public int nJudgeTime;
698 public STGhostLag( int index, int nJudgeTime, int nLagTime )
701 this.nJudgeTime = nJudgeTime;
702 this.nLagTime = nLagTime;
705 protected E判定 e指定時刻からChipのJUDGEを返す( long nTime, int nInputAdjustTime )
707 //if ( pChip != null )
709 int nDeltaTime = Math.Abs( (int)nTime );
710 //Debug.WriteLine("nAbsTime=" + (nTime - pChip.n発声時刻ms) + ", nDeltaTime=" + (nTime + nInputAdjustTime - pChip.n発声時刻ms));
711 if( ( nDeltaTime <= CDTXMania.nPerfect範囲ms / 2 ) && CDTXMania.ConfigIni.bXPerfect判定を有効にする )
715 if ( nDeltaTime <= CDTXMania.nPerfect範囲ms )
719 if ( nDeltaTime <= CDTXMania.nGreat範囲ms )
723 if ( nDeltaTime <= CDTXMania.nGood範囲ms )
727 if ( nDeltaTime <= CDTXMania.nPoor範囲ms )