//-----------------
        #endregion
        #region [ .score.ini を読み込んで Cスコア.譜面情報に設定する ]
        //-----------------
        public void tScoreIniを読み込んで譜面情報を設定する(string strScoreIniファイルパス, Cスコア score)
        {
            if (!File.Exists(strScoreIniファイルパス))
            {
                return;
            }

            try
            {
                var ini = new CScoreIni(strScoreIniファイルパス);

                for (int n楽器番号 = 0; n楽器番号 < 1; n楽器番号++)
                {
                    #region socre.譜面情報.最大ランク.Drums = ...
                    //-----------------
                    if (ini.stセクション.HiScore.b演奏にMIDI入力を使用した ||
                        ini.stセクション.HiScore.b演奏にキーボードを使用した ||
                        ini.stセクション.HiScore.b演奏にジョイパッドを使用した ||
                        ini.stセクション.HiScore.b演奏にマウスを使用した)
                    {
                        // (A) 全オートじゃないようなので、演奏結果情報を有効としてランクを算出する。

                        score.譜面情報.最大ランク =
                            CScoreIni.tランク値を計算して返す(
                                ini.stセクション.HiScore.n全チップ数,
                                ini.stセクション.HiScore.nPerfect数,
                                ini.stセクション.HiScore.nGreat数,
                                ini.stセクション.HiScore.nGood数,
                                ini.stセクション.HiScore.nPoor数,
                                ini.stセクション.HiScore.nMiss数);
                    }
                    else
                    {
                        // (B) 全オートらしいので、ランクは無効とする。

                        score.譜面情報.最大ランク = (int)CScoreIni.ERANK.UNKNOWN;
                    }
                    //-----------------
                    #endregion
                    score.譜面情報.最大スキル = ini.stセクション.HiScore.db演奏型スキル値;
                    score.譜面情報.フルコンボ = ini.stセクション.HiScore.bフルコンボである;
                    for (int i = 0; i < (int)Difficulty.Total; i++)
                    {
                        score.譜面情報.nハイスコア[i]              = (int)ini.stセクション.HiScore.nハイスコア[i];
                        score.譜面情報.nSecondScore[i]        = (int)ini.stセクション.HiScore.nSecondScore[i];
                        score.譜面情報.nThirdScore[i]         = (int)ini.stセクション.HiScore.nThirdScore[i];
                        score.譜面情報.strHiScorerName[i]     = ini.stセクション.HiScore.strHiScorerName[i];
                        score.譜面情報.strSecondScorerName[i] = ini.stセクション.HiScore.strSecondScorerName[i];
                        score.譜面情報.strThirdScorerName[i]  = ini.stセクション.HiScore.strThirdScorerName[i];
                        score.譜面情報.n王冠[i] = (int)ini.stセクション.HiScore.n王冠[i];
                    }
                }
                score.譜面情報.演奏回数 = ini.stファイル.PlayCountDrums;
                //for( int i = 0; i < (int)Difficulty.Total; i++ )
                //	score.譜面情報.演奏履歴[ i ] = ini.stファイル.History[ i ];//2020.04.18 Mr-Ojii ここで例外処理起こすしなぜこのコードが必要かがわからなかったので、コメントアウト化
            }
            catch (Exception e)
            {
                Trace.TraceError("演奏記録ファイルの読み込みに失敗しました。[{0}]", strScoreIniファイルパス);
                Trace.TraceError(e.ToString());
                Trace.TraceError("例外が発生しましたが処理を継続します。 (801f823d-a952-4809-a1bb-cf6a56194f5c)");
            }
        }
