private bool tリザルト画像の指定があれば構築する() { int rank = CScoreIni.tCalculateOverallRankValue(CDTXMania.stageResult.stPerformanceEntry.Drums, CDTXMania.stageResult.stPerformanceEntry.Guitar, CDTXMania.stageResult.stPerformanceEntry.Bass); if (rank == 99) // #23534 2010.10.28 yyagi: 演奏チップが0個のときは、rankEと見なす { rank = 6; } if (string.IsNullOrEmpty(CDTXMania.DTX.RESULTIMAGE[rank])) { return(false); } CDTXMania.tReleaseTexture(ref this.txリザルト画像); this.r表示するリザルト画像 = null; string path = CDTXMania.DTX.strFolderName + CDTXMania.DTX.RESULTIMAGE[rank]; if (!File.Exists(path)) { Trace.TraceWarning("ファイルが存在しません。({0})", new object[] { path }); return(false); } this.txリザルト画像 = CDTXMania.tGenerateTexture(path); this.r表示するリザルト画像 = this.txリザルト画像; return(this.r表示するリザルト画像 != null); }
protected override EJudgement tProcessChipHit(long nHitTime, CDTX.CChip pChip, bool bCorrectLane) { EJudgement eJudgeResult = tProcessChipHit(nHitTime, pChip, EInstrumentPart.GUITAR, bCorrectLane); if (pChip.eInstrumentPart == EInstrumentPart.GUITAR && CDTXMania.ConfigIni.bGraph有効.Guitar) { if (CDTXMania.ConfigIni.nSkillMode == 0) { this.actGraph.dbグラフ値現在_渡 = CScoreIni.tCalculatePlayingSkillOld(CDTXMania.DTX.nVisibleChipsCount.Guitar, this.nHitCount_ExclAuto.Guitar.Perfect, this.nHitCount_ExclAuto.Guitar.Great, this.nHitCount_ExclAuto.Guitar.Good, this.nHitCount_ExclAuto.Guitar.Poor, this.nHitCount_ExclAuto.Guitar.Miss, this.actCombo.nCurrentCombo.HighestValue.Guitar, EInstrumentPart.GUITAR, bIsAutoPlay); } else { this.actGraph.dbグラフ値現在_渡 = CScoreIni.tCalculatePlayingSkill(CDTXMania.DTX.nVisibleChipsCount.Guitar, this.nHitCount_ExclAuto.Guitar.Perfect, this.nHitCount_ExclAuto.Guitar.Great, this.nHitCount_ExclAuto.Guitar.Good, this.nHitCount_ExclAuto.Guitar.Poor, this.nHitCount_ExclAuto.Guitar.Miss, this.actCombo.nCurrentCombo.HighestValue.Guitar, EInstrumentPart.GUITAR, bIsAutoPlay); } if (CDTXMania.listTargetGhsotLag.Guitar != null && CDTXMania.ConfigIni.eTargetGhost.Guitar == ETargetGhostData.ONLINE && CDTXMania.DTX.nVisibleChipsCount.Guitar > 0) { this.actGraph.dbグラフ値現在_渡 = 100 * (this.nHitCount_ExclAuto.Guitar.Perfect * 17 + this.nHitCount_ExclAuto.Guitar.Great * 7 + this.actCombo.nCurrentCombo.HighestValue.Guitar * 3) / (20.0 * CDTXMania.DTX.nVisibleChipsCount.Guitar); } this.actGraph.n現在のAutoを含まない判定数_渡[0] = this.nHitCount_ExclAuto.Guitar.Perfect; this.actGraph.n現在のAutoを含まない判定数_渡[1] = this.nHitCount_ExclAuto.Guitar.Great; this.actGraph.n現在のAutoを含まない判定数_渡[2] = this.nHitCount_ExclAuto.Guitar.Good; this.actGraph.n現在のAutoを含まない判定数_渡[3] = this.nHitCount_ExclAuto.Guitar.Poor; this.actGraph.n現在のAutoを含まない判定数_渡[4] = this.nHitCount_ExclAuto.Guitar.Miss; } else if (pChip.eInstrumentPart == EInstrumentPart.BASS && CDTXMania.ConfigIni.bGraph有効.Bass) { if (CDTXMania.ConfigIni.nSkillMode == 0) { this.actGraph.dbグラフ値現在_渡 = CScoreIni.tCalculatePlayingSkillOld(CDTXMania.DTX.nVisibleChipsCount.Bass, this.nHitCount_ExclAuto.Bass.Perfect, this.nHitCount_ExclAuto.Bass.Great, this.nHitCount_ExclAuto.Bass.Good, this.nHitCount_ExclAuto.Bass.Poor, this.nHitCount_ExclAuto.Bass.Miss, this.actCombo.nCurrentCombo.HighestValue.Bass, EInstrumentPart.BASS, bIsAutoPlay); } else { this.actGraph.dbグラフ値現在_渡 = CScoreIni.tCalculatePlayingSkill(CDTXMania.DTX.nVisibleChipsCount.Bass, this.nHitCount_ExclAuto.Bass.Perfect, this.nHitCount_ExclAuto.Bass.Great, this.nHitCount_ExclAuto.Bass.Good, this.nHitCount_ExclAuto.Bass.Poor, this.nHitCount_ExclAuto.Bass.Miss, this.actCombo.nCurrentCombo.HighestValue.Bass, EInstrumentPart.BASS, bIsAutoPlay); } if (CDTXMania.listTargetGhsotLag.Bass != null && CDTXMania.ConfigIni.eTargetGhost.Bass == ETargetGhostData.ONLINE && CDTXMania.DTX.nVisibleChipsCount.Bass > 0) { this.actGraph.dbグラフ値現在_渡 = 100 * (this.nHitCount_ExclAuto.Bass.Perfect * 17 + this.nHitCount_ExclAuto.Bass.Great * 7 + this.actCombo.nCurrentCombo.HighestValue.Bass * 3) / (20.0 * CDTXMania.DTX.nVisibleChipsCount.Bass); } this.actGraph.n現在のAutoを含まない判定数_渡[0] = this.nHitCount_ExclAuto.Bass.Perfect; this.actGraph.n現在のAutoを含まない判定数_渡[1] = this.nHitCount_ExclAuto.Bass.Great; this.actGraph.n現在のAutoを含まない判定数_渡[2] = this.nHitCount_ExclAuto.Bass.Good; this.actGraph.n現在のAutoを含まない判定数_渡[3] = this.nHitCount_ExclAuto.Bass.Poor; this.actGraph.n現在のAutoを含まない判定数_渡[4] = this.nHitCount_ExclAuto.Bass.Miss; } return(eJudgeResult); }
public override int OnUpdateAndDraw() { if (!base.bNotActivated) { double dbPERFECT率 = 0; double dbGREAT率 = 0; double dbGOOD率 = 0; double dbPOOR率 = 0; double dbMISS率 = 0; double dbMAXCOMBO率 = 0; for (int i = 1; i < 3; i++) { if (this.n本体X[i] != 0) { string str = string.Format("{0:0.00}", ((float)CDTXMania.DTX.LEVEL[i]) / 10.0f + (CDTXMania.DTX.LEVELDEC[i] != 0 ? CDTXMania.DTX.LEVELDEC[i] / 100.0f : 0)); bool bCLASSIC = false; //If Skill Mode is CLASSIC, always display lvl as Classic Style if (CDTXMania.ConfigIni.nSkillMode == 0 || (CDTXMania.ConfigIni.bCLASSIC譜面判別を有効にする && (i == 1 ? !CDTXMania.DTX.bチップがある.YPGuitar : !CDTXMania.DTX.bチップがある.YPBass) && (CDTXMania.DTX.b強制的にXG譜面にする == false))) { str = string.Format("{0:00}", CDTXMania.DTX.LEVEL[i]); bCLASSIC = true; } this.txスキルパネル.tDraw2D(CDTXMania.app.Device, this.n本体X[i], this.n本体Y); this.txネームプレート用文字[i - 1].tDraw2D(CDTXMania.app.Device, this.n本体X[i], this.n本体Y); this.t小文字表示(80 + this.n本体X[i], 72 + this.n本体Y, string.Format("{0,4:###0}", CDTXMania.stagePerfGuitarScreen.nHitCount_ExclAuto[i].Perfect)); this.t小文字表示(80 + this.n本体X[i], 102 + this.n本体Y, string.Format("{0,4:###0}", CDTXMania.stagePerfGuitarScreen.nHitCount_ExclAuto[i].Great)); this.t小文字表示(80 + this.n本体X[i], 132 + this.n本体Y, string.Format("{0,4:###0}", CDTXMania.stagePerfGuitarScreen.nHitCount_ExclAuto[i].Good)); this.t小文字表示(80 + this.n本体X[i], 162 + this.n本体Y, string.Format("{0,4:###0}", CDTXMania.stagePerfGuitarScreen.nHitCount_ExclAuto[i].Poor)); this.t小文字表示(80 + this.n本体X[i], 192 + this.n本体Y, string.Format("{0,4:###0}", CDTXMania.stagePerfGuitarScreen.nHitCount_ExclAuto[i].Miss)); this.t小文字表示(80 + this.n本体X[i], 222 + this.n本体Y, string.Format("{0,4:###0}", CDTXMania.stagePerfGuitarScreen.actCombo.nCurrentCombo.HighestValue[i])); int n現在のノーツ数 = CDTXMania.stagePerfGuitarScreen.nHitCount_IncAuto[i].Perfect + CDTXMania.stagePerfGuitarScreen.nHitCount_IncAuto[i].Great + CDTXMania.stagePerfGuitarScreen.nHitCount_IncAuto[i].Good + CDTXMania.stagePerfGuitarScreen.nHitCount_IncAuto[i].Poor + CDTXMania.stagePerfGuitarScreen.nHitCount_IncAuto[i].Miss; if (CDTXMania.stagePerfGuitarScreen.bIsTrainingMode) { CDTXMania.stagePerfGuitarScreen.actStatusPanel.db現在の達成率.Guitar = 0; } else { dbPERFECT率 = Math.Round((100.0 * CDTXMania.stagePerfGuitarScreen.nHitCount_ExclAuto[i].Perfect) / n現在のノーツ数); dbGREAT率 = Math.Round((100.0 * CDTXMania.stagePerfGuitarScreen.nHitCount_ExclAuto[i].Great / n現在のノーツ数)); dbGOOD率 = Math.Round((100.0 * CDTXMania.stagePerfGuitarScreen.nHitCount_ExclAuto[i].Good / n現在のノーツ数)); dbPOOR率 = Math.Round((100.0 * CDTXMania.stagePerfGuitarScreen.nHitCount_ExclAuto[i].Poor / n現在のノーツ数)); dbMISS率 = Math.Round((100.0 * CDTXMania.stagePerfGuitarScreen.nHitCount_ExclAuto[i].Miss / n現在のノーツ数)); dbMAXCOMBO率 = Math.Round((100.0 * CDTXMania.stagePerfGuitarScreen.actCombo.nCurrentCombo.HighestValue[i] / n現在のノーツ数)); } if (double.IsNaN(dbPERFECT率)) { dbPERFECT率 = 0; } if (double.IsNaN(dbGREAT率)) { dbGREAT率 = 0; } if (double.IsNaN(dbGOOD率)) { dbGOOD率 = 0; } if (double.IsNaN(dbPOOR率)) { dbPOOR率 = 0; } if (double.IsNaN(dbMISS率)) { dbMISS率 = 0; } if (double.IsNaN(dbMAXCOMBO率)) { dbMAXCOMBO率 = 0; } this.t小文字表示(167 + this.n本体X[i], 72 + this.n本体Y, string.Format("{0,3:##0}%", dbPERFECT率)); this.t小文字表示(167 + this.n本体X[i], 102 + this.n本体Y, string.Format("{0,3:##0}%", dbGREAT率)); this.t小文字表示(167 + this.n本体X[i], 132 + this.n本体Y, string.Format("{0,3:##0}%", dbGOOD率)); this.t小文字表示(167 + this.n本体X[i], 162 + this.n本体Y, string.Format("{0,3:##0}%", dbPOOR率)); this.t小文字表示(167 + this.n本体X[i], 192 + this.n本体Y, string.Format("{0,3:##0}%", dbMISS率)); this.t小文字表示(167 + this.n本体X[i], 222 + this.n本体Y, string.Format("{0,3:##0}%", dbMAXCOMBO率)); //this.tDrawStringLarge(58 + this.n本体X[ i ], 277 + this.n本体Y, string.Format( "{0,6:##0.00}", CDTXMania.stagePerfGuitarScreen.actStatusPanel.db現在の達成率.Guitar ) ); if (this.txSkillMax != null && CDTXMania.stagePerfDrumsScreen.actStatusPanel.db現在の達成率.Guitar >= 100.0) { this.txSkillMax.tDraw2D(CDTXMania.app.Device, 127 + this.n本体X[i], 277 + this.n本体Y); } else { this.t大文字表示(58 + this.n本体X[i], 277 + this.n本体Y, string.Format("{0,6:##0.00}", CDTXMania.stagePerfDrumsScreen.actStatusPanel.db現在の達成率.Guitar)); if (this.txPercent != null) { this.txPercent.tDraw2D(CDTXMania.app.Device, 217 + this.n本体X[i], 287 + this.n本体Y); } } if (bCLASSIC) { this.t大文字表示(88 + this.n本体X[i], 363 + this.n本体Y, string.Format("{0,6:##0.00}", CDTXMania.stagePerfGuitarScreen.actStatusPanel.db現在の達成率.Guitar * (CDTXMania.DTX.LEVEL[i]) * 0.0033)); } else { this.t大文字表示(88 + this.n本体X[i], 363 + this.n本体Y, string.Format("{0,6:##0.00}", CScoreIni.tCalculateGameSkillFromPlayingSkill(CDTXMania.DTX.LEVEL[i], CDTXMania.DTX.LEVELDEC[i], CDTXMania.stagePerfGuitarScreen.actStatusPanel.db現在の達成率.Guitar))); } if (this.tx難易度パネル != null) { this.tx難易度パネル.tDraw2D(CDTXMania.app.Device, 14 + this.n本体X[i], 266 + this.n本体Y, new Rectangle(base.rectDiffPanelPoint.X, base.rectDiffPanelPoint.Y, 60, 60)); } this.tレベル数字描画((bCLASSIC == true ? 26 : 18) + this.n本体X[i], 290 + this.n本体Y, str); } } } return(0); }
public override int On進行描画() { string str; if (base.b活性化してない) { return(0); } #region [ 初めての進行描画 ] //----------------------------- if (base.b初めての進行描画) { Cスコア cスコア1 = CDTXMania.stage選曲.r確定されたスコア; if (this.sd読み込み音 != null) { if (CDTXMania.Skin.sound曲読込開始音.b排他 && (CSkin.Cシステムサウンド.r最後に再生した排他システムサウンド != null)) { CSkin.Cシステムサウンド.r最後に再生した排他システムサウンド.t停止する(); } this.sd読み込み音.t再生を開始する(); this.nBGM再生開始時刻 = CSound管理.rc演奏用タイマ.n現在時刻; this.nBGMの総再生時間ms = this.sd読み込み音.n総演奏時間ms; } else { CDTXMania.Skin.sound曲読込開始音.t再生する(); this.nBGM再生開始時刻 = CSound管理.rc演奏用タイマ.n現在時刻; this.nBGMの総再生時間ms = CDTXMania.Skin.sound曲読込開始音.n長さ_現在のサウンド; } //this.actFI.tフェードイン開始(); // #27787 2012.3.10 yyagi 曲読み込み画面のフェードインの省略 base.eフェーズID = CStage.Eフェーズ.共通_フェードイン; base.b初めての進行描画 = false; nWAVcount = 1; bitmapFilename = new Bitmap(640, 24); graphicsFilename = Graphics.FromImage(bitmapFilename); graphicsFilename.TextRenderingHint = TextRenderingHint.AntiAlias; ftFilename = new Font("MS PGothic", 24f, FontStyle.Bold, GraphicsUnit.Pixel); } //----------------------------- #endregion this.ct待機.t進行(); #region [ ESC押下時は選曲画面に戻る ] if (tキー入力()) { if (this.sd読み込み音 != null) { this.sd読み込み音.tサウンドを停止する(); this.sd読み込み音.t解放する(); } return((int)E曲読込画面の戻り値.読込中止); } #endregion #region [ 背景、音符+タイトル表示 ] //----------------------------- this.ct曲名表示.t進行(); if (this.tx背景 != null) { this.tx背景.t2D描画(CDTXMania.app.Device, 0, 0); } //CDTXMania.act文字コンソール.tPrint( 0, 0, C文字コンソール.Eフォント種別.灰, this.ct曲名表示.n現在の値.ToString() ); if (this.txSongnamePlate != null) { this.txSongnamePlate.bスクリーン合成 = true; //あまりにも出番が無い this.txSongnamePlate.n透明度 = C変換.nParsentTo255((this.ct曲名表示.n現在の値 / 30.0)); this.txSongnamePlate.t2D描画(CDTXMania.app.Device, 640 - (this.txSongnamePlate.sz画像サイズ.Width / 2), 360 - (this.txSongnamePlate.sz画像サイズ.Height / 2)); } //CDTXMania.act文字コンソール.tPrint( 0, 16, C文字コンソール.Eフォント種別.灰, C変換.nParsentTo255( ( this.ct曲名表示.n現在の値 / 30.0 ) ).ToString() ); int y = 720 - 45; if (this.txタイトル != null) { int nサブタイトル補正 = string.IsNullOrEmpty(CDTXMania.stage選曲.r確定されたスコア.譜面情報.strサブタイトル) ? 15 : 0; this.txタイトル.n透明度 = C変換.nParsentTo255((this.ct曲名表示.n現在の値 / 30.0)); this.txタイトル.t2D描画(CDTXMania.app.Device, (640 - (this.txタイトル.sz画像サイズ.Width / 2)), 340 - (this.txタイトル.sz画像サイズ.Height / 2) + nサブタイトル補正); } if (this.txサブタイトル != null) { this.txサブタイトル.n透明度 = C変換.nParsentTo255((this.ct曲名表示.n現在の値 / 30.0)); this.txサブタイトル.t2D描画(CDTXMania.app.Device, (640 - (this.txサブタイトル.sz画像サイズ.Width / 2)), 390 - (this.txサブタイトル.sz画像サイズ.Height / 2)); } //----------------------------- #endregion switch (base.eフェーズID) { case CStage.Eフェーズ.共通_フェードイン: //if( this.actFI.On進行描画() != 0 ) // #27787 2012.3.10 yyagi 曲読み込み画面のフェードインの省略 // 必ず一度「CStaeg.Eフェーズ.共通_フェードイン」フェーズを経由させること。 // さもないと、曲読み込みが完了するまで、曲読み込み画面が描画されない。 base.eフェーズID = CStage.Eフェーズ.NOWLOADING_DTXファイルを読み込む; return((int)E曲読込画面の戻り値.継続); case CStage.Eフェーズ.NOWLOADING_DTXファイルを読み込む: { timeBeginLoad = DateTime.Now; TimeSpan span; str = null; if (!CDTXMania.bコンパクトモード) { str = CDTXMania.stage選曲.r確定されたスコア.ファイル情報.ファイルの絶対パス; } else { str = CDTXMania.strコンパクトモードファイル; } CScoreIni ini = new CScoreIni(str + ".score.ini"); ini.t全演奏記録セクションの整合性をチェックし不整合があればリセットする(); if ((CDTXMania.DTX != null) && CDTXMania.DTX.b活性化してる) { CDTXMania.DTX.On非活性化(); } //if( CDTXMania.DTX == null ) { CDTXMania.DTX = new CDTX(str, false, ((double)CDTXMania.ConfigIni.n演奏速度) / 20.0, ini.stファイル.BGMAdjust, 0, 0, true); if (CDTXMania.ConfigIni.nPlayerCount == 2) { CDTXMania.DTX_2P = new CDTX(str, false, ((double)CDTXMania.ConfigIni.n演奏速度) / 20.0, ini.stファイル.BGMAdjust, 0, 1, true); } if (File.Exists(CDTXMania.DTX.strフォルダ名 + @"\\set.def")) { CDTXMania.DTX = new CDTX(str, false, ((double)CDTXMania.ConfigIni.n演奏速度) / 20.0, ini.stファイル.BGMAdjust, 0, 1, true); if (CDTXMania.ConfigIni.nPlayerCount == 2) { CDTXMania.DTX_2P = new CDTX(str, false, ((double)CDTXMania.ConfigIni.n演奏速度) / 20.0, ini.stファイル.BGMAdjust, 0, 1, true); } } Trace.TraceInformation("----曲情報-----------------"); Trace.TraceInformation("TITLE: {0}", CDTXMania.DTX.TITLE); Trace.TraceInformation("FILE: {0}", CDTXMania.DTX.strファイル名の絶対パス); Trace.TraceInformation("---------------------------"); span = (TimeSpan)(DateTime.Now - timeBeginLoad); Trace.TraceInformation("DTX読込所要時間: {0}", span.ToString()); } //2017.01.28 DD Config.iniに反映しないように変更 /* * switch( CDTXMania.DTX.nScoreModeTmp ) * { * case 0: * CDTXMania.ConfigIni.nScoreMode = 0; * break; * case 1: * CDTXMania.ConfigIni.nScoreMode = 1; * break; * case 2: * CDTXMania.ConfigIni.nScoreMode = 2; * break; * case -1: * CDTXMania.ConfigIni.nScoreMode = 1; * break; * } */ base.eフェーズID = CStage.Eフェーズ.NOWLOADING_WAV読み込み待機; timeBeginLoadWAV = DateTime.Now; return((int)E曲読込画面の戻り値.継続); } case CStage.Eフェーズ.NOWLOADING_WAV読み込み待機: { if (this.ct待機.n現在の値 > 260) { base.eフェーズID = CStage.Eフェーズ.NOWLOADING_WAVファイルを読み込む; } return((int)E曲読込画面の戻り値.継続); } case CStage.Eフェーズ.NOWLOADING_WAVファイルを読み込む: { if (nWAVcount == 1 && CDTXMania.DTX.listWAV.Count > 0) // #28934 2012.7.7 yyagi (added checking Count) { ShowProgressByFilename(CDTXMania.DTX.listWAV[nWAVcount].strファイル名); } int looptime = (CDTXMania.ConfigIni.b垂直帰線待ちを行う)? 3 : 1; // VSyncWait=ON時は1frame(1/60s)あたり3つ読むようにする for (int i = 0; i < looptime && nWAVcount <= CDTXMania.DTX.listWAV.Count; i++) { if (CDTXMania.DTX.listWAV[nWAVcount].listこのWAVを使用するチャンネル番号の集合.Count > 0) // #28674 2012.5.8 yyagi { CDTXMania.DTX.tWAVの読み込み(CDTXMania.DTX.listWAV[nWAVcount]); } nWAVcount++; } if (nWAVcount <= CDTXMania.DTX.listWAV.Count) { ShowProgressByFilename(CDTXMania.DTX.listWAV[nWAVcount].strファイル名); } if (nWAVcount > CDTXMania.DTX.listWAV.Count) { TimeSpan span = ( TimeSpan )(DateTime.Now - timeBeginLoadWAV); Trace.TraceInformation("WAV読込所要時間({0,4}): {1}", CDTXMania.DTX.listWAV.Count, span.ToString()); timeBeginLoadWAV = DateTime.Now; if (CDTXMania.ConfigIni.bDynamicBassMixerManagement) { CDTXMania.DTX.PlanToAddMixerChannel(); } CDTXMania.DTX.t太鼓チップのランダム化(CDTXMania.ConfigIni.eRandom.Taiko); CDTXMania.stage演奏ドラム画面.On活性化(); span = (TimeSpan)(DateTime.Now - timeBeginLoadWAV); base.eフェーズID = CStage.Eフェーズ.NOWLOADING_BMPファイルを読み込む; } return((int)E曲読込画面の戻り値.継続); } case CStage.Eフェーズ.NOWLOADING_BMPファイルを読み込む: { TimeSpan span; DateTime timeBeginLoadBMPAVI = DateTime.Now; if (CDTXMania.ConfigIni.bAVI有効) { CDTXMania.DTX.tAVIの読み込み(); } span = ( TimeSpan )(DateTime.Now - timeBeginLoadBMPAVI); span = ( TimeSpan )(DateTime.Now - timeBeginLoad); Trace.TraceInformation("総読込時間: {0}", span.ToString()); if (bitmapFilename != null) { bitmapFilename.Dispose(); bitmapFilename = null; } if (graphicsFilename != null) { graphicsFilename.Dispose(); graphicsFilename = null; } if (ftFilename != null) { ftFilename.Dispose(); ftFilename = null; } CDTXMania.Timer.t更新(); //CSound管理.rc演奏用タイマ.t更新(); base.eフェーズID = CStage.Eフェーズ.NOWLOADING_システムサウンドBGMの完了を待つ; return((int)E曲読込画面の戻り値.継続); } case CStage.Eフェーズ.NOWLOADING_システムサウンドBGMの完了を待つ: { long nCurrentTime = CDTXMania.Timer.n現在時刻; if (nCurrentTime < this.nBGM再生開始時刻) { this.nBGM再生開始時刻 = nCurrentTime; } // if ( ( nCurrentTime - this.nBGM再生開始時刻 ) > ( this.nBGMの総再生時間ms - 1000 ) ) if ((nCurrentTime - this.nBGM再生開始時刻) >= (this.nBGMの総再生時間ms)) // #27787 2012.3.10 yyagi 1000ms == フェードイン分の時間 { if (!CDTXMania.DTXVmode.Enabled) { } base.eフェーズID = CStage.Eフェーズ.共通_フェードアウト; } return((int)E曲読込画面の戻り値.継続); } case CStage.Eフェーズ.共通_フェードアウト: if (this.ct待機.b終了値に達してない) // DTXVモード時は、フェードアウト省略 { return((int)E曲読込画面の戻り値.継続); } if (txFilename != null) { txFilename.Dispose(); } if (this.sd読み込み音 != null) { this.sd読み込み音.t解放する(); } return((int)E曲読込画面の戻り値.読込完了); } return((int)E曲読込画面の戻り値.継続); }
// CStage 実装 public override void On活性化() { Trace.TraceInformation("結果ステージを活性化します。"); Trace.Indent(); try { #region [ 初期化 ] //--------------------- this.eフェードアウト完了時の戻り値 = E戻り値.継続; this.bアニメが完了 = false; this.bIsCheckedWhetherResultScreenShouldSaveOrNot = false; // #24609 2011.3.14 yyagi this.n最後に再生したHHのWAV番号 = -1; this.n最後に再生したHHのチャンネル番号 = 0; for (int i = 0; i < 3; i++) { this.b新記録スキル[i] = false; this.b新記録スコア[i] = false; this.b新記録ランク[i] = false; } //--------------------- #endregion #region [ 結果の計算 ] //--------------------- for (int i = 0; i < 3; i++) { this.nランク値[i] = -1; this.fPerfect率[i] = this.fGreat率[i] = this.fGood率[i] = this.fPoor率[i] = this.fMiss率[i] = 0.0f; // #28500 2011.5.24 yyagi if ((((i != 0) || (TJAPlayer4.DTX[0].bチップがある.Drums)))) { CScoreIni.C演奏記録 part = this.st演奏記録[i]; bool bIsAutoPlay = true; switch (i) { case 0: bIsAutoPlay = TJAPlayer4.ConfigIni.bAutoPlay[0]; break; case 1: bIsAutoPlay = TJAPlayer4.ConfigIni.bAutoPlay[0]; break; case 2: bIsAutoPlay = TJAPlayer4.ConfigIni.bAutoPlay[0]; break; } this.fPerfect率[i] = bIsAutoPlay ? 0f : ((100f * part.nPerfect数[0]) / ((float)part.n全チップ数)); this.fGreat率[i] = bIsAutoPlay ? 0f : ((100f * part.nGreat数[0]) / ((float)part.n全チップ数)); this.fGood率[i] = bIsAutoPlay ? 0f : ((100f * part.nGood数[0]) / ((float)part.n全チップ数)); this.fPoor率[i] = bIsAutoPlay ? 0f : ((100f * part.nPoor数[0]) / ((float)part.n全チップ数)); this.fMiss率[i] = bIsAutoPlay ? 0f : ((100f * part.nMiss数[0]) / ((float)part.n全チップ数)); this.bオート[i] = bIsAutoPlay; // #23596 10.11.16 add ikanick そのパートがオートなら1 // 10.11.17 change (int to bool) ikanick this.nランク値[i] = CScoreIni.tランク値を計算して返す(part); } } //--------------------- #endregion #region [ .score.ini の作成と出力 ] //--------------------- string str = TJAPlayer4.DTX[0].strファイル名の絶対パス + ".score.ini"; CScoreIni ini = new CScoreIni(str); bool[] b今までにフルコンボしたことがある = new bool[] { false, false, false }; for (int i = 0; i < 3; i++) { // フルコンボチェックならびに新記録ランクチェックは、ini.Record[] が、スコアチェックや演奏型スキルチェックの IF 内で書き直されてしまうよりも前に行う。(2010.9.10) b今までにフルコンボしたことがある[i] = ini.stセクション[i * 2].bフルコンボである | ini.stセクション[i * 2 + 1].bフルコンボである; #region [deleted by #24459] // if( this.nランク値[ i ] <= CScoreIni.tランク値を計算して返す( ini.stセクション[ ( i * 2 ) + 1 ] ) ) // { // this.b新記録ランク[ i ] = true; // } #endregion // #24459 上記の条件だと[HiSkill.***]でのランクしかチェックしていないので、BestRankと比較するよう変更。 if (this.nランク値[i] >= 0 && ini.stファイル.BestRank[i] > this.nランク値[i]) // #24459 2011.3.1 yyagi update BestRank { this.b新記録ランク[i] = true; ini.stファイル.BestRank[i] = this.nランク値[i]; } // 新記録スコアチェック if ((this.st演奏記録[i].nスコア[0] > ini.stセクション[i * 2].nスコア[0]) && !TJAPlayer4.ConfigIni.bAutoPlay[0]) { this.b新記録スコア[i] = true; ini.stセクション[i * 2] = this.st演奏記録[i]; } // 新記録スキルチェック if (this.st演奏記録[i].db演奏型スキル値 > ini.stセクション[(i * 2) + 1].db演奏型スキル値) { this.b新記録スキル[i] = true; ini.stセクション[(i * 2) + 1] = this.st演奏記録[i]; } // ラストプレイ #23595 2011.1.9 ikanick // オートじゃなければプレイ結果を書き込む if (TJAPlayer4.ConfigIni.bAutoPlay[0] == false) { ini.stセクション[i + 6] = this.st演奏記録[i]; } // #23596 10.11.16 add ikanick オートじゃないならクリア回数を1増やす // 11.02.05 bオート to t更新条件を取得する use ikanick bool[] b更新が必要か否か = new bool[3]; CScoreIni.t更新条件を取得する(out b更新が必要か否か[0], out b更新が必要か否か[1], out b更新が必要か否か[2]); if (b更新が必要か否か[i]) { switch (i) { case 0: ini.stファイル.ClearCountDrums++; break; case 1: ini.stファイル.ClearCountGuitar++; break; case 2: ini.stファイル.ClearCountBass++; break; default: throw new Exception("クリア回数増加のk(0-2)が範囲外です。"); } } //---------------------------------------------------------------------/ } if (TJAPlayer4.ConfigIni.bScoreIniを出力する) { ini.t書き出し(str); } //--------------------- #endregion #region [ リザルト画面への演奏回数の更新 #24281 2011.1.30 yyagi] if (TJAPlayer4.ConfigIni.bScoreIniを出力する) { this.n演奏回数.Drums = ini.stファイル.PlayCountDrums; this.n演奏回数.Guitar = ini.stファイル.PlayCountGuitar; this.n演奏回数.Bass = ini.stファイル.PlayCountBass; } #endregion #region [ 選曲画面の譜面情報の更新 ] //--------------------- if (!TJAPlayer4.bコンパクトモード) { Cスコア cスコア = TJAPlayer4.stage選曲.r確定されたスコア; bool[] b更新が必要か否か = new bool[3]; CScoreIni.t更新条件を取得する(out b更新が必要か否か[0], out b更新が必要か否か[1], out b更新が必要か否か[2]); for (int m = 0; m < 3; m++) { if (b更新が必要か否か[m]) { // FullCombo した記録を FullCombo なしで超えた場合、FullCombo マークが消えてしまう。 // → FullCombo は、最新記録と関係なく、一度達成したらずっとつくようにする。(2010.9.11) cスコア.譜面情報.フルコンボ[m] = this.st演奏記録[m].bフルコンボである | b今までにフルコンボしたことがある[m]; if (this.b新記録スキル[m]) { cスコア.譜面情報.最大スキル[m] = this.st演奏記録[m].db演奏型スキル値; } if (this.b新記録ランク[m]) { cスコア.譜面情報.最大ランク[m] = this.nランク値[m]; } } } } //--------------------- #endregion // Discord Presenseの更新 Discord.UpdatePresence(TJAPlayer4.DTX[0].TITLE + ".tja", Properties.Discord.Stage_Result + (TJAPlayer4.ConfigIni.bAutoPlay[0] == true ? " (" + Properties.Discord.Info_IsAuto + ")" : ""), TJAPlayer4.StartupTime); base.On活性化(); } finally { Trace.TraceInformation("結果ステージの活性化を完了しました。"); Trace.Unindent(); } }
public override int OnUpdateAndDraw() { if (!base.bNotActivated) { double dbPERFECT率 = 0; double dbGREAT率 = 0; double dbGOOD率 = 0; double dbPOOR率 = 0; double dbMISS率 = 0; double dbMAXCOMBO率 = 0; int i = 0; string str = string.Format("{0:0.00}", ((float)CDTXMania.DTX.LEVEL[i]) / 10.0f + (CDTXMania.DTX.LEVELDEC[i] != 0 ? CDTXMania.DTX.LEVELDEC[i] / 100.0f : 0)); bool bCLASSIC = false; //If Skill Mode is CLASSIC, always display lvl as Classic Style if (CDTXMania.ConfigIni.nSkillMode == 0 || (CDTXMania.ConfigIni.bCLASSIC譜面判別を有効にする && (CDTXMania.DTX.bチップがある.LeftCymbal == false) && (CDTXMania.DTX.bチップがある.LP == false) && (CDTXMania.DTX.bチップがある.LBD == false) && (CDTXMania.DTX.bチップがある.FT == false) && (CDTXMania.DTX.bチップがある.Ride == false) && (CDTXMania.DTX.b強制的にXG譜面にする == false))) { str = string.Format("{0:00}", CDTXMania.DTX.LEVEL[i]); bCLASSIC = true; } this.txスキルパネル.tDraw2D(CDTXMania.app.Device, this.n本体X[i], this.n本体Y); this.txネームプレート用文字.tDraw2D(CDTXMania.app.Device, this.n本体X[i], this.n本体Y); this.t小文字表示(80 + this.n本体X[i], 72 + this.n本体Y, string.Format("{0,4:###0}", CDTXMania.stagePerfDrumsScreen.nHitCount_ExclAuto[i].Perfect)); this.t小文字表示(80 + this.n本体X[i], 102 + this.n本体Y, string.Format("{0,4:###0}", CDTXMania.stagePerfDrumsScreen.nHitCount_ExclAuto[i].Great)); this.t小文字表示(80 + this.n本体X[i], 132 + this.n本体Y, string.Format("{0,4:###0}", CDTXMania.stagePerfDrumsScreen.nHitCount_ExclAuto[i].Good)); this.t小文字表示(80 + this.n本体X[i], 162 + this.n本体Y, string.Format("{0,4:###0}", CDTXMania.stagePerfDrumsScreen.nHitCount_ExclAuto[i].Poor)); this.t小文字表示(80 + this.n本体X[i], 192 + this.n本体Y, string.Format("{0,4:###0}", CDTXMania.stagePerfDrumsScreen.nHitCount_ExclAuto[i].Miss)); this.t小文字表示(80 + this.n本体X[i], 222 + this.n本体Y, string.Format("{0,4:###0}", CDTXMania.stagePerfDrumsScreen.actCombo.nCurrentCombo.HighestValue[i])); int n現在のノーツ数 = CDTXMania.stagePerfDrumsScreen.nHitCount_IncAuto[i].Perfect + CDTXMania.stagePerfDrumsScreen.nHitCount_IncAuto[i].Great + CDTXMania.stagePerfDrumsScreen.nHitCount_IncAuto[i].Good + CDTXMania.stagePerfDrumsScreen.nHitCount_IncAuto[i].Poor + CDTXMania.stagePerfDrumsScreen.nHitCount_IncAuto[i].Miss; if (CDTXMania.stagePerfDrumsScreen.bIsTrainingMode) { CDTXMania.stagePerfDrumsScreen.actStatusPanel.db現在の達成率.Drums = 0; } else { dbPERFECT率 = Math.Round((100.0 * CDTXMania.stagePerfDrumsScreen.nHitCount_ExclAuto[i].Perfect) / n現在のノーツ数); dbGREAT率 = Math.Round((100.0 * CDTXMania.stagePerfDrumsScreen.nHitCount_ExclAuto[i].Great / n現在のノーツ数)); dbGOOD率 = Math.Round((100.0 * CDTXMania.stagePerfDrumsScreen.nHitCount_ExclAuto[i].Good / n現在のノーツ数)); dbPOOR率 = Math.Round((100.0 * CDTXMania.stagePerfDrumsScreen.nHitCount_ExclAuto[i].Poor / n現在のノーツ数)); dbMISS率 = Math.Round((100.0 * CDTXMania.stagePerfDrumsScreen.nHitCount_ExclAuto[i].Miss / n現在のノーツ数)); dbMAXCOMBO率 = Math.Round((100.0 * CDTXMania.stagePerfDrumsScreen.actCombo.nCurrentCombo.HighestValue[i] / n現在のノーツ数)); } if (double.IsNaN(dbPERFECT率)) { dbPERFECT率 = 0; } if (double.IsNaN(dbGREAT率)) { dbGREAT率 = 0; } if (double.IsNaN(dbGOOD率)) { dbGOOD率 = 0; } if (double.IsNaN(dbPOOR率)) { dbPOOR率 = 0; } if (double.IsNaN(dbMISS率)) { dbMISS率 = 0; } if (double.IsNaN(dbMAXCOMBO率)) { dbMAXCOMBO率 = 0; } this.t小文字表示(167 + this.n本体X[i], 72 + this.n本体Y, string.Format("{0,3:##0}%", dbPERFECT率)); this.t小文字表示(167 + this.n本体X[i], 102 + this.n本体Y, string.Format("{0,3:##0}%", dbGREAT率)); this.t小文字表示(167 + this.n本体X[i], 132 + this.n本体Y, string.Format("{0,3:##0}%", dbGOOD率)); this.t小文字表示(167 + this.n本体X[i], 162 + this.n本体Y, string.Format("{0,3:##0}%", dbPOOR率)); this.t小文字表示(167 + this.n本体X[i], 192 + this.n本体Y, string.Format("{0,3:##0}%", dbMISS率)); this.t小文字表示(167 + this.n本体X[i], 222 + this.n本体Y, string.Format("{0,3:##0}%", dbMAXCOMBO率)); //this.tDrawStringLarge(58 + this.n本体X[i], 277 + this.n本体Y, string.Format("{0,6:##0.00}", CDTXMania.stagePerfDrumsScreen.actStatusPanel.db現在の達成率.Drums ) ); //Conditional checks for MAX if (this.txSkillMax != null && CDTXMania.stagePerfDrumsScreen.actStatusPanel.db現在の達成率.Drums >= 100.0) { this.txSkillMax.tDraw2D(CDTXMania.app.Device, 127 + this.n本体X[i], 277 + this.n本体Y); } else { this.t大文字表示(58 + this.n本体X[i], 277 + this.n本体Y, string.Format("{0,6:##0.00}", CDTXMania.stagePerfDrumsScreen.actStatusPanel.db現在の達成率.Drums)); if (this.txPercent != null) { this.txPercent.tDraw2D(CDTXMania.app.Device, 217 + this.n本体X[i], 287 + this.n本体Y); } } //Draw Lag Counters if Lag Display is on if (CDTXMania.ConfigIni.bShowLagHitCount) { //Type-A is Early-Blue, Late-Red bool bTypeAColor = CDTXMania.ConfigIni.nShowLagTypeColor == 0; this.tDrawLagCounterText(this.n本体X[i] + 170, this.n本体Y + 335, string.Format("{0,4:###0}", CDTXMania.stagePerfDrumsScreen.nTimingHitCount[i].nEarly), !bTypeAColor); this.tDrawLagCounterText(this.n本体X[i] + 245, this.n本体Y + 335, string.Format("{0,4:###0}", CDTXMania.stagePerfDrumsScreen.nTimingHitCount[i].nLate), bTypeAColor); } if (bCLASSIC) { this.t大文字表示(88 + this.n本体X[i], 363 + this.n本体Y, string.Format("{0,6:##0.00}", CDTXMania.stagePerfDrumsScreen.actStatusPanel.db現在の達成率.Drums * (CDTXMania.DTX.LEVEL[i] * 0.0033))); } else { this.t大文字表示(88 + this.n本体X[i], 363 + this.n本体Y, string.Format("{0,6:##0.00}", CScoreIni.tCalculateGameSkillFromPlayingSkill(CDTXMania.DTX.LEVEL[i], CDTXMania.DTX.LEVELDEC[i], CDTXMania.stagePerfDrumsScreen.actStatusPanel.db現在の達成率.Drums))); } if (this.tx難易度パネル != null) { this.tx難易度パネル.tDraw2D(CDTXMania.app.Device, 14 + this.n本体X[i], 266 + this.n本体Y, new Rectangle(base.rectDiffPanelPoint.X, base.rectDiffPanelPoint.Y, 60, 60)); } this.tレベル数字描画((bCLASSIC == true ? 26 : 18) + this.n本体X[i], 290 + this.n本体Y, str); } return(0); }
// CStage 実装 public override void OnActivate() { Trace.TraceInformation("結果ステージを活性化します。"); Trace.Indent(); try { #region [ Initialize ] //--------------------- this.eReturnValueWhenFadeOutCompleted = EReturnValue.Continue; this.bAnimationComplete = false; this.bIsCheckedWhetherResultScreenShouldSaveOrNot = false; // #24609 2011.3.14 yyagi this.n最後に再生したHHのWAV番号 = -1; this.n最後に再生したHHのチャンネル番号 = 0; for (int i = 0; i < 3; i++) { this.bNewRecordSkill[i] = false; this.bNewRecordScore[i] = false; this.bNewRecordRank[i] = false; } //--------------------- #endregion if (CDTXMania.ConfigIni.bScoreIniを出力する && !bIsTrainingMode && (CDTXMania.ConfigIni.bSaveScoreIfModifiedPlaySpeed || CDTXMania.ConfigIni.nPlaySpeed == 20)) { #region [ Calculate results ] //--------------------- for (int i = 0; i < 3; i++) { this.nRankValue[i] = -1; this.fPerfect率[i] = this.fGreat率[i] = this.fGood率[i] = this.fPoor率[i] = this.fMiss率[i] = 0.0f; // #28500 2011.5.24 yyagi if ((((i != 0) || (CDTXMania.DTX.bチップがある.Drums && !CDTXMania.ConfigIni.bGuitarRevolutionMode)) && ((i != 1) || (CDTXMania.DTX.bチップがある.Guitar && CDTXMania.ConfigIni.bGuitarRevolutionMode))) && ((i != 2) || (CDTXMania.DTX.bチップがある.Bass && CDTXMania.ConfigIni.bGuitarRevolutionMode))) { CScoreIni.CPerformanceEntry part = this.stPerformanceEntry[i]; bool bIsAutoPlay = true; switch (i) { case 0: bIsAutoPlay = CDTXMania.ConfigIni.bAllDrumsAreAutoPlay; break; case 1: bIsAutoPlay = CDTXMania.ConfigIni.bAllGuitarsAreAutoPlay; break; case 2: bIsAutoPlay = CDTXMania.ConfigIni.bAllBassAreAutoPlay; break; } this.fPerfect率[i] = bIsAutoPlay ? 0f : ((100f * part.nPerfectCount) / ((float)part.nTotalChipsCount)); this.fGreat率[i] = bIsAutoPlay ? 0f : ((100f * part.nGreatCount) / ((float)part.nTotalChipsCount)); this.fGood率[i] = bIsAutoPlay ? 0f : ((100f * part.nGoodCount) / ((float)part.nTotalChipsCount)); this.fPoor率[i] = bIsAutoPlay ? 0f : ((100f * part.nPoorCount) / ((float)part.nTotalChipsCount)); this.fMiss率[i] = bIsAutoPlay ? 0f : ((100f * part.nMissCount) / ((float)part.nTotalChipsCount)); this.bAuto[i] = bIsAutoPlay; // #23596 10.11.16 add ikanick そのパートがオートなら1 // 10.11.17 change (int to bool) ikanick //18072020: Change first condition check to 1, XG mode is 1, not 0. Fisyher if (CDTXMania.ConfigIni.nSkillMode == 1) { this.nRankValue[i] = CScoreIni.tCalculateRank(part); } else if (CDTXMania.ConfigIni.nSkillMode == 0) { this.nRankValue[i] = CScoreIni.tCalculateRankOld(part); } //Save progress bar records CScore cScore = CDTXMania.stageSongSelection.rChosenScore; this.strBestProgressBarRecord[i] = cScore.SongInformation.progress[i]; //May not need to save this... this.strCurrProgressBarRecord[i] = this.stPerformanceEntry[i].strProgress; } } this.n総合ランク値 = CScoreIni.tCalculateOverallRankValue(this.stPerformanceEntry.Drums, this.stPerformanceEntry.Guitar, this.stPerformanceEntry.Bass); //--------------------- #endregion #region [ Write .score.ini ] //--------------------- string str = CDTXMania.DTX.strファイル名の絶対パス + ".score.ini"; CScoreIni ini = new CScoreIni(str); bool[] b今までにフルコンボしたことがある = new bool[] { false, false, false }; if (!CDTXMania.ConfigIni.bAllDrumsAreAutoPlay || !CDTXMania.ConfigIni.bAllGuitarsAreAutoPlay || !CDTXMania.ConfigIni.bAllBassAreAutoPlay) { for (int i = 0; i < 3; i++) { // フルコンボチェックならびに新記録ランクチェックは、ini.Record[] が、スコアチェックや演奏型スキルチェックの IF 内で書き直されてしまうよりも前に行う。(2010.9.10) b今までにフルコンボしたことがある[i] = ini.stSection[i * 2].bIsFullCombo | ini.stSection[i * 2 + 1].bIsFullCombo; #region [deleted by #24459] // if( this.nRankValue[ i ] <= CScoreIni.tCalculateRank( ini.stSection[ ( i * 2 ) + 1 ] ) ) // { // this.bNewRecordRank[ i ] = true; // } #endregion // #24459 上記の条件だと[HiSkill.***]でのランクしかチェックしていないので、BestRankと比較するよう変更。 if (this.nRankValue[i] >= 0 && ini.stFile.BestRank[i] > this.nRankValue[i]) // #24459 2011.3.1 yyagi update BestRank { this.bNewRecordRank[i] = true; ini.stFile.BestRank[i] = this.nRankValue[i]; } // 新記録スコアチェック if (this.stPerformanceEntry[i].nスコア > ini.stSection[i * 2].nスコア) { this.bNewRecordScore[i] = true; ini.stSection[i * 2] = this.stPerformanceEntry[i]; this.SaveGhost(i * 2); // #35411 chnmr0 add } // 新記録スキルチェック if ((this.stPerformanceEntry[i].dbPerformanceSkill > ini.stSection[(i * 2) + 1].dbPerformanceSkill) && !this.bAuto[i]) { this.bNewRecordSkill[i] = true; ini.stSection[(i * 2) + 1] = this.stPerformanceEntry[i]; this.SaveGhost((i * 2) + 1); // #35411 chnmr0 add } // ラストプレイ #23595 2011.1.9 ikanick // オートじゃなければプレイ結果を書き込む if (this.bAuto[i] == false) { ini.stSection[i + 6] = this.stPerformanceEntry[i]; this.SaveGhost(i + 6); // #35411 chnmr0 add } // #23596 10.11.16 add ikanick オートじゃないならクリア回数を1増やす // 11.02.05 bAuto to tGetIsUpdateNeeded use ikanick bool[] b更新が必要か否か = new bool[3]; CScoreIni.tGetIsUpdateNeeded(out b更新が必要か否か[0], out b更新が必要か否か[1], out b更新が必要か否か[2]); if (b更新が必要か否か[i]) { switch (i) { case 0: ini.stFile.ClearCountDrums++; break; case 1: ini.stFile.ClearCountGuitar++; break; case 2: ini.stFile.ClearCountBass++; break; default: throw new Exception("クリア回数増加のk(0-2)が範囲外です。"); } } //---------------------------------------------------------------------/ } // Already checked //if (CDTXMania.ConfigIni.bScoreIniを出力する) { ini.tExport(str); } } //--------------------- #endregion #region [ Update nb of performance #24281 2011.1.30 yyagi] this.nNbPerformances.Drums = ini.stFile.PlayCountDrums; this.nNbPerformances.Guitar = ini.stFile.PlayCountGuitar; this.nNbPerformances.Bass = ini.stFile.PlayCountBass; #endregion #region [ Update score information on Song Selection screen ] //--------------------- if (!CDTXMania.bCompactMode) { CScore cScore = CDTXMania.stageSongSelection.rChosenScore; bool[] b更新が必要か否か = new bool[3]; CScoreIni.tGetIsUpdateNeeded(out b更新が必要か否か[0], out b更新が必要か否か[1], out b更新が必要か否か[2]); for (int m = 0; m < 3; m++) { if (b更新が必要か否か[m]) { // FullCombo した記録を FullCombo なしで超えた場合、FullCombo マークが消えてしまう。 // → FullCombo は、最新記録と関係なく、一度達成したらずっとつくようにする。(2010.9.11) cScore.SongInformation.FullCombo[m] = this.stPerformanceEntry[m].bIsFullCombo | b今までにフルコンボしたことがある[m]; if (this.bNewRecordSkill[m]) { cScore.SongInformation.HighSkill[m] = this.stPerformanceEntry[m].dbPerformanceSkill; // New Song Progress for new skill record cScore.SongInformation.progress[m] = this.stPerformanceEntry[m].strProgress; } if (this.bNewRecordRank[m]) { cScore.SongInformation.BestRank[m] = this.nRankValue[m]; } //Check if Progress record existed or not; if not, update anyway if (CScoreIni.tProgressBarLength(cScore.SongInformation.progress[m]) == 0) { cScore.SongInformation.progress[m] = this.stPerformanceEntry[m].strProgress; } } } } //--------------------- #endregion } base.OnActivate(); //this.actProgressBar.t表示レイアウトを設定する(180, 540, 20, 460); //this.actProgressBar.t演奏記録から区間情報を設定する(st演奏記録); } finally { Trace.TraceInformation("結果ステージの活性化を完了しました。"); Trace.Unindent(); } }
public override int On進行描画() { string str; if (base.b活性化してない) { return(0); } #region [ 初めての進行描画 ] //----------------------------- if (base.b初めての進行描画) { Cスコア cスコア1 = TJAPlayer4.stage選曲.r確定されたスコア; if (this.sd読み込み音 != null) { if (TJAPlayer4.Skin.sound曲読込開始音.b排他 && (CSkin.Cシステムサウンド.r最後に再生した排他システムサウンド != null)) { CSkin.Cシステムサウンド.r最後に再生した排他システムサウンド.t停止する(); } this.sd読み込み音.t再生を開始する(); this.nBGM再生開始時刻 = CSound管理.rc演奏用タイマ.n現在時刻; this.nBGMの総再生時間ms = this.sd読み込み音.n総演奏時間ms; } else { TJAPlayer4.Skin.sound曲読込開始音.t再生する(); this.nBGM再生開始時刻 = CSound管理.rc演奏用タイマ.n現在時刻; this.nBGMの総再生時間ms = TJAPlayer4.Skin.sound曲読込開始音.n長さ_現在のサウンド; } //this.actFI.tフェードイン開始(); // #27787 2012.3.10 yyagi 曲読み込み画面のフェードインの省略 base.eフェーズID = CStage.Eフェーズ.共通_フェードイン; base.b初めての進行描画 = false; nWAVcount = 1; bitmapFilename = new Bitmap(640, 24); graphicsFilename = Graphics.FromImage(bitmapFilename); graphicsFilename.TextRenderingHint = TextRenderingHint.AntiAlias; ftFilename = new Font("MS UI Gothic", 24f, FontStyle.Bold, GraphicsUnit.Pixel); } //----------------------------- #endregion this.ct待機.t進行(); #region [ ESC押下時は選曲画面に戻る ] if (tキー入力()) { if (this.sd読み込み音 != null) { this.sd読み込み音.tサウンドを停止する(); this.sd読み込み音.t解放する(); } return((int)E曲読込画面の戻り値.読込中止); } #endregion #region [ 背景、音符+タイトル表示 ] //----------------------------- this.ct曲名表示.t進行(); if (this.tx背景 != null) { this.tx背景.t2D描画(TJAPlayer4.app.Device, 0, 0); } //CDTXMania.act文字コンソール.tPrint( 0, 0, C文字コンソール.Eフォント種別.灰, this.ct曲名表示.n現在の値.ToString() ); if (TJAPlayer4.Tx.SongLoading_Plate != null) { TJAPlayer4.Tx.SongLoading_Plate.bスクリーン合成 = TJAPlayer4.Skin.SongLoading_Plate_ScreenBlend; //あまりにも出番が無い TJAPlayer4.Tx.SongLoading_Plate.Opacity = C変換.nParsentTo255((this.ct曲名表示.n現在の値 / 30.0)); if (TJAPlayer4.Skin.SongLoading_Plate_ReferencePoint == CSkin.ReferencePoint.Left) { TJAPlayer4.Tx.SongLoading_Plate.t2D描画(TJAPlayer4.app.Device, TJAPlayer4.Skin.SongLoading_Plate_X, TJAPlayer4.Skin.SongLoading_Plate_Y - (TJAPlayer4.Tx.SongLoading_Plate.sz画像サイズ.Height / 2)); } else if (TJAPlayer4.Skin.SongLoading_Plate_ReferencePoint == CSkin.ReferencePoint.Right) { TJAPlayer4.Tx.SongLoading_Plate.t2D描画(TJAPlayer4.app.Device, TJAPlayer4.Skin.SongLoading_Plate_X - TJAPlayer4.Tx.SongLoading_Plate.sz画像サイズ.Width, TJAPlayer4.Skin.SongLoading_Plate_Y - (TJAPlayer4.Tx.SongLoading_Plate.sz画像サイズ.Height / 2)); } else { TJAPlayer4.Tx.SongLoading_Plate.t2D描画(TJAPlayer4.app.Device, TJAPlayer4.Skin.SongLoading_Plate_X - (TJAPlayer4.Tx.SongLoading_Plate.sz画像サイズ.Width / 2), TJAPlayer4.Skin.SongLoading_Plate_Y - (TJAPlayer4.Tx.SongLoading_Plate.sz画像サイズ.Height / 2)); } } //CDTXMania.act文字コンソール.tPrint( 0, 16, C文字コンソール.Eフォント種別.灰, C変換.nParsentTo255( ( this.ct曲名表示.n現在の値 / 30.0 ) ).ToString() ); int y = 720 - 45; if (this.txタイトル != null) { int nサブタイトル補正 = string.IsNullOrEmpty(TJAPlayer4.stage選曲.r確定されたスコア.譜面情報.strサブタイトル) ? 15 : 0; this.txタイトル.Opacity = C変換.nParsentTo255((this.ct曲名表示.n現在の値 / 30.0)); if (TJAPlayer4.Skin.SongLoading_Title_ReferencePoint == CSkin.ReferencePoint.Left) { this.txタイトル.t2D描画(TJAPlayer4.app.Device, TJAPlayer4.Skin.SongLoading_Title_X, TJAPlayer4.Skin.SongLoading_Title_Y - (this.txタイトル.sz画像サイズ.Height / 2) + nサブタイトル補正); } else if (TJAPlayer4.Skin.SongLoading_Title_ReferencePoint == CSkin.ReferencePoint.Right) { this.txタイトル.t2D描画(TJAPlayer4.app.Device, TJAPlayer4.Skin.SongLoading_Title_X - (this.txタイトル.sz画像サイズ.Width * txタイトル.vc拡大縮小倍率.X), TJAPlayer4.Skin.SongLoading_Title_Y - (this.txタイトル.sz画像サイズ.Height / 2) + nサブタイトル補正); } else { this.txタイトル.t2D描画(TJAPlayer4.app.Device, (TJAPlayer4.Skin.SongLoading_Title_X - ((this.txタイトル.sz画像サイズ.Width * txタイトル.vc拡大縮小倍率.X) / 2)), TJAPlayer4.Skin.SongLoading_Title_Y - (this.txタイトル.sz画像サイズ.Height / 2) + nサブタイトル補正); } } if (this.txサブタイトル != null) { this.txサブタイトル.Opacity = C変換.nParsentTo255((this.ct曲名表示.n現在の値 / 30.0)); if (TJAPlayer4.Skin.SongLoading_SubTitle_ReferencePoint == CSkin.ReferencePoint.Left) { this.txサブタイトル.t2D描画(TJAPlayer4.app.Device, TJAPlayer4.Skin.SongLoading_SubTitle_X, TJAPlayer4.Skin.SongLoading_SubTitle_Y - (this.txサブタイトル.sz画像サイズ.Height / 2)); } else if (TJAPlayer4.Skin.SongLoading_Title_ReferencePoint == CSkin.ReferencePoint.Right) { this.txサブタイトル.t2D描画(TJAPlayer4.app.Device, TJAPlayer4.Skin.SongLoading_SubTitle_X - (this.txサブタイトル.sz画像サイズ.Width * txタイトル.vc拡大縮小倍率.X), TJAPlayer4.Skin.SongLoading_SubTitle_Y - (this.txサブタイトル.sz画像サイズ.Height / 2)); } else { this.txサブタイトル.t2D描画(TJAPlayer4.app.Device, (TJAPlayer4.Skin.SongLoading_SubTitle_X - ((this.txサブタイトル.sz画像サイズ.Width * txサブタイトル.vc拡大縮小倍率.X) / 2)), TJAPlayer4.Skin.SongLoading_SubTitle_Y - (this.txサブタイトル.sz画像サイズ.Height / 2)); } } //----------------------------- #endregion switch (base.eフェーズID) { case CStage.Eフェーズ.共通_フェードイン: //if( this.actFI.On進行描画() != 0 ) // #27787 2012.3.10 yyagi 曲読み込み画面のフェードインの省略 // 必ず一度「CStaeg.Eフェーズ.共通_フェードイン」フェーズを経由させること。 // さもないと、曲読み込みが完了するまで、曲読み込み画面が描画されない。 base.eフェーズID = CStage.Eフェーズ.NOWLOADING_DTXファイルを読み込む; return((int)E曲読込画面の戻り値.継続); case CStage.Eフェーズ.NOWLOADING_DTXファイルを読み込む: { timeBeginLoad = DateTime.Now; TimeSpan span; str = null; if (!TJAPlayer4.bコンパクトモード) { str = TJAPlayer4.stage選曲.r確定されたスコア.ファイル情報.ファイルの絶対パス; } else { str = TJAPlayer4.strコンパクトモードファイル; } CScoreIni ini = new CScoreIni(str + ".score.ini"); ini.t全演奏記録セクションの整合性をチェックし不整合があればリセットする(); if ((TJAPlayer4.DTX[0] != null) && TJAPlayer4.DTX[0].b活性化してる) { TJAPlayer4.DTX[0].On非活性化(); } //if( CDTXMania.DTX == null ) { TJAPlayer4.DTX[0] = new CDTX(str, false, 1.0, ini.stファイル.BGMAdjust, 0, 0, true); if (TJAPlayer4.ConfigIni.nPlayerCount == 2) { TJAPlayer4.DTX[1] = new CDTX(str, false, 1.0, ini.stファイル.BGMAdjust, 0, 1, true); } if (File.Exists(TJAPlayer4.DTX[0].strフォルダ名 + @"\\set.def")) { TJAPlayer4.DTX[0] = new CDTX(str, false, 1.0, ini.stファイル.BGMAdjust, 0, 1, true); if (TJAPlayer4.ConfigIni.nPlayerCount == 2) { TJAPlayer4.DTX[1] = new CDTX(str, false, 1.0, ini.stファイル.BGMAdjust, 0, 1, true); } } Trace.TraceInformation("----曲情報-----------------"); Trace.TraceInformation("TITLE: {0}", TJAPlayer4.DTX[0].TITLE); Trace.TraceInformation("FILE: {0}", TJAPlayer4.DTX[0].strファイル名の絶対パス); Trace.TraceInformation("---------------------------"); span = (TimeSpan)(DateTime.Now - timeBeginLoad); Trace.TraceInformation("DTX読込所要時間: {0}", span.ToString()); // 段位認定モード用。 if (TJAPlayer4.stage選曲.n確定された曲の難易度[0] == (int)Difficulty.Dan && TJAPlayer4.DTX[0].List_DanSongs != null) { var pfTitle = new CPrivateFont(); var pfSubTitle = new CPrivateFont(); if (!string.IsNullOrEmpty(TJAPlayer4.ConfigIni.FontName)) { pfTitle = new CPrivateFont(new FontFamily(TJAPlayer4.ConfigIni.FontName), 30); pfSubTitle = new CPrivateFont(new FontFamily(TJAPlayer4.ConfigIni.FontName), 22); } else { pfTitle = new CPrivateFont(new FontFamily("MS UI Gothic"), 30); pfSubTitle = new CPrivateFont(new FontFamily("MS UI Gothic"), 22); } var titleForeColor = TJAPlayer4.Skin.Game_DanC_Title_ForeColor; var titleBackColor = TJAPlayer4.Skin.Game_DanC_Title_BackColor; var subtitleForeColor = TJAPlayer4.Skin.Game_DanC_SubTitle_ForeColor; var subtitleBackColor = TJAPlayer4.Skin.Game_DanC_SubTitle_BackColor; for (int i = 0; i < TJAPlayer4.DTX[0].List_DanSongs.Count; i++) { if (!string.IsNullOrEmpty(TJAPlayer4.DTX[0].List_DanSongs[i].Title)) { using (var bmpSongTitle = pfTitle.DrawPrivateFont(TJAPlayer4.DTX[0].List_DanSongs[i].Title, titleForeColor, titleBackColor)) { TJAPlayer4.DTX[0].List_DanSongs[i].TitleTex = TJAPlayer4.tテクスチャの生成(bmpSongTitle, false); TJAPlayer4.DTX[0].List_DanSongs[i].TitleTex.vc拡大縮小倍率.X = TJAPlayer4.GetSongNameXScaling(ref TJAPlayer4.DTX[0].List_DanSongs[i].TitleTex, 710); } } if (!string.IsNullOrEmpty(TJAPlayer4.DTX[0].List_DanSongs[i].SubTitle)) { using (var bmpSongSubTitle = pfSubTitle.DrawPrivateFont(TJAPlayer4.DTX[0].List_DanSongs[i].SubTitle, subtitleForeColor, subtitleBackColor)) { TJAPlayer4.DTX[0].List_DanSongs[i].SubTitleTex = TJAPlayer4.tテクスチャの生成(bmpSongSubTitle, false); TJAPlayer4.DTX[0].List_DanSongs[i].SubTitleTex.vc拡大縮小倍率.X = TJAPlayer4.GetSongNameXScaling(ref TJAPlayer4.DTX[0].List_DanSongs[i].SubTitleTex, 710); } } } pfTitle?.Dispose(); pfSubTitle?.Dispose(); } } //2017.01.28 DD Config.iniに反映しないように変更 /* * switch( CDTXMania.DTX.nScoreModeTmp ) * { * case 0: * CDTXMania.ConfigIni.nScoreMode = 0; * break; * case 1: * CDTXMania.ConfigIni.nScoreMode = 1; * break; * case 2: * CDTXMania.ConfigIni.nScoreMode = 2; * break; * case -1: * CDTXMania.ConfigIni.nScoreMode = 1; * break; * } */ base.eフェーズID = CStage.Eフェーズ.NOWLOADING_WAV読み込み待機; timeBeginLoadWAV = DateTime.Now; return((int)E曲読込画面の戻り値.継続); } case CStage.Eフェーズ.NOWLOADING_WAV読み込み待機: { if (this.ct待機.n現在の値 > 260) { base.eフェーズID = CStage.Eフェーズ.NOWLOADING_WAVファイルを読み込む; } return((int)E曲読込画面の戻り値.継続); } case CStage.Eフェーズ.NOWLOADING_WAVファイルを読み込む: { if (nWAVcount == 1 && TJAPlayer4.DTX[0].listWAV.Count > 0) // #28934 2012.7.7 yyagi (added checking Count) { ShowProgressByFilename(TJAPlayer4.DTX[0].listWAV[nWAVcount].strファイル名); } int looptime = (TJAPlayer4.ConfigIni.b垂直帰線待ちを行う)? 3 : 1; // VSyncWait=ON時は1frame(1/60s)あたり3つ読むようにする for (int i = 0; i < looptime && nWAVcount <= TJAPlayer4.DTX[0].listWAV.Count; i++) { if (TJAPlayer4.DTX[0].listWAV[nWAVcount].listこのWAVを使用するチャンネル番号の集合.Count > 0) // #28674 2012.5.8 yyagi { TJAPlayer4.DTX[0].tWAVの読み込み(TJAPlayer4.DTX[0].listWAV[nWAVcount]); } nWAVcount++; } if (nWAVcount <= TJAPlayer4.DTX[0].listWAV.Count) { ShowProgressByFilename(TJAPlayer4.DTX[0].listWAV[nWAVcount].strファイル名); } if (nWAVcount > TJAPlayer4.DTX[0].listWAV.Count) { TimeSpan span = ( TimeSpan )(DateTime.Now - timeBeginLoadWAV); Trace.TraceInformation("WAV読込所要時間({0,4}): {1}", TJAPlayer4.DTX[0].listWAV.Count, span.ToString()); timeBeginLoadWAV = DateTime.Now; if (TJAPlayer4.ConfigIni.bDynamicBassMixerManagement) { TJAPlayer4.DTX[0].PlanToAddMixerChannel(); } for (int nPlayer = 0; nPlayer < TJAPlayer4.ConfigIni.nPlayerCount; nPlayer++) { TJAPlayer4.DTX[nPlayer].t太鼓チップのランダム化(TJAPlayer4.ConfigIni.eRandom[nPlayer].Taiko); //太鼓チップをランダム化する際、1P後2Pの処理をすぐに行うと、 //1Pと酷似した、もしくは全く同じチップが流れてしまうので、 //1Pのランダム化後、ある程度時間を空ける。 Stopwatch sw = new Stopwatch(); sw.Start(); for (int i = 0; i < 1;) { if (sw.ElapsedMilliseconds >= 500) { sw.Reset(); i++; } } } TJAPlayer4.stage演奏ドラム画面.On活性化(); span = (TimeSpan)(DateTime.Now - timeBeginLoadWAV); base.eフェーズID = CStage.Eフェーズ.NOWLOADING_BMPファイルを読み込む; } return((int)E曲読込画面の戻り値.継続); } case CStage.Eフェーズ.NOWLOADING_BMPファイルを読み込む: { TimeSpan span; DateTime timeBeginLoadBMPAVI = DateTime.Now; if (TJAPlayer4.ConfigIni.bAVI有効) { TJAPlayer4.DTX[0].tAVIの読み込み(); } span = ( TimeSpan )(DateTime.Now - timeBeginLoadBMPAVI); span = ( TimeSpan )(DateTime.Now - timeBeginLoad); Trace.TraceInformation("総読込時間: {0}", span.ToString()); if (TJAPlayer4.ConfigIni.FastRender) { var fastRender = new FastRender(); fastRender.Render(); fastRender = null; } if (bitmapFilename != null) { bitmapFilename.Dispose(); bitmapFilename = null; } if (graphicsFilename != null) { graphicsFilename.Dispose(); graphicsFilename = null; } if (ftFilename != null) { ftFilename.Dispose(); ftFilename = null; } TJAPlayer4.Timer.t更新(); //CSound管理.rc演奏用タイマ.t更新(); base.eフェーズID = CStage.Eフェーズ.NOWLOADING_システムサウンドBGMの完了を待つ; return((int)E曲読込画面の戻り値.継続); } case CStage.Eフェーズ.NOWLOADING_システムサウンドBGMの完了を待つ: { long nCurrentTime = TJAPlayer4.Timer.n現在時刻; if (nCurrentTime < this.nBGM再生開始時刻) { this.nBGM再生開始時刻 = nCurrentTime; } // if ( ( nCurrentTime - this.nBGM再生開始時刻 ) > ( this.nBGMの総再生時間ms - 1000 ) ) if ((nCurrentTime - this.nBGM再生開始時刻) >= (this.nBGMの総再生時間ms)) // #27787 2012.3.10 yyagi 1000ms == フェードイン分の時間 { if (!TJAPlayer4.DTXVmode.Enabled) { } base.eフェーズID = CStage.Eフェーズ.共通_フェードアウト; } return((int)E曲読込画面の戻り値.継続); } case CStage.Eフェーズ.共通_フェードアウト: if (this.ct待機.b終了値に達してない) // DTXVモード時は、フェードアウト省略 { return((int)E曲読込画面の戻り値.継続); } if (txFilename != null) { txFilename.Dispose(); } if (this.sd読み込み音 != null) { this.sd読み込み音.t解放する(); } return((int)E曲読込画面の戻り値.読込完了); } return((int)E曲読込画面の戻り値.継続); }