Beispiel #2
0
        public override int On進行描画()
        {
            string str;

            if (base.b活性化してない)
            {
                return(0);
            }

            #region [ 初めての進行描画 ]
            //-----------------------------
            if (base.b初めての進行描画)
            {
                Cスコア cスコア1 = TJAPlayer3.stage選曲.r確定されたスコア;
                if (this.sd読み込み音 != null)
                {
                    if (TJAPlayer3.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
                {
                    TJAPlayer3.Skin.sound曲読込開始音.t再生する();
                    this.nBGM再生開始時刻   = CSound管理.rc演奏用タイマ.n現在時刻;
                    this.nBGMの総再生時間ms = TJAPlayer3.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 [ 背景、音符+タイトル表示 ]
            //-----------------------------
            ctどんちゃんIn.t進行();

            this.ct曲名表示.t進行();

            if (ctどんちゃんIn.n現在の値 >= 95)
            {
                if (!ct曲名表示.b進行中)
                {
                    ct曲名表示.t開始(0, 255, 1, TJAPlayer3.Timer);
                }
            }

            if (TJAPlayer3.Tx.SongLoading_Background != null)
            {
                TJAPlayer3.Tx.SongLoading_Background.t2D描画(TJAPlayer3.app.Device, 0, 0);
            }

            //CDTXMania.act文字コンソール.tPrint( 0, 0, C文字コンソール.Eフォント種別.灰, this.ct曲名表示.n現在の値.ToString() );

            if (TJAPlayer3.Tx.SongLoading_Plate != null)
            {
                if (this.ct曲名表示.b進行中)
                {
                    TJAPlayer3.Tx.SongLoading_Plate.bスクリーン合成 = TJAPlayer3.Skin.SongLoading_Plate_ScreenBlend;                     //あまりにも出番が無い
                    TJAPlayer3.Tx.SongLoading_Plate.Opacity  = ct曲名表示.n現在の値;
                    if (TJAPlayer3.Skin.SongLoading_Plate_ReferencePoint == CSkin.ReferencePoint.Left)
                    {
                        TJAPlayer3.Tx.SongLoading_Plate.t2D描画(TJAPlayer3.app.Device, TJAPlayer3.Skin.SongLoading_Plate_X, TJAPlayer3.Skin.SongLoading_Plate_Y - (TJAPlayer3.Tx.SongLoading_Plate.sz画像サイズ.Height / 2));
                    }
                    else if (TJAPlayer3.Skin.SongLoading_Plate_ReferencePoint == CSkin.ReferencePoint.Right)
                    {
                        TJAPlayer3.Tx.SongLoading_Plate.t2D描画(TJAPlayer3.app.Device, TJAPlayer3.Skin.SongLoading_Plate_X - TJAPlayer3.Tx.SongLoading_Plate.sz画像サイズ.Width, TJAPlayer3.Skin.SongLoading_Plate_Y - (TJAPlayer3.Tx.SongLoading_Plate.sz画像サイズ.Height / 2));
                    }
                    else
                    {
                        TJAPlayer3.Tx.SongLoading_Plate.t2D描画(TJAPlayer3.app.Device, TJAPlayer3.Skin.SongLoading_Plate_X - (TJAPlayer3.Tx.SongLoading_Plate.sz画像サイズ.Width / 2), TJAPlayer3.Skin.SongLoading_Plate_Y - (TJAPlayer3.Tx.SongLoading_Plate.sz画像サイズ.Height / 2));
                    }
                }
            }

            if (TJAPlayer3.Tx.SongLoading_Chara != null)
            {
                //TJAPlayer3.Tx.SongLoading_Chara.t2D描画(TJAPlayer3.app.Device, -180 + ctどんちゃんIn.n現在の値, 0 + (float)Math.Sin(ctどんちゃんIn.n現在の値 * (Math.PI * 180)) * 50, new Rectangle(0, 0, 640, 360));
                TJAPlayer3.Tx.SongLoading_Chara.Opacity = (ctどんちゃんIn.n現在の値 / 180.0f) * 255.0f;
                TJAPlayer3.Tx.SongLoading_Chara.t2D描画(TJAPlayer3.app.Device, -360 + ctどんちゃんIn.n現在の値 * 2, 0 - (float)Math.Sin((float)ctどんちゃんIn.n現在の値 * (Math.PI / 180)) * 100.0f, new Rectangle(0, 0, 640, 720));
                TJAPlayer3.Tx.SongLoading_Chara.t2D描画(TJAPlayer3.app.Device, 1000 - ctどんちゃんIn.n現在の値 * 2, 0 - (float)Math.Sin((float)ctどんちゃんIn.n現在の値 * (Math.PI / 180)) * 100.0f, new Rectangle(640, 0, 640, 720));
            }
            //CDTXMania.act文字コンソール.tPrint( 0, 16, C文字コンソール.Eフォント種別.灰, C変換.nParsentTo255( ( this.ct曲名表示.n現在の値 / 30.0 ) ).ToString() );


            int y = 720 - 45;

            if (this.ct曲名表示.n現在の値 == 255)
            {
                if (this.txタイトル != null)
                {
                    int nサブタイトル補正 = string.IsNullOrEmpty(TJAPlayer3.stage選曲.r確定されたスコア.譜面情報.strサブタイトル) ? 15 : 0;

                    if (TJAPlayer3.Skin.SongLoading_Title_ReferencePoint == CSkin.ReferencePoint.Left)
                    {
                        this.txタイトル.t2D描画(TJAPlayer3.app.Device, TJAPlayer3.Skin.SongLoading_Title_X, TJAPlayer3.Skin.SongLoading_Title_Y - (this.txタイトル.sz画像サイズ.Height / 2) + nサブタイトル補正 - 12);
                    }
                    else if (TJAPlayer3.Skin.SongLoading_Title_ReferencePoint == CSkin.ReferencePoint.Right)
                    {
                        this.txタイトル.t2D描画(TJAPlayer3.app.Device, TJAPlayer3.Skin.SongLoading_Title_X - (this.txタイトル.sz画像サイズ.Width * txタイトル.vc拡大縮小倍率.X), TJAPlayer3.Skin.SongLoading_Title_Y - (this.txタイトル.sz画像サイズ.Height / 2) + nサブタイトル補正 - 16);
                    }
                    else
                    {
                        this.txタイトル.t2D描画(TJAPlayer3.app.Device, (TJAPlayer3.Skin.SongLoading_Title_X - ((this.txタイトル.sz画像サイズ.Width * txタイトル.vc拡大縮小倍率.X) / 2)), TJAPlayer3.Skin.SongLoading_Title_Y - (this.txタイトル.sz画像サイズ.Height / 2) + nサブタイトル補正 - 16);
                    }
                }
                if (this.txサブタイトル != null)
                {
                    if (TJAPlayer3.Skin.SongLoading_SubTitle_ReferencePoint == CSkin.ReferencePoint.Left)
                    {
                        this.txサブタイトル.t2D描画(TJAPlayer3.app.Device, TJAPlayer3.Skin.SongLoading_SubTitle_X, TJAPlayer3.Skin.SongLoading_SubTitle_Y - (this.txサブタイトル.sz画像サイズ.Height / 2));
                    }
                    else if (TJAPlayer3.Skin.SongLoading_Title_ReferencePoint == CSkin.ReferencePoint.Right)
                    {
                        this.txサブタイトル.t2D描画(TJAPlayer3.app.Device, TJAPlayer3.Skin.SongLoading_SubTitle_X - (this.txサブタイトル.sz画像サイズ.Width * txタイトル.vc拡大縮小倍率.X), TJAPlayer3.Skin.SongLoading_SubTitle_Y - (this.txサブタイトル.sz画像サイズ.Height / 2) - 10);
                    }
                    else
                    {
                        this.txサブタイトル.t2D描画(TJAPlayer3.app.Device, (TJAPlayer3.Skin.SongLoading_SubTitle_X - ((this.txサブタイトル.sz画像サイズ.Width * txサブタイトル.vc拡大縮小倍率.X) / 2)), TJAPlayer3.Skin.SongLoading_SubTitle_Y - (this.txサブタイトル.sz画像サイズ.Height / 2) - 10);
                    }
                }
            }
            //-----------------------------
            #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 (!TJAPlayer3.bコンパクトモード)
                {
                    str = TJAPlayer3.stage選曲.r確定されたスコア.ファイル情報.ファイルの絶対パス;
                }
                else
                {
                    str = TJAPlayer3.strコンパクトモードファイル;
                }

                CScoreIni ini = new CScoreIni(str + ".score.ini");
                ini.t全演奏記録セクションの整合性をチェックし不整合があればリセットする();

                if ((TJAPlayer3.DTX != null) && TJAPlayer3.DTX.b活性化してる)
                {
                    TJAPlayer3.DTX.On非活性化();
                }

                //if( CDTXMania.DTX == null )
                {
                    TJAPlayer3.DTX = new CDTX(str, false, 1.0, ini.stファイル.BGMAdjust, 0, 0, true);
                    if (TJAPlayer3.ConfigIni.nPlayerCount == 2)
                    {
                        TJAPlayer3.DTX_2P = new CDTX(str, false, 1.0, ini.stファイル.BGMAdjust, 0, 1, true);
                    }
                    if (File.Exists(TJAPlayer3.DTX.strフォルダ名 + @"\\set.def"))
                    {
                        TJAPlayer3.DTX = new CDTX(str, false, 1.0, ini.stファイル.BGMAdjust, 0, 1, true);
                        if (TJAPlayer3.ConfigIni.nPlayerCount == 2)
                        {
                            TJAPlayer3.DTX_2P = new CDTX(str, false, 1.0, ini.stファイル.BGMAdjust, 0, 1, true);
                        }
                    }

                    Trace.TraceInformation("----曲情報-----------------");
                    Trace.TraceInformation("TITLE: {0}", TJAPlayer3.DTX.TITLE);
                    Trace.TraceInformation("FILE: {0}", TJAPlayer3.DTX.strファイル名の絶対パス);
                    Trace.TraceInformation("---------------------------");

                    span = (TimeSpan)(DateTime.Now - timeBeginLoad);
                    Trace.TraceInformation("DTX読込所要時間:           {0}", span.ToString());

                    // 段位認定モード用。
                    if (TJAPlayer3.stage選曲.n確定された曲の難易度 == (int)Difficulty.Dan && TJAPlayer3.DTX.List_DanSongs != null)
                    {
                        var pfTitle    = new CPrivateFont();
                        var pfSubTitle = new CPrivateFont();
                        if (!string.IsNullOrEmpty(TJAPlayer3.ConfigIni.FontName))
                        {
                            pfTitle    = new CPrivateFont(new FontFamily(TJAPlayer3.ConfigIni.FontName), 30);
                            pfSubTitle = new CPrivateFont(new FontFamily(TJAPlayer3.ConfigIni.FontName), 22);
                        }
                        else
                        {
                            pfTitle    = new CPrivateFont(new FontFamily("MS UI Gothic"), 30);
                            pfSubTitle = new CPrivateFont(new FontFamily("MS UI Gothic"), 22);
                        }

                        var titleForeColor    = TJAPlayer3.Skin.Game_DanC_Title_ForeColor;
                        var titleBackColor    = TJAPlayer3.Skin.Game_DanC_Title_BackColor;
                        var subtitleForeColor = TJAPlayer3.Skin.Game_DanC_SubTitle_ForeColor;
                        var subtitleBackColor = TJAPlayer3.Skin.Game_DanC_SubTitle_BackColor;

                        for (int i = 0; i < TJAPlayer3.DTX.List_DanSongs.Count; i++)
                        {
                            if (!string.IsNullOrEmpty(TJAPlayer3.DTX.List_DanSongs[i].Title))
                            {
                                using (var bmpSongTitle = pfTitle.DrawPrivateFont(TJAPlayer3.DTX.List_DanSongs[i].Title, titleForeColor, titleBackColor))
                                {
                                    TJAPlayer3.DTX.List_DanSongs[i].TitleTex            = TJAPlayer3.tテクスチャの生成(bmpSongTitle, false);
                                    TJAPlayer3.DTX.List_DanSongs[i].TitleTex.vc拡大縮小倍率.X = TJAPlayer3.GetSongNameXScaling(ref TJAPlayer3.DTX.List_DanSongs[i].TitleTex, 710);
                                }
                            }

                            if (!string.IsNullOrEmpty(TJAPlayer3.DTX.List_DanSongs[i].SubTitle))
                            {
                                using (var bmpSongSubTitle = pfSubTitle.DrawPrivateFont(TJAPlayer3.DTX.List_DanSongs[i].SubTitle, subtitleForeColor, subtitleBackColor))
                                {
                                    TJAPlayer3.DTX.List_DanSongs[i].SubTitleTex            = TJAPlayer3.tテクスチャの生成(bmpSongSubTitle, false);
                                    TJAPlayer3.DTX.List_DanSongs[i].SubTitleTex.vc拡大縮小倍率.X = TJAPlayer3.GetSongNameXScaling(ref TJAPlayer3.DTX.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 && TJAPlayer3.DTX.listWAV.Count > 0)                                                         // #28934 2012.7.7 yyagi (added checking Count)
                {
                    ShowProgressByFilename(TJAPlayer3.DTX.listWAV[nWAVcount].strファイル名);
                }
                int looptime = (TJAPlayer3.ConfigIni.b垂直帰線待ちを行う)? 3 : 1;                                        // VSyncWait=ON時は1frame(1/60s)あたり3つ読むようにする
                for (int i = 0; i < looptime && nWAVcount <= TJAPlayer3.DTX.listWAV.Count; i++)
                {
                    if (TJAPlayer3.DTX.listWAV[nWAVcount].listこのWAVを使用するチャンネル番号の集合.Count > 0)                                           // #28674 2012.5.8 yyagi
                    {
                        TJAPlayer3.DTX.tWAVの読み込み(TJAPlayer3.DTX.listWAV[nWAVcount]);
                    }
                    nWAVcount++;
                }
                if (nWAVcount <= TJAPlayer3.DTX.listWAV.Count)
                {
                    ShowProgressByFilename(TJAPlayer3.DTX.listWAV[nWAVcount].strファイル名);
                }
                if (nWAVcount > TJAPlayer3.DTX.listWAV.Count)
                {
                    TimeSpan span = ( TimeSpan )(DateTime.Now - timeBeginLoadWAV);
                    Trace.TraceInformation("WAV読込所要時間({0,4}):     {1}", TJAPlayer3.DTX.listWAV.Count, span.ToString());
                    timeBeginLoadWAV = DateTime.Now;

                    if (TJAPlayer3.ConfigIni.bDynamicBassMixerManagement)
                    {
                        TJAPlayer3.DTX.PlanToAddMixerChannel();
                    }
                    TJAPlayer3.DTX.t太鼓チップのランダム化(TJAPlayer3.ConfigIni.eRandom.Taiko);

                    TJAPlayer3.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 (TJAPlayer3.ConfigIni.bAVI有効)
                {
                    TJAPlayer3.DTX.tAVIの読み込み();
                }
                span = ( TimeSpan )(DateTime.Now - timeBeginLoadBMPAVI);

                span = ( TimeSpan )(DateTime.Now - timeBeginLoad);
                Trace.TraceInformation("総読込時間:                {0}", span.ToString());

                if (TJAPlayer3.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;
                }
                TJAPlayer3.Timer.t更新();
                //CSound管理.rc演奏用タイマ.t更新();
                base.eフェーズID = CStage.Eフェーズ.NOWLOADING_システムサウンドBGMの完了を待つ;
                return((int)E曲読込画面の戻り値.継続);
            }

            case CStage.Eフェーズ.NOWLOADING_システムサウンドBGMの完了を待つ:
            {
                long nCurrentTime = TJAPlayer3.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 (!TJAPlayer3.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曲読込画面の戻り値.継続);
        }
        public void t選択曲が変更された()
        {
            Cスコア cスコア = TJAPlayer3.stage選曲.act曲リスト.r現在選択中のスコア;

            if (cスコア != null)
            {
                Bitmap image = new Bitmap(1, 1);
                TJAPlayer3.tテクスチャの解放(ref this.txArtist);
                this.strArtist = cスコア.譜面情報.アーティスト名;
                if ((this.strArtist != null) && (this.strArtist.Length > 0))
                {
                    Graphics graphics = Graphics.FromImage(image);
                    graphics.PageUnit = GraphicsUnit.Pixel;
                    SizeF ef = graphics.MeasureString(this.strArtist, this.ft描画用フォント);
                    graphics.Dispose();
                    if (ef.Width > SampleFramework.GameWindowSize.Width)
                    {
                        ef.Width = SampleFramework.GameWindowSize.Width;
                    }
                    try
                    {
                        Bitmap bitmap2 = new Bitmap((int)Math.Ceiling((double)ef.Width), (int)Math.Ceiling((double)this.ft描画用フォント.Size));
                        graphics = Graphics.FromImage(bitmap2);
                        graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
                        graphics.DrawString(this.strArtist, this.ft描画用フォント, Brushes.White, ( float )0f, ( float )0f);
                        graphics.Dispose();
                        this.txArtist          = new CTexture(TJAPlayer3.app.Device, bitmap2, TJAPlayer3.TextureFormat);
                        this.txArtist.vc拡大縮小倍率 = new Vector3(0.5f, 0.5f, 1f);
                        bitmap2.Dispose();
                    }
                    catch (CTextureCreateFailedException e)
                    {
                        Trace.TraceError(e.ToString());
                        Trace.TraceError("ARTISTテクスチャの生成に失敗しました。");
                        this.txArtist = null;
                    }
                }
                TJAPlayer3.tテクスチャの解放(ref this.txComment);
                //this.strComment = cスコア.譜面情報.コメント;
                this.strComment = cスコア.譜面情報.ジャンル;
                if ((this.strComment != null) && (this.strComment.Length > 0))
                {
                    Graphics graphics2 = Graphics.FromImage(image);
                    graphics2.PageUnit = GraphicsUnit.Pixel;
                    SizeF ef2  = graphics2.MeasureString(this.strComment, this.ft描画用フォント);
                    Size  size = new Size((int)Math.Ceiling((double)ef2.Width), (int)Math.Ceiling((double)ef2.Height));
                    graphics2.Dispose();
                    this.nテクスチャの最大幅 = TJAPlayer3.app.Device.Capabilities.MaxTextureWidth;
                    int    maxTextureHeight = TJAPlayer3.app.Device.Capabilities.MaxTextureHeight;
                    Bitmap bitmap3          = new Bitmap(size.Width, (int)Math.Ceiling((double)this.ft描画用フォント.Size));
                    graphics2 = Graphics.FromImage(bitmap3);
                    graphics2.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
                    graphics2.DrawString(this.strComment, this.ft描画用フォント, Brushes.White, ( float )0f, ( float )0f);
                    graphics2.Dispose();
                    this.nComment行数    = 1;
                    this.nComment最終行の幅 = size.Width;
                    while (this.nComment最終行の幅 > this.nテクスチャの最大幅)
                    {
                        this.nComment行数++;
                        this.nComment最終行の幅 -= this.nテクスチャの最大幅;
                    }
                    while ((this.nComment行数 * ((int)Math.Ceiling((double)this.ft描画用フォント.Size))) > maxTextureHeight)
                    {
                        this.nComment行数--;
                        this.nComment最終行の幅 = this.nテクスチャの最大幅;
                    }
                    Bitmap bitmap4 = new Bitmap((this.nComment行数 > 1) ? this.nテクスチャの最大幅 : this.nComment最終行の幅, this.nComment行数 * ((int)Math.Ceiling((double)this.ft描画用フォント.Size)));
                    graphics2 = Graphics.FromImage(bitmap4);
                    Rectangle srcRect  = new Rectangle();
                    Rectangle destRect = new Rectangle();
                    for (int i = 0; i < this.nComment行数; i++)
                    {
                        srcRect.X       = i * this.nテクスチャの最大幅;
                        srcRect.Y       = 0;
                        srcRect.Width   = ((i + 1) == this.nComment行数) ? this.nComment最終行の幅 : this.nテクスチャの最大幅;
                        srcRect.Height  = bitmap3.Height;
                        destRect.X      = 0;
                        destRect.Y      = i * bitmap3.Height;
                        destRect.Width  = srcRect.Width;
                        destRect.Height = srcRect.Height;
                        graphics2.DrawImage(bitmap3, destRect, srcRect, GraphicsUnit.Pixel);
                    }
                    graphics2.Dispose();
                    try
                    {
                        this.txComment          = new CTexture(TJAPlayer3.app.Device, bitmap4, TJAPlayer3.TextureFormat);
                        this.txComment.vc拡大縮小倍率 = new Vector3(0.5f, 0.5f, 1f);
                    }
                    catch (CTextureCreateFailedException e)
                    {
                        Trace.TraceError(e.ToString());
                        Trace.TraceError("COMMENTテクスチャの生成に失敗しました。");
                        this.txComment = null;
                    }
                    bitmap4.Dispose();
                    bitmap3.Dispose();
                }
                image.Dispose();
                if (this.txComment != null)
                {
                    this.ctComment = new CCounter(-740, (int)((((this.nComment行数 - 1) * this.nテクスチャの最大幅) + this.nComment最終行の幅) * this.txComment.vc拡大縮小倍率.X), 10, TJAPlayer3.Timer);
                }
            }
        }
Beispiel #4
0
        /// <summary>
        /// 一時的に使用禁止。
        /// </summary>
        private void t描画処理_ジャンル文字列()
        {
            C曲リストノード c曲リストノード = TJAPlayer3.stage選曲.act曲リスト.r現在選択中の曲;
            Cスコア     cスコア     = TJAPlayer3.stage選曲.act曲リスト.r現在選択中のスコア;

            if ((c曲リストノード != null) && (cスコア != null))
            {
                string str = "";
                switch (c曲リストノード.eノード種別)
                {
                case C曲リストノード.Eノード種別.SCORE:
                    if ((c曲リストノード.strジャンル == null) || (c曲リストノード.strジャンル.Length <= 0))
                    {
                        if ((cスコア.譜面情報.ジャンル != null) && (cスコア.譜面情報.ジャンル.Length > 0))
                        {
                            str = cスコア.譜面情報.ジャンル;
                        }
#if false       // #32644 2013.12.21 yyagi "Unknown"なジャンル表示を削除。DTX/BMSなどの種別表示もしない。
                        else
                        {
                            switch (cスコア.譜面情報.曲種別)
                            {
                            case CDTX.E種別.DTX:
                                str = "DTX";
                                break;

                            case CDTX.E種別.GDA:
                                str = "GDA";
                                break;

                            case CDTX.E種別.G2D:
                                str = "G2D";
                                break;

                            case CDTX.E種別.BMS:
                                str = "BMS";
                                break;

                            case CDTX.E種別.BME:
                                str = "BME";
                                break;
                            }
                            str = "Unknown";
                        }
#endif
                        break;
                    }
                    str = c曲リストノード.strジャンル;
                    break;

                case C曲リストノード.Eノード種別.BOX:
                    str = "MusicBox";
                    break;

                case C曲リストノード.Eノード種別.BACKBOX:
                    str = "BackBox";
                    break;

                case C曲リストノード.Eノード種別.RANDOM:
                    str = "Random";
                    break;

                default:
                    str = "Unknown";
                    break;
                }
                TJAPlayer3.act文字コンソール.tPrint(this.n本体X + 0x12, this.n本体Y - 1, C文字コンソール.Eフォント種別.赤細, str);
            }
        }
        // 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
                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) || (TJAPlayer3.DTX[0].bチップがある.Drums))))
                    {
                        CScoreIni.C演奏記録 part        = this.st演奏記録[0];
                        bool            bIsAutoPlay = true;
                        switch (i)
                        {
                        case 0:
                            bIsAutoPlay = TJAPlayer3.ConfigIni.b太鼓パートAutoPlay[0];
                            break;

                        case 1:
                            bIsAutoPlay = TJAPlayer3.ConfigIni.b太鼓パートAutoPlay[0];
                            break;

                        case 2:
                            bIsAutoPlay = TJAPlayer3.ConfigIni.b太鼓パートAutoPlay[0];
                            break;
                        }
                        this.fPerfect率[i] = bIsAutoPlay ? 0f : ((100f * part.nPerfect数) / ((float)part.n全チップ数));
                        this.fGreat率[i]   = bIsAutoPlay ? 0f : ((100f * part.nGreat数) / ((float)part.n全チップ数));
                        this.fGood率[i]    = bIsAutoPlay ? 0f : ((100f * part.nGood数) / ((float)part.n全チップ数));
                        this.fPoor率[i]    = bIsAutoPlay ? 0f : ((100f * part.nPoor数) / ((float)part.n全チップ数));
                        this.fMiss率[i]    = bIsAutoPlay ? 0f : ((100f * part.nMiss数) / ((float)part.n全チップ数));
                        this.nランク値[i]     = CScoreIni.tランク値を計算して返す(part);
                    }
                }
                this.n総合ランク値 = CScoreIni.t総合ランク値を計算して返す(this.st演奏記録[0]);
                //---------------------
                #endregion

                #region [ .score.ini の作成と出力 ]
                //---------------------
                string    str = TJAPlayer3.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演奏記録[0].nハイスコア[TJAPlayer3.stage選曲.n確定された曲の難易度[0]] > ini.stセクション[i * 2].nハイスコア[TJAPlayer3.stage選曲.n確定された曲の難易度[0]]) && !TJAPlayer3.ConfigIni.b太鼓パートAutoPlay[0])                         //2020.04.18 Mr-Ojii それぞれの難易度のハイスコアでハイスコアを変更するように修正
                    {
                        this.b新記録スコア[i]    = true;
                        ini.stセクション[i * 2] = this.st演奏記録[0];
                    }

                    // 新記録スキルチェック
                    if (this.st演奏記録[0].db演奏型スキル値 > ini.stセクション[(i * 2) + 1].db演奏型スキル値)
                    {
                        this.b新記録スキル[i]          = true;
                        ini.stセクション[(i * 2) + 1] = this.st演奏記録[0];
                    }

                    // ラストプレイ #23595 2011.1.9 ikanick
                    // オートじゃなければプレイ結果を書き込む
                    if (TJAPlayer3.ConfigIni.b太鼓パートAutoPlay[0] == false)
                    {
                        ini.stセクション[i + 6] = this.st演奏記録[0];
                    }

                    // #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;

                        default:
                            throw new Exception("クリア回数増加のk(0-2)が範囲外です。");
                        }
                    }
                    //---------------------------------------------------------------------/
                }
                if (TJAPlayer3.ConfigIni.bScoreIniを出力する)
                {
                    ini.t書き出し(str);
                }
                //---------------------
                #endregion

                #region [ 選曲画面の譜面情報の更新 ]
                //---------------------

                {
                    Cスコア   cスコア      = TJAPlayer3.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演奏記録[0].bフルコンボである | b今までにフルコンボしたことがある[m];

                            if (this.b新記録スキル[m])
                            {
                                cスコア.譜面情報.最大スキル[m] = this.st演奏記録[0].db演奏型スキル値;
                            }

                            if (this.b新記録ランク[m])
                            {
                                cスコア.譜面情報.最大ランク[m] = this.nランク値[m];
                            }
                            cスコア.譜面情報.n王冠    = st演奏記録[0].n王冠;                         //2020.05.22 Mr-Ojii データが保存されない問題の解決策。
                            cスコア.譜面情報.nハイスコア = st演奏記録[0].nハイスコア;
                        }
                    }
                    TJAPlayer3.stage選曲.r確定されたスコア = cスコア;
                }
                //---------------------
                #endregion

                // Discord Presenseの更新
                Discord.UpdatePresence(TJAPlayer3.DTX[0].TITLE + ".tja", Properties.Discord.Stage_Result + (TJAPlayer3.ConfigIni.b太鼓パートAutoPlay[0] == true ? " (" + Properties.Discord.Info_IsAuto + ")" : ""), TJAPlayer3.StartupTime);

                base.On活性化();
            }
            finally
            {
                Trace.TraceInformation("結果ステージの活性化を完了しました。");
                Trace.Unindent();
            }
        }
        // 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.b新記録ランク = false;
                //---------------------
                #endregion

                #region [ 結果の計算 ]
                //---------------------
                for (int i = 0; i < 1; i++)
                {
                    this.nランク値     = -1;
                    this.fPerfect率 = this.fGreat率 = this.fGood率 = this.fPoor率 = this.fMiss率 = 0.0f;                     // #28500 2011.5.24 yyagi
                    if ((i != 0))
                    {
                        CScoreIni.C演奏記録 part = this.st演奏記録[0];

                        bool bIsAutoPlay = TJAPlayer3.ConfigIni.b太鼓パートAutoPlay[0];

                        this.fPerfect率 = bIsAutoPlay ? 0f : ((100f * part.nPerfect数) / ((float)part.n全チップ数));
                        this.fGreat率   = bIsAutoPlay ? 0f : ((100f * part.nGreat数) / ((float)part.n全チップ数));
                        this.fGood率    = bIsAutoPlay ? 0f : ((100f * part.nGood数) / ((float)part.n全チップ数));
                        this.fPoor率    = bIsAutoPlay ? 0f : ((100f * part.nPoor数) / ((float)part.n全チップ数));
                        this.fMiss率    = bIsAutoPlay ? 0f : ((100f * part.nMiss数) / ((float)part.n全チップ数));
                        this.nランク値     = CScoreIni.tランク値を計算して返す(part);
                    }
                }
                //---------------------
                #endregion

                #region [ .score.ini の作成と出力 ]
                //---------------------
                string    str = TJAPlayer3.DTX[0].strファイル名の絶対パス + ".score.ini";
                CScoreIni ini = new CScoreIni(str);

                bool b今までにフルコンボしたことがある = false;

                for (int i = 0; i < 1; i++)
                {
                    // フルコンボチェックならびに新記録ランクチェックは、ini.Record[] が、スコアチェックや演奏型スキルチェックの IF 内で書き直されてしまうよりも前に行う。(2010.9.10)

                    b今までにフルコンボしたことがある = ini.stセクション.HiScore.bフルコンボである;

                    // #24459 上記の条件だと[HiSkill.***]でのランクしかチェックしていないので、BestRankと比較するよう変更。
                    if (this.nランク値 >= 0 && ini.stファイル.BestRank > this.nランク値)                                    // #24459 2011.3.1 yyagi update BestRank
                    {
                        this.b新記録ランク        = true;
                        ini.stファイル.BestRank = this.nランク値;
                    }

                    if (TJAPlayer3.ConfigIni.b太鼓パートAutoPlay[0] == false && this.st演奏記録[0].b途中でAutoを切り替えたか == false)
                    {
                        ini.stセクション.HiScore = this.st演奏記録[0];
                    }

                    // ラストプレイ #23595 2011.1.9 ikanick
                    // オートじゃなければプレイ結果を書き込む
                    if (TJAPlayer3.ConfigIni.b太鼓パートAutoPlay[0] == false)
                    {
                        ini.stセクション.LastPlay = this.st演奏記録[0];
                    }

                    // #23596 10.11.16 add ikanick オートじゃないならクリア回数を1増やす
                    //        11.02.05 bオート to t更新条件を取得する use      ikanick
                    CScoreIni.t更新条件を取得する(out bool b更新が必要か否か);

                    if (b更新が必要か否か)
                    {
                        ini.stファイル.ClearCountDrums++;
                    }
                    //---------------------------------------------------------------------/
                }
                if (TJAPlayer3.ConfigIni.bScoreIniを出力する)
                {
                    ini.t書き出し(str);
                }
                //---------------------
                #endregion

                #region [ 選曲画面の譜面情報の更新 ]
                //---------------------

                {
                    Cスコア cスコア = TJAPlayer3.stage選曲.r確定されたスコア;

                    CScoreIni.t更新条件を取得する(out bool b更新が必要か否か);

                    if (b更新が必要か否か)
                    {
                        // FullCombo した記録を FullCombo なしで超えた場合、FullCombo マークが消えてしまう。
                        // → FullCombo は、最新記録と関係なく、一度達成したらずっとつくようにする。(2010.9.11)
                        cスコア.譜面情報.フルコンボ = this.st演奏記録[0].bフルコンボである | b今までにフルコンボしたことがある;

                        cスコア.譜面情報.最大ランク = this.nランク値;
                        cスコア.譜面情報.最大スキル = this.st演奏記録[0].db演奏型スキル値;

                        cスコア.譜面情報.n王冠          = st演奏記録[0].n王冠;               //2020.05.22 Mr-Ojii データが保存されない問題の解決策。
                        cスコア.譜面情報.nハイスコア       = st演奏記録[0].nハイスコア;
                        cスコア.譜面情報.nSecondScore = st演奏記録[0].nSecondScore;
                        cスコア.譜面情報.nThirdScore  = st演奏記録[0].nThirdScore;

                        cスコア.譜面情報.strHiScorerName     = st演奏記録[0].strHiScorerName;
                        cスコア.譜面情報.strSecondScorerName = st演奏記録[0].strSecondScorerName;
                        cスコア.譜面情報.strThirdScorerName  = st演奏記録[0].strThirdScorerName;
                    }

                    TJAPlayer3.stage選曲.r確定されたスコア = cスコア;
                }
                //---------------------
                #endregion

                // Discord Presenseの更新
                Discord.UpdatePresence(TJAPlayer3.DTX[0].TITLE + TJAPlayer3.DTX[0].EXTENSION, "Result" + (TJAPlayer3.ConfigIni.b太鼓パートAutoPlay[0] == true ? " (Auto)" : ""), TJAPlayer3.StartupTime);

                base.On活性化();
            }
            finally
            {
                Trace.TraceInformation("結果ステージの活性化を完了しました。");
                Trace.Unindent();
            }
        }
Beispiel #7
0
        // 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) || (TJAPlayer3.DTX.bチップがある.Drums))))
                        {
                            CScoreIni.C演奏記録 part        = this.st演奏記録[i];
                            bool            bIsAutoPlay = true;
                            switch (i)
                            {
                            case 0:
                                bIsAutoPlay = TJAPlayer3.ConfigIni.b太鼓パートAutoPlay;
                                break;

                            case 1:
                                bIsAutoPlay = TJAPlayer3.ConfigIni.b太鼓パートAutoPlay;
                                break;

                            case 2:
                                bIsAutoPlay = TJAPlayer3.ConfigIni.b太鼓パートAutoPlay;
                                break;
                            }
                            this.fPerfect率[i] = bIsAutoPlay ? 0f : ((100f * part.nPerfect数) / ((float)part.n全チップ数));
                            this.fGreat率[i]   = bIsAutoPlay ? 0f : ((100f * part.nGreat数) / ((float)part.n全チップ数));
                            this.fGood率[i]    = bIsAutoPlay ? 0f : ((100f * part.nGood数) / ((float)part.n全チップ数));
                            this.fPoor率[i]    = bIsAutoPlay ? 0f : ((100f * part.nPoor数) / ((float)part.n全チップ数));
                            this.fMiss率[i]    = bIsAutoPlay ? 0f : ((100f * part.nMiss数) / ((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);
                        }
                    }
                    this.n総合ランク値 = CScoreIni.t総合ランク値を計算して返す(this.st演奏記録.Drums, this.st演奏記録.Guitar, this.st演奏記録.Bass);
                    //---------------------
                    #endregion

                    #region [ .score.ini の作成と出力 ]
                    //---------------------
                    string    str = TJAPlayer3.DTX.strファイル名の絶対パス + ".score.ini";
                    CScoreIni ini = new CScoreIni(str);

                    bool[] b今までにフルコンボしたことがある = new bool[] { false, false, false };

                    // フルコンボチェックならびに新記録ランクチェックは、ini.Record[] が、スコアチェックや演奏型スキルチェックの IF 内で書き直されてしまうよりも前に行う。(2010.9.10)

                    b今までにフルコンボしたことがある[0] = ini.stセクション[0].bフルコンボである | ini.stセクション[0].bフルコンボである;

                    // #24459 上記の条件だと[HiSkill.***]でのランクしかチェックしていないので、BestRankと比較するよう変更。
                    if (this.nランク値[0] >= 0 && ini.stファイル.BestRank[0] > this.nランク値[0])                           // #24459 2011.3.1 yyagi update BestRank
                    {
                        this.b新記録ランク[0]        = true;
                        ini.stファイル.BestRank[0] = this.nランク値[0];
                    }

                    // 新記録スコアチェック
                    if ((this.st演奏記録[0].nスコア > ini.stセクション[0].nスコア) && !TJAPlayer3.ConfigIni.b太鼓パートAutoPlay)
                    {
                        this.b新記録スコア[0] = true;
                        ini.stセクション[0]  = this.st演奏記録[0];
                    }

                    if (TJAPlayer3.stage選曲.n確定された曲の難易度 != (int)Difficulty.Dan && TJAPlayer3.stage選曲.n確定された曲の難易度 != (int)Difficulty.Tower)
                    {
                        if (this.st演奏記録[0].nスコア > ini.stセクション[0].nスコア)
                        {
                            this.st演奏記録[0].nハイスコア[TJAPlayer3.stage選曲.n確定された曲の難易度] = (int)st演奏記録[0].nスコア;
                        }
                    }

                    // 新記録スキルチェック
                    if (this.st演奏記録[0].db演奏型スキル値 > ini.stセクション[0].db演奏型スキル値)
                    {
                        this.b新記録スキル[0] = true;
                        ini.stセクション[0]  = this.st演奏記録[0];
                    }

                    if (TJAPlayer3.stage選曲.n確定された曲の難易度 != (int)Difficulty.Dan && TJAPlayer3.stage選曲.n確定された曲の難易度 != (int)Difficulty.Tower && !TJAPlayer3.ConfigIni.b太鼓パートAutoPlay)
                    {
                        if (st演奏記録[0].fゲージ >= 80.0f)
                        {
                            if (st演奏記録[0].nMiss数 == 0 && st演奏記録[0].nPoor数 == 0 && st演奏記録[0].nGreat数 == 0 && st演奏記録[0].fゲージ >= 100.0f)
                            {
                                this.st演奏記録[0].bIsDondaFullCombo[TJAPlayer3.stage選曲.n確定された曲の難易度] = true;
                                this.st演奏記録[0].bIsFullCombo[TJAPlayer3.stage選曲.n確定された曲の難易度]      = true;
                                this.st演奏記録[0].bIsClear[TJAPlayer3.stage選曲.n確定された曲の難易度]          = true;
                            }
                            else if (st演奏記録[0].nMiss数 == 0 && st演奏記録[0].nPoor数 == 0 && st演奏記録[0].fゲージ >= 100.0f)
                            {
                                this.st演奏記録[0].bIsDondaFullCombo[TJAPlayer3.stage選曲.n確定された曲の難易度] = false;
                                this.st演奏記録[0].bIsFullCombo[TJAPlayer3.stage選曲.n確定された曲の難易度]      = true;
                                this.st演奏記録[0].bIsClear[TJAPlayer3.stage選曲.n確定された曲の難易度]          = true;
                            }
                            else
                            {
                                this.st演奏記録[0].bIsDondaFullCombo[TJAPlayer3.stage選曲.n確定された曲の難易度] = false;
                                this.st演奏記録[0].bIsFullCombo[TJAPlayer3.stage選曲.n確定された曲の難易度]      = false;
                                this.st演奏記録[0].bIsClear[TJAPlayer3.stage選曲.n確定された曲の難易度]          = true;
                            }
                            ini.stセクション[0] = this.st演奏記録[0];
                        }
                    }

                    // ラストプレイ #23595 2011.1.9 ikanick
                    // オートじゃなければプレイ結果を書き込む
                    if (TJAPlayer3.ConfigIni.b太鼓パートAutoPlay == false)
                    {
                        ini.stセクション[0] = this.st演奏記録[0];
                    }

                    // #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更新が必要か否か[0])
                    {
                        ini.stファイル.ClearCountDrums++;
                    }
                    //---------------------------------------------------------------------/
                    if (TJAPlayer3.ConfigIni.bScoreIniを出力する)
                    {
                        ini.t書き出し(str);
                    }

                    //---------------------
                    #endregion

                    #region [ リザルト画面への演奏回数の更新 #24281 2011.1.30 yyagi]
                    if (TJAPlayer3.ConfigIni.bScoreIniを出力する)
                    {
                        this.n演奏回数.Drums  = ini.stファイル.PlayCountDrums;
                        this.n演奏回数.Guitar = ini.stファイル.PlayCountGuitar;
                        this.n演奏回数.Bass   = ini.stファイル.PlayCountBass;
                    }
                    #endregion
                }

                #region [ 選曲画面の譜面情報の更新 ]
                //---------------------
                if (!TJAPlayer3.bコンパクトモード)
                {
                    Cスコア cスコア = TJAPlayer3.stage選曲.r確定されたスコア;
                    if (cスコア.譜面情報.クリア[TJAPlayer3.stage選曲.n確定された曲の難易度] == false)
                    {
                        cスコア.譜面情報.クリア[TJAPlayer3.stage選曲.n確定された曲の難易度] = st演奏記録[0].bIsClear[TJAPlayer3.stage選曲.n確定された曲の難易度];
                    }
                    if (cスコア.譜面情報.フルコンボ[TJAPlayer3.stage選曲.n確定された曲の難易度] == false)
                    {
                        cスコア.譜面情報.フルコンボ[TJAPlayer3.stage選曲.n確定された曲の難易度] = st演奏記録[0].bIsFullCombo[TJAPlayer3.stage選曲.n確定された曲の難易度];
                    }
                    if (cスコア.譜面情報.ドンダフルコンボ[TJAPlayer3.stage選曲.n確定された曲の難易度] == false)
                    {
                        cスコア.譜面情報.ドンダフルコンボ[TJAPlayer3.stage選曲.n確定された曲の難易度] = st演奏記録[0].bIsDondaFullCombo[TJAPlayer3.stage選曲.n確定された曲の難易度];
                    }
                }
                //---------------------
                #endregion

                // Discord Presenseの更新
                Discord.UpdatePresence(TJAPlayer3.DTX.TITLE + ".tja", Properties.Discord.Stage_Result + (TJAPlayer3.ConfigIni.b太鼓パートAutoPlay == true ? " (" + Properties.Discord.Info_IsAuto + ")" : ""), TJAPlayer3.StartupTime);

                base.On活性化();
            }
            finally
            {
                Trace.TraceInformation("結果ステージの活性化を完了しました。");
                Trace.Unindent();
            }
        }
Beispiel #8
0
        private bool t背景画像があればその一部からプレビュー画像を構築する()
        {
            Cスコア cスコア = TJAPlayer3.stage選曲.r現在選択中のスコア;

            if ((cスコア == null) || string.IsNullOrEmpty(cスコア.譜面情報.Backgound))
            {
                return(false);
            }
            string path = cスコア.ファイル情報.フォルダの絶対パス + cスコア.譜面情報.Backgound;

            if (!path.Equals(this.str現在のファイル名))
            {
                if (!File.Exists(path))
                {
                    Trace.TraceWarning("ファイルが存在しません。({0})", new object[] { path });
                    return(false);
                }
                TJAPlayer3.t安全にDisposeする(ref this.txプレビュー画像);
                this.str現在のファイル名 = path;
                Bitmap image   = null;
                Bitmap bitmap2 = null;
                Bitmap bitmap3 = null;
                try
                {
                    image   = new Bitmap(this.str現在のファイル名);
                    bitmap2 = new Bitmap(SampleFramework.GameWindowSize.Width, SampleFramework.GameWindowSize.Height);
                    Graphics graphics = Graphics.FromImage(bitmap2);
                    int      x        = 0;
                    for (int i = 0; i < SampleFramework.GameWindowSize.Height; i += image.Height)
                    {
                        for (x = 0; x < SampleFramework.GameWindowSize.Width; x += image.Width)
                        {
                            graphics.DrawImage(image, x, i, image.Width, image.Height);
                        }
                    }
                    graphics.Dispose();
                    bitmap3  = new Bitmap(0xcc, 0x10d);
                    graphics = Graphics.FromImage(bitmap3);
                    graphics.DrawImage(bitmap2, 5, 5, new Rectangle(0x157, 0x6d, 0xcc, 0x10d), GraphicsUnit.Pixel);
                    graphics.Dispose();
                    this.txプレビュー画像    = new CTexture(TJAPlayer3.app.Device, bitmap3, TJAPlayer3.TextureFormat);
                    this.r表示するプレビュー画像 = this.txプレビュー画像;
                }
                catch (Exception e)
                {
                    Trace.TraceError(e.ToString());
                    Trace.TraceError("背景画像の読み込みに失敗しました。({0})", new object[] { this.str現在のファイル名 });
                    this.r表示するプレビュー画像 = this.txプレビュー画像がないときの画像;
                    return(false);
                }
                finally
                {
                    if (image != null)
                    {
                        image.Dispose();
                    }
                    if (bitmap2 != null)
                    {
                        bitmap2.Dispose();
                    }
                    if (bitmap3 != null)
                    {
                        bitmap3.Dispose();
                    }
                }
            }
            return(true);
        }
Beispiel #9
0
        public void t後処理()
        {
            if (!TJAPlayer3.ConfigIni.bAutoPlay[0])
            {
                if (TJAPlayer3.stage選曲.n確定された曲の難易度[0] != (int)Difficulty.Dan && TJAPlayer3.stage選曲.n確定された曲の難易度[0] != (int)Difficulty.Tower)
                {
                    if (nスコアランク != 0)
                    {
                        if (TJAPlayer3.stage選曲.r確定されたスコア.譜面情報.nスコアランク[TJAPlayer3.stage選曲.n確定された曲の難易度[0]] == 0)
                        {
                            TJAPlayer3.stage選曲.act曲リスト.ScoreRankCount[nスコアランク - 1] += 1;
                        }
                        else if (TJAPlayer3.stage選曲.r確定されたスコア.譜面情報.nスコアランク[TJAPlayer3.stage選曲.n確定された曲の難易度[0]] < nスコアランク)
                        {
                            TJAPlayer3.stage選曲.act曲リスト.ScoreRankCount[nスコアランク - 1] += 1;
                            TJAPlayer3.stage選曲.act曲リスト.ScoreRankCount[TJAPlayer3.stage選曲.r確定されたスコア.譜面情報.nスコアランク[TJAPlayer3.stage選曲.n確定された曲の難易度[0]] - 1] -= 1;
                        }
                    }

                    if (nクリア != 0)
                    {
                        if (TJAPlayer3.stage選曲.r確定されたスコア.譜面情報.nクリア[TJAPlayer3.stage選曲.n確定された曲の難易度[0]] == 0)
                        {
                            TJAPlayer3.stage選曲.act曲リスト.CrownCount[nクリア - 1] += 1;
                        }
                        else if (TJAPlayer3.stage選曲.r確定されたスコア.譜面情報.nクリア[TJAPlayer3.stage選曲.n確定された曲の難易度[0]] < nクリア)
                        {
                            TJAPlayer3.stage選曲.act曲リスト.CrownCount[nクリア - 1] += 1;
                            TJAPlayer3.stage選曲.act曲リスト.CrownCount[TJAPlayer3.stage選曲.r確定されたスコア.譜面情報.nクリア[TJAPlayer3.stage選曲.n確定された曲の難易度[0]] - 1] -= 1;
                        }
                    }
                }
            }

            if (!b最近遊んだ曲追加済み)
            {
                #region [ 選曲画面の譜面情報の更新 ]
                //---------------------
                if (!TJAPlayer3.bコンパクトモード)
                {
                    if (TJAPlayer3.stage選曲.n確定された曲の難易度[0] != (int)Difficulty.Dan && TJAPlayer3.stage選曲.n確定された曲の難易度[0] != (int)Difficulty.Tower)
                    {
                        Cスコア cスコア = TJAPlayer3.stage選曲.r確定されたスコア;

                        if (cスコア.譜面情報.nクリア[TJAPlayer3.stage選曲.n確定された曲の難易度[0]] < nクリア)
                        {
                            cスコア.譜面情報.nクリア[TJAPlayer3.stage選曲.n確定された曲の難易度[0]] = this.nクリア;
                        }

                        if (cスコア.譜面情報.nスコアランク[TJAPlayer3.stage選曲.n確定された曲の難易度[0]] < nスコアランク)
                        {
                            cスコア.譜面情報.nスコアランク[TJAPlayer3.stage選曲.n確定された曲の難易度[0]] = this.nスコアランク;
                        }
                    }
                }
                //---------------------
                #endregion

                foreach (var song in TJAPlayer3.Songs管理.list曲ルート)
                {
                    if (song.strジャンル == "最近遊んだ曲" && song.eノード種別 == C曲リストノード.Eノード種別.BOX)
                    {
                        song.list子リスト.Add(TJAPlayer3.stage選曲.r確定された曲.Clone());

                        foreach (var song2 in song.list子リスト)
                        {
                            song2.r親ノード   = song;
                            song2.strジャンル = "最近遊んだ曲";

                            if (song2.eノード種別 != C曲リストノード.Eノード種別.BACKBOX)
                            {
                                song2.BackColor = ColorTranslator.FromHtml("#164748");
                            }
                        }

                        if (song.list子リスト.Count >= 6)
                        {
                            song.list子リスト.RemoveAt(1);
                        }
                    }
                }

                b最近遊んだ曲追加済み = true;
            }
        }
Beispiel #10
0
		private Cスコア tSongsDBからスコアを1つ読み込む(BinaryReader br)
		{
			Cスコア cスコア = new Cスコア();
			cスコア.ファイル情報.ファイルの絶対パス = br.ReadString();
			cスコア.ファイル情報.フォルダの絶対パス = br.ReadString();
			cスコア.ファイル情報.最終更新日時 = new DateTime(br.ReadInt64());
			cスコア.ファイル情報.ファイルサイズ = br.ReadInt64();
			cスコア.ScoreIni情報.最終更新日時 = new DateTime(br.ReadInt64());
			cスコア.ScoreIni情報.ファイルサイズ = br.ReadInt64();
			cスコア.譜面情報.タイトル = br.ReadString();
			cスコア.譜面情報.アーティスト名 = br.ReadString();
			cスコア.譜面情報.コメント = br.ReadString();
			cスコア.譜面情報.ジャンル = br.ReadString();
			cスコア.譜面情報.Backgound = br.ReadString();
			cスコア.譜面情報.最大ランク = br.ReadInt32();
			cスコア.譜面情報.最大スキル = br.ReadDouble();
			cスコア.譜面情報.フルコンボ = br.ReadBoolean();
			cスコア.譜面情報.演奏回数 = br.ReadInt32();
			cスコア.譜面情報.演奏履歴.行1 = br.ReadString();
			cスコア.譜面情報.演奏履歴.行2 = br.ReadString();
			cスコア.譜面情報.演奏履歴.行3 = br.ReadString();
			cスコア.譜面情報.演奏履歴.行4 = br.ReadString();
			cスコア.譜面情報.演奏履歴.行5 = br.ReadString();
			cスコア.譜面情報.演奏履歴.行6 = br.ReadString();
			cスコア.譜面情報.演奏履歴.行7 = br.ReadString();
			cスコア.譜面情報.Bpm = br.ReadDouble();
			cスコア.譜面情報.Duration = br.ReadInt32();
			cスコア.譜面情報.strBGMファイル名 = br.ReadString();
			cスコア.譜面情報.SongVol = br.ReadInt32();
			var hasSongIntegratedLoudness = br.ReadBoolean();
			var songIntegratedLoudness = br.ReadDouble();
			var integratedLoudness = hasSongIntegratedLoudness ? new Lufs(songIntegratedLoudness) : default(Lufs?);
			var hasSongPeakLoudness = br.ReadBoolean();
			var songPeakLoudness = br.ReadDouble();
			var peakLoudness = hasSongPeakLoudness ? new Lufs(songPeakLoudness) : default(Lufs?);
			var songLoudnessMetadata = hasSongIntegratedLoudness
				? new LoudnessMetadata(integratedLoudness.Value, peakLoudness)
				: default(LoudnessMetadata?);
			cスコア.譜面情報.SongLoudnessMetadata = songLoudnessMetadata;
			cスコア.譜面情報.nデモBGMオフセット = br.ReadInt32();
			cスコア.譜面情報.b譜面分岐[0] = br.ReadBoolean();//2020.04.19 Mr-Ojii
			cスコア.譜面情報.b譜面分岐[1] = br.ReadBoolean();//ここら辺の配列になってるやつscore.iniに出力する方とdbに出力する方で
			cスコア.譜面情報.b譜面分岐[2] = br.ReadBoolean();//配列の数が違うから、[0]~[6]で統一。
			cスコア.譜面情報.b譜面分岐[3] = br.ReadBoolean();
			cスコア.譜面情報.b譜面分岐[4] = br.ReadBoolean();
			cスコア.譜面情報.b譜面分岐[5] = br.ReadBoolean();
			cスコア.譜面情報.b譜面分岐[6] = br.ReadBoolean();
			cスコア.譜面情報.bPapaMamaSupport[0] = br.ReadBoolean();
			cスコア.譜面情報.bPapaMamaSupport[1] = br.ReadBoolean();
			cスコア.譜面情報.bPapaMamaSupport[2] = br.ReadBoolean();
			cスコア.譜面情報.bPapaMamaSupport[3] = br.ReadBoolean();
			cスコア.譜面情報.bPapaMamaSupport[4] = br.ReadBoolean();
			cスコア.譜面情報.bPapaMamaSupport[5] = br.ReadBoolean();
			cスコア.譜面情報.bPapaMamaSupport[6] = br.ReadBoolean();
			cスコア.譜面情報.nハイスコア[0] = br.ReadInt32();
			cスコア.譜面情報.nハイスコア[1] = br.ReadInt32();
			cスコア.譜面情報.nハイスコア[2] = br.ReadInt32();
			cスコア.譜面情報.nハイスコア[3] = br.ReadInt32();
			cスコア.譜面情報.nハイスコア[4] = br.ReadInt32();
			cスコア.譜面情報.nハイスコア[5] = br.ReadInt32();
			cスコア.譜面情報.nハイスコア[6] = br.ReadInt32();
			cスコア.譜面情報.nSecondScore[0] = br.ReadInt32();
			cスコア.譜面情報.nSecondScore[1] = br.ReadInt32();
			cスコア.譜面情報.nSecondScore[2] = br.ReadInt32();
			cスコア.譜面情報.nSecondScore[3] = br.ReadInt32();
			cスコア.譜面情報.nSecondScore[4] = br.ReadInt32();
			cスコア.譜面情報.nSecondScore[5] = br.ReadInt32();
			cスコア.譜面情報.nSecondScore[6] = br.ReadInt32();
			cスコア.譜面情報.nThirdScore[0] = br.ReadInt32();
			cスコア.譜面情報.nThirdScore[1] = br.ReadInt32();
			cスコア.譜面情報.nThirdScore[2] = br.ReadInt32();
			cスコア.譜面情報.nThirdScore[3] = br.ReadInt32();
			cスコア.譜面情報.nThirdScore[4] = br.ReadInt32();
			cスコア.譜面情報.nThirdScore[5] = br.ReadInt32();
			cスコア.譜面情報.nThirdScore[6] = br.ReadInt32();
			cスコア.譜面情報.strHiScorerName[0] = br.ReadString();
			cスコア.譜面情報.strHiScorerName[1] = br.ReadString();
			cスコア.譜面情報.strHiScorerName[2] = br.ReadString();
			cスコア.譜面情報.strHiScorerName[3] = br.ReadString();
			cスコア.譜面情報.strHiScorerName[4] = br.ReadString();
			cスコア.譜面情報.strHiScorerName[5] = br.ReadString();
			cスコア.譜面情報.strHiScorerName[6] = br.ReadString();
			cスコア.譜面情報.strSecondScorerName[0] = br.ReadString();
			cスコア.譜面情報.strSecondScorerName[1] = br.ReadString();
			cスコア.譜面情報.strSecondScorerName[2] = br.ReadString();
			cスコア.譜面情報.strSecondScorerName[3] = br.ReadString();
			cスコア.譜面情報.strSecondScorerName[4] = br.ReadString();
			cスコア.譜面情報.strSecondScorerName[5] = br.ReadString();
			cスコア.譜面情報.strSecondScorerName[6] = br.ReadString();
			cスコア.譜面情報.strThirdScorerName[0] = br.ReadString();
			cスコア.譜面情報.strThirdScorerName[1] = br.ReadString();
			cスコア.譜面情報.strThirdScorerName[2] = br.ReadString();
			cスコア.譜面情報.strThirdScorerName[3] = br.ReadString();
			cスコア.譜面情報.strThirdScorerName[4] = br.ReadString();
			cスコア.譜面情報.strThirdScorerName[5] = br.ReadString();
			cスコア.譜面情報.strThirdScorerName[6] = br.ReadString();
			cスコア.譜面情報.strサブタイトル = br.ReadString();
			cスコア.譜面情報.nレベル[0] = br.ReadInt32();
			cスコア.譜面情報.nレベル[1] = br.ReadInt32();
			cスコア.譜面情報.nレベル[2] = br.ReadInt32();
			cスコア.譜面情報.nレベル[3] = br.ReadInt32();
			cスコア.譜面情報.nレベル[4] = br.ReadInt32();
			cスコア.譜面情報.nレベル[5] = br.ReadInt32();
			cスコア.譜面情報.nレベル[6] = br.ReadInt32();
			cスコア.譜面情報.n王冠[0] = br.ReadInt32();
			cスコア.譜面情報.n王冠[1] = br.ReadInt32();
			cスコア.譜面情報.n王冠[2] = br.ReadInt32();
			cスコア.譜面情報.n王冠[3] = br.ReadInt32();
			cスコア.譜面情報.n王冠[4] = br.ReadInt32();
			cスコア.譜面情報.n王冠[5] = br.ReadInt32();
			cスコア.譜面情報.n王冠[6] = br.ReadInt32();
			cスコア.譜面情報.b譜面が存在する[0] = br.ReadBoolean();
			cスコア.譜面情報.b譜面が存在する[1] = br.ReadBoolean();
			cスコア.譜面情報.b譜面が存在する[2] = br.ReadBoolean();
			cスコア.譜面情報.b譜面が存在する[3] = br.ReadBoolean();
			cスコア.譜面情報.b譜面が存在する[4] = br.ReadBoolean();
			cスコア.譜面情報.b譜面が存在する[5] = br.ReadBoolean();
			cスコア.譜面情報.b譜面が存在する[6] = br.ReadBoolean();
			cスコア.譜面情報.b歌詞あり = br.ReadBoolean();


			//Debug.WriteLine( "songs.db: " + cスコア.ファイル情報.ファイルの絶対パス );
			return cスコア;
		}
Beispiel #11
0
        private async void tプレビューサウンドの作成()
        {
            Cスコア cスコア = TJAPlayer3.stage選曲.act曲リスト.r現在選択中のスコア;

            if ((cスコア != null) && !string.IsNullOrEmpty(cスコア.譜面情報.strBGMファイル名) && TJAPlayer3.stage選曲.eフェーズID != CStage.Eフェーズ.選曲_NowLoading画面へのフェードアウト)
            {
                string strPreviewFilename = cスコア.ファイル情報.フォルダの絶対パス + cスコア.譜面情報.strBGMファイル名;
                try
                {
                    // 2020.06.15 Mr-Ojii TJAP2fPCより拝借-----------
                    // 2019.03.22 kairera0467 簡易マルチスレッド化
                    Task <CSound> task = Task.Run <CSound>(() => {
                        token = new CancellationTokenSource();
                        return(this.tプレビューサウンドの作成MT(strPreviewFilename));
                    });
                    CSound tmps = await task;

                    token.Token.ThrowIfCancellationRequested();
                    this.tサウンドの停止MT();

                    this.sound = tmps;
                    //------------

                    // 2018-08-27 twopointzero - DO attempt to load (or queue scanning) loudness metadata here.
                    //                           Initialization, song enumeration, and/or interactions may have
                    //                           caused background scanning and the metadata may now be available.
                    //                           If is not yet available then we wish to queue scanning.
                    var loudnessMetadata = cスコア.譜面情報.SongLoudnessMetadata
                                           ?? LoudnessMetadataScanner.LoadForAudioPath(strPreviewFilename);
                    TJAPlayer3.SongGainController.Set(cスコア.譜面情報.SongVol, loudnessMetadata, this.sound);

                    this.long再生位置 = -1;

                    if (ctBGMフェードイン用 != null)
                    {
                        this.sound.AutomationLevel = 100 - this.ctBGMフェードイン用.n現在の値;
                    }

                    this.sound.t再生を開始する(true);
                    if (this.long再生位置 == -1)
                    {
                        this.long再生開始時のシステム時刻 = CSound管理.rc演奏用タイマ.nシステム時刻ms;
                        this.long再生位置         = cスコア.譜面情報.nデモBGMオフセット;
                        this.sound.t再生位置を変更する(cスコア.譜面情報.nデモBGMオフセット);
                        this.long再生位置 = CSound管理.rc演奏用タイマ.nシステム時刻ms - this.long再生開始時のシステム時刻;
                    }

                    this.str現在のファイル名 = strPreviewFilename;
                    this.tBGMフェードアウト開始();
                    Trace.TraceInformation("プレビューサウンドを生成しました。({0})", strPreviewFilename);
                }
                catch (Exception e)
                {
                    Trace.TraceError(e.ToString());
                    Trace.TraceError("プレビューサウンドの生成に失敗しました。({0})", strPreviewFilename);
                    if (this.sound != null)
                    {
                        this.sound.Dispose();
                    }
                    this.sound = null;
                }
            }
        }
Beispiel #12
0
        // CStage 実装

        public override void On活性化()
        {
            Trace.TraceInformation("結果ステージを活性化します。");
            Trace.Indent();
            var random = rng.Next(1, 99);

            if (random <= 24)
            {
                this.bgm結果画面 = new CSkin.Cシステムサウンド(@"Sounds\Result BGM.ogg", false, false, ESoundGroup.SongPlayback);
            }
            else if (random <= 50 && random >= 25)
            {
                this.bgm結果画面 = new CSkin.Cシステムサウンド(@"Sounds\Result BGM_1.ogg", false, false, ESoundGroup.SongPlayback);
            }
            else if (random <= 75 && random >= 51)
            {
                this.bgm結果画面 = new CSkin.Cシステムサウンド(@"Sounds\Result BGM_2.ogg", false, false, ESoundGroup.SongPlayback);
            }
            else if (random <= 99 && random >= 76)
            {
                this.bgm結果画面 = new CSkin.Cシステムサウンド(@"Sounds\Result BGM_3.ogg", false, false, ESoundGroup.SongPlayback);
            }
            try
            {
                #region [ 初期化 ]
                //---------------------
                this.eフェードアウト完了時の戻り値 = E戻り値.継続;
                this.bアニメが完了         = false;
                this.bIsCheckedWhetherResultScreenShouldSaveOrNot = false;                                              // #24609 2011.3.14 yyagi
                this.b新記録スキル = false;
                this.b新記録ランク = false;
                //---------------------
                #endregion

                #region [ 結果の計算 ]
                //---------------------
                for (int i = 0; i < 1; i++)
                {
                    this.nランク値     = -1;
                    this.fPerfect率 = this.fGreat率 = this.fGood率 = this.fPoor率 = this.fMiss率 = 0.0f;                     // #28500 2011.5.24 yyagi
                    if ((((i != 0) || (TJAPlayer3.DTX[0].bチップがある.Drums))))
                    {
                        CScoreIni.C演奏記録 part = this.st演奏記録[0];

                        bool bIsAutoPlay = true;
                        bIsAutoPlay = TJAPlayer3.ConfigIni.b太鼓パートAutoPlay[0];

                        this.fPerfect率 = bIsAutoPlay ? 0f : ((100f * part.nPerfect数) / ((float)part.n全チップ数));
                        this.fGreat率   = bIsAutoPlay ? 0f : ((100f * part.nGreat数) / ((float)part.n全チップ数));
                        this.fGood率    = bIsAutoPlay ? 0f : ((100f * part.nGood数) / ((float)part.n全チップ数));
                        this.fPoor率    = bIsAutoPlay ? 0f : ((100f * part.nPoor数) / ((float)part.n全チップ数));
                        this.fMiss率    = bIsAutoPlay ? 0f : ((100f * part.nMiss数) / ((float)part.n全チップ数));
                        this.nランク値     = CScoreIni.tランク値を計算して返す(part);
                    }
                }
                this.n総合ランク値 = CScoreIni.t総合ランク値を計算して返す(this.st演奏記録[0]);
                //---------------------
                #endregion

                #region [ .score.ini の作成と出力 ]
                //---------------------
                string    str = TJAPlayer3.DTX[0].strファイル名の絶対パス + ".score.ini";
                CScoreIni ini = new CScoreIni(str);

                bool b今までにフルコンボしたことがある = false;

                for (int i = 0; i < 1; i++)
                {
                    // フルコンボチェックならびに新記録ランクチェックは、ini.Record[] が、スコアチェックや演奏型スキルチェックの IF 内で書き直されてしまうよりも前に行う。(2010.9.10)

                    b今までにフルコンボしたことがある = ini.stセクション.HiScoreDrums.bフルコンボである | ini.stセクション.HiSkillDrums.bフルコンボである;

                    // #24459 上記の条件だと[HiSkill.***]でのランクしかチェックしていないので、BestRankと比較するよう変更。
                    if (this.nランク値 >= 0 && ini.stファイル.BestRank > this.nランク値)                                    // #24459 2011.3.1 yyagi update BestRank
                    {
                        this.b新記録ランク        = true;
                        ini.stファイル.BestRank = this.nランク値;
                    }

                    // 新記録スコアチェック
                    if ((this.st演奏記録[0].nハイスコア[TJAPlayer3.stage選曲.n確定された曲の難易度[0]] > ini.stセクション.HiScoreDrums.nハイスコア[TJAPlayer3.stage選曲.n確定された曲の難易度[0]]) && !TJAPlayer3.ConfigIni.b太鼓パートAutoPlay[0])                       //2020.04.18 Mr-Ojii それぞれの難易度のハイスコアでハイスコアを変更するように修正
                    {
                        ini.stセクション.HiScoreDrums = this.st演奏記録[0];
                    }

                    // 新記録スキルチェック
                    if (this.st演奏記録[0].db演奏型スキル値 > ini.stセクション.HiSkillDrums.db演奏型スキル値)
                    {
                        this.b新記録スキル             = true;
                        ini.stセクション.HiSkillDrums = this.st演奏記録[0];
                    }

                    // ラストプレイ #23595 2011.1.9 ikanick
                    // オートじゃなければプレイ結果を書き込む
                    if (TJAPlayer3.ConfigIni.b太鼓パートAutoPlay[0] == false)
                    {
                        ini.stセクション.LastPlayDrums = this.st演奏記録[0];
                    }

                    // #23596 10.11.16 add ikanick オートじゃないならクリア回数を1増やす
                    //        11.02.05 bオート to t更新条件を取得する use      ikanick
                    bool b更新が必要か否か = false;
                    CScoreIni.t更新条件を取得する(out b更新が必要か否か);

                    if (b更新が必要か否か)
                    {
                        switch (i)
                        {
                        case 0:
                            ini.stファイル.ClearCountDrums++;
                            break;

                        default:
                            throw new Exception("クリア回数増加のk(0)が範囲外です。");
                        }
                    }
                    //---------------------------------------------------------------------/
                }
                if (TJAPlayer3.ConfigIni.bScoreIniを出力する)
                {
                    ini.t書き出し(str);
                }
                //---------------------
                #endregion

                #region [ 選曲画面の譜面情報の更新 ]
                //---------------------

                {
                    Cスコア cスコア      = TJAPlayer3.stage選曲.r確定されたスコア;
                    bool b更新が必要か否か = false;
                    CScoreIni.t更新条件を取得する(out b更新が必要か否か);
                    for (int m = 0; m < 1; m++)
                    {
                        if (b更新が必要か否か)
                        {
                            // FullCombo した記録を FullCombo なしで超えた場合、FullCombo マークが消えてしまう。
                            // → FullCombo は、最新記録と関係なく、一度達成したらずっとつくようにする。(2010.9.11)
                            cスコア.譜面情報.フルコンボ = this.st演奏記録[0].bフルコンボである | b今までにフルコンボしたことがある;

                            if (this.b新記録スキル)
                            {
                                cスコア.譜面情報.最大スキル = this.st演奏記録[0].db演奏型スキル値;
                            }

                            if (this.b新記録ランク)
                            {
                                cスコア.譜面情報.最大ランク = this.nランク値;
                            }
                            cスコア.譜面情報.n王冠    = st演奏記録[0].n王冠;                         //2020.05.22 Mr-Ojii データが保存されない問題の解決策。
                            cスコア.譜面情報.nハイスコア = st演奏記録[0].nハイスコア;
                        }
                    }
                    TJAPlayer3.stage選曲.r確定されたスコア = cスコア;
                }
                //---------------------
                #endregion

                // Discord Presenseの更新
                Discord.UpdatePresence(TJAPlayer3.DTX[0].TITLE + TJAPlayer3.DTX[0].EXTENSION, Properties.Discord.Stage_Result + (TJAPlayer3.ConfigIni.b太鼓パートAutoPlay[0] == true ? " (" + Properties.Discord.Info_IsAuto + ")" : ""), TJAPlayer3.StartupTime);

                base.On活性化();
            }
            finally
            {
                Trace.TraceInformation("結果ステージの活性化を完了しました。");
                Trace.Unindent();
            }
        }
Beispiel #13
0
        public override int On進行描画()
        {
            if (!base.b活性化してない)
            {
                int num;
                if (base.b初めての進行描画)
                {
                    this.ct登場用 = new CCounter(0, 100, 5, TJAPlayer3.Timer);
                    this.actFI.tフェードイン開始();
                    base.eフェーズID = CStage.Eフェーズ.共通_フェードイン;
                    if (this.rResultSound != null)
                    {
                        this.rResultSound.t再生を開始する();
                    }
                    base.b初めての進行描画 = false;
                }
                this.bアニメが完了 = true;
                if (this.ct登場用.b進行中)
                {
                    this.ct登場用.t進行();
                    if (this.ct登場用.b終了値に達した)
                    {
                        this.ct登場用.t停止();
                    }
                    else
                    {
                        this.bアニメが完了 = false;
                    }
                }

                // 描画

                if (TJAPlayer3.Tx.Result_Background != null)
                {
                    if (this.actParameterPanel.ct全体アニメ.n現在の値 >= 2000 + (this.actParameterPanel.ctゲージアニメーション.n終了値 * 66) + 8360 - 85)
                    {
                        if (this.st演奏記録.Drums.fゲージ >= 80.0)
                        {
                            TJAPlayer3.Tx.Result_Background[1].Opacity = (int)(this.actParameterPanel.ct全体アニメ.n現在の値 - (10275 + (this.actParameterPanel.ctゲージアニメーション.n終了値 * 66))) * 3;
                            TJAPlayer3.Tx.Result_Mountain[1].Opacity   = (int)(this.actParameterPanel.ct全体アニメ.n現在の値 - (10275 + (this.actParameterPanel.ctゲージアニメーション.n終了値 * 66))) * 3;
                            TJAPlayer3.Tx.Result_Mountain[0].Opacity   = (int)255 - (int)(this.actParameterPanel.ct全体アニメ.n現在の値 - (10275 + (this.actParameterPanel.ctゲージアニメーション.n終了値 * 66))) * 3;

                            if (this.actParameterPanel.ctMountain_ClearIn.n現在の値 <= 90)
                            {
                                TJAPlayer3.Tx.Result_Mountain[1].vc拡大縮小倍率.Y = 1.0f - (float)Math.Sin((float)this.actParameterPanel.ctMountain_ClearIn.n現在の値 * (Math.PI / 180)) * 0.18f;
                            }
                            else if (this.actParameterPanel.ctMountain_ClearIn.n現在の値 <= 225)
                            {
                                TJAPlayer3.Tx.Result_Mountain[1].vc拡大縮小倍率.Y = 0.82f + (float)Math.Sin((float)(this.actParameterPanel.ctMountain_ClearIn.n現在の値 - 90) / 1.5f * (Math.PI / 180)) * 0.58f;
                            }
                            else if (this.actParameterPanel.ctMountain_ClearIn.n現在の値 <= 245)
                            {
                                TJAPlayer3.Tx.Result_Mountain[1].vc拡大縮小倍率.Y = 1.4f;
                            }
                            else if (this.actParameterPanel.ctMountain_ClearIn.n現在の値 <= 335)
                            {
                                TJAPlayer3.Tx.Result_Mountain[1].vc拡大縮小倍率.Y = 0.9f + (float)Math.Sin((float)(this.actParameterPanel.ctMountain_ClearIn.n現在の値 - 155) * (Math.PI / 180)) * 0.5f;
                            }
                            else if (this.actParameterPanel.ctMountain_ClearIn.n現在の値 <= 515)
                            {
                                TJAPlayer3.Tx.Result_Mountain[1].vc拡大縮小倍率.Y = 0.9f + (float)Math.Sin((float)(this.actParameterPanel.ctMountain_ClearIn.n現在の値 - 335) * (Math.PI / 180)) * 0.4f;
                            }
                        }
                    }
                    else
                    {
                        TJAPlayer3.Tx.Result_Background[1].Opacity = 0;
                        TJAPlayer3.Tx.Result_Mountain[0].Opacity   = 255;
                        TJAPlayer3.Tx.Result_Mountain[1].Opacity   = 0;
                    }

                    TJAPlayer3.Tx.Result_Background[0].t2D描画(TJAPlayer3.app.Device, 0, 0);
                    TJAPlayer3.Tx.Result_Background[1].t2D描画(TJAPlayer3.app.Device, 0, 0);
                    TJAPlayer3.Tx.Result_Mountain[0].t2D描画(TJAPlayer3.app.Device, 0, 0);
                    TJAPlayer3.Tx.Result_Mountain[1].t2D拡大率考慮下基準描画(TJAPlayer3.app.Device, 0, 720);
                }

                if (!b音声再生 && !TJAPlayer3.Skin.bgmリザルトイン音.b再生中)
                {
                    TJAPlayer3.Skin.bgmリザルト音.t再生する();
                    b音声再生 = true;
                }

                if (TJAPlayer3.Tx.Result_Header != null)
                {
                    TJAPlayer3.Tx.Result_Header.t2D描画(TJAPlayer3.app.Device, 0, 0);
                }
                if (this.actParameterPanel.On進行描画() == 0)
                {
                    this.bアニメが完了 = false;
                }

                if (this.actSongBar.On進行描画() == 0)
                {
                    this.bアニメが完了 = false;
                }

                #region ネームプレート
                for (int i = 0; i < TJAPlayer3.ConfigIni.nPlayerCount; i++)
                {
                    TJAPlayer3.NamePlate.tNamePlateDraw(28, 621, i);
                }
                #endregion

                if (base.eフェーズID == CStage.Eフェーズ.共通_フェードイン)
                {
                    if (this.actFI.On進行描画() != 0)
                    {
                        base.eフェーズID = CStage.Eフェーズ.共通_通常状態;
                    }
                }
                else if ((base.eフェーズID == CStage.Eフェーズ.共通_フェードアウト))                         //&& ( this.actFO.On進行描画() != 0 ) )
                {
                    return((int)this.eフェードアウト完了時の戻り値);
                }

                #region [ #24609 2011.3.14 yyagi ランク更新or演奏型スキル更新時、リザルト画像をpngで保存する ]
                if (this.bアニメが完了 == true && this.bIsCheckedWhetherResultScreenShouldSaveOrNot == false &&               // #24609 2011.3.14 yyagi; to save result screen in case BestRank or HiSkill.
                    TJAPlayer3.ConfigIni.bScoreIniを出力する &&
                    TJAPlayer3.ConfigIni.bIsAutoResultCapture)                                                                      // #25399 2011.6.9 yyagi
                {
                    CheckAndSaveResultScreen(true);
                    this.bIsCheckedWhetherResultScreenShouldSaveOrNot = true;
                }
                #endregion

                // キー入力

                if (TJAPlayer3.act現在入力を占有中のプラグイン == null)
                {
                    if (base.eフェーズID == CStage.Eフェーズ.共通_通常状態)
                    {
                        if (TJAPlayer3.Input管理.Keyboard.bキーが押された((int)SlimDXKeys.Key.Escape))
                        {
                            TJAPlayer3.Skin.bgmリザルト音.t停止する();
                            TJAPlayer3.Skin.sound決定音.t再生する();
                            actFI.tフェードアウト開始();
                            base.eフェーズID         = CStage.Eフェーズ.共通_フェードアウト;
                            this.eフェードアウト完了時の戻り値 = E戻り値.完了;
                        }
                        if (((TJAPlayer3.Pad.b押されたDGB(Eパッド.CY) || TJAPlayer3.Pad.b押された(E楽器パート.DRUMS, Eパッド.RD)) || (TJAPlayer3.Pad.b押された(E楽器パート.DRUMS, Eパッド.LC) || (TJAPlayer3.Pad.b押されたDGB(Eパッド.LRed) || (TJAPlayer3.Pad.b押されたDGB(Eパッド.RRed) || TJAPlayer3.Input管理.Keyboard.bキーが押された((int)SlimDXKeys.Key.Return))))))
                        {
                            if (this.actParameterPanel.ct全体アニメ.n現在の値 <= 2000 + (this.actParameterPanel.ctゲージアニメーション.n終了値 * 66) + 8360 - 85)
                            {
                                this.actParameterPanel.ct全体アニメ.n現在の値      = 2000 + (int)(this.actParameterPanel.ctゲージアニメーション.n終了値 * 66) + 8360 - 85;
                                this.actParameterPanel.ctゲージアニメーション.n現在の値 = (int)actParameterPanel.ctゲージアニメーション.n終了値;
                                this.EndAnime = true;
                                this.actParameterPanel.ctEndAnime.t開始(0, 360, 1, TJAPlayer3.Timer);
                                this.actParameterPanel.ctMountain_ClearIn.t開始(0, 515, 3, TJAPlayer3.Timer);
                            }
                            else
                            {
                                TJAPlayer3.Skin.sound決定音.t再生する();
                                actFI.tフェードアウト開始();

                                foreach (var song in TJAPlayer3.Songs管理.list曲ルート)
                                {
                                    if (song.strジャンル == "最近遊んだ曲" && song.eノード種別 == C曲リストノード.Eノード種別.BOX)
                                    {
                                        song.list子リスト.Add(TJAPlayer3.stage選曲.r確定された曲.Clone());

                                        foreach (var song2 in song.list子リスト)
                                        {
                                            song2.r親ノード   = song;
                                            song2.strジャンル = "最近遊んだ曲";

                                            if (song2.eノード種別 != C曲リストノード.Eノード種別.BACKBOX)
                                            {
                                                song2.BackColor = ColorTranslator.FromHtml("#164748");
                                            }
                                        }

                                        if (song.list子リスト.Count >= 6)
                                        {
                                            song.list子リスト.RemoveAt(1);
                                        }
                                    }
                                }

                                if (TJAPlayer3.stage選曲.n確定された曲の難易度 != (int)Difficulty.Dan && TJAPlayer3.stage選曲.n確定された曲の難易度 != (int)Difficulty.Tower)
                                {
                                    if (nスコアランク != 0)
                                    {
                                        if (TJAPlayer3.stage選曲.r確定されたスコア.譜面情報.nスコアランク[TJAPlayer3.stage選曲.n確定された曲の難易度] == 0)
                                        {
                                            TJAPlayer3.stage選曲.act曲リスト.ScoreRankCount[nスコアランク - 1] += 1;
                                        }
                                        else if (TJAPlayer3.stage選曲.r確定されたスコア.譜面情報.nスコアランク[TJAPlayer3.stage選曲.n確定された曲の難易度] < nスコアランク)
                                        {
                                            TJAPlayer3.stage選曲.act曲リスト.ScoreRankCount[nスコアランク - 1] += 1;
                                            TJAPlayer3.stage選曲.act曲リスト.ScoreRankCount[TJAPlayer3.stage選曲.r確定されたスコア.譜面情報.nスコアランク[TJAPlayer3.stage選曲.n確定された曲の難易度] - 1] -= 1;
                                        }
                                    }

                                    if (nクリア != 0)
                                    {
                                        if (TJAPlayer3.stage選曲.r確定されたスコア.譜面情報.nクリア[TJAPlayer3.stage選曲.n確定された曲の難易度] == 0)
                                        {
                                            TJAPlayer3.stage選曲.act曲リスト.CrownCount[nクリア - 1] += 1;
                                        }
                                        else if (TJAPlayer3.stage選曲.r確定されたスコア.譜面情報.nクリア[TJAPlayer3.stage選曲.n確定された曲の難易度] < nクリア)
                                        {
                                            TJAPlayer3.stage選曲.act曲リスト.CrownCount[nクリア - 1] += 1;
                                            TJAPlayer3.stage選曲.act曲リスト.CrownCount[TJAPlayer3.stage選曲.r確定されたスコア.譜面情報.nクリア[TJAPlayer3.stage選曲.n確定された曲の難易度] - 1] -= 1;
                                        }
                                    }
                                }

                                #region [ 選曲画面の譜面情報の更新 ]
                                //---------------------
                                if (!TJAPlayer3.bコンパクトモード)
                                {
                                    if (TJAPlayer3.stage選曲.n確定された曲の難易度 != (int)Difficulty.Dan && TJAPlayer3.stage選曲.n確定された曲の難易度 != (int)Difficulty.Tower)
                                    {
                                        Cスコア cスコア = TJAPlayer3.stage選曲.r確定されたスコア;

                                        if (cスコア.譜面情報.nクリア[TJAPlayer3.stage選曲.n確定された曲の難易度] < nクリア)
                                        {
                                            cスコア.譜面情報.nクリア[TJAPlayer3.stage選曲.n確定された曲の難易度] = this.nクリア;
                                        }

                                        if (cスコア.譜面情報.nスコアランク[TJAPlayer3.stage選曲.n確定された曲の難易度] < nスコアランク)
                                        {
                                            cスコア.譜面情報.nスコアランク[TJAPlayer3.stage選曲.n確定された曲の難易度] = this.nスコアランク;
                                        }
                                    }
                                }
                                //---------------------
                                #endregion

                                if (TJAPlayer3.stage選曲.r現在選択中の曲.r親ノード != null)
                                {
                                    TJAPlayer3.stage選曲.act曲リスト.tBOXを出る();
                                }
                                else
                                {
                                    base.eフェーズID         = CStage.Eフェーズ.共通_フェードアウト;
                                    this.eフェードアウト完了時の戻り値 = E戻り値.完了;
                                    TJAPlayer3.Skin.bgmリザルト音.t停止する();
                                    TJAPlayer3.Skin.sound決定音.t再生する();
                                }
                            }
                        }
                    }
                }
            }
            return(0);
        }