Exemplo n.º 1
0
        // 進行と描画


        public void 進行描画する(DeviceContext d2ddc, ランク種別 rank)
        {
            if (this._初めての進行描画)
            {
                this._初めての進行描画 = false;
                this._Rank     = rank;

                // 0.6 秒後にエフェクト開始
                this._エフェクト開始タイマ = new Timer((state) => { this._エフェクト開始イベント.Set(); }, null, 600, Timeout.Infinite);
            }

            if (0 > this._ランクエフェクトハンドル)
            {
                if (this._エフェクト開始イベント.IsSet)
                {
                    this._ランクエフェクトを開始する();
                    this._エフェクト開始イベント.Reset();
                }
            }
            else
            {
                d2ddc.EndDraw();   // D2D中断

                Global.Effekseer.描画する(this._ランクエフェクトハンドル);

                d2ddc.BeginDraw(); // D2D再開
            }
        }
Exemplo n.º 2
0
        // 進行と描画


        public void 進行描画する(DeviceContext dc, ランク種別 rank)
        {
            this._Rank = rank;

            if (0 > this._ランクエフェクトハンドル &&
                this._エフェクト開始イベント.IsSet)
            {
                this._ランクエフェクトを開始する();
                this._エフェクト開始イベント.Reset();
            }

            if (0 <= this._ランクエフェクトハンドル)
            {
                dc.EndDraw();   // D2D中断
                Global.Effekseer.描画する(this._ランクエフェクトハンドル);
                dc.BeginDraw(); // D2D再開
            }
        }
Exemplo n.º 3
0
        /// <summary>
        ///		ヒット数を加算し、各プロパティを更新する。
        /// </summary>
        public void ヒット数を加算する(判定種別 judge, bool auto, int 加算値 = 1)
        {
            // (1) ヒット数を加算する。
            {
                this._判定toヒット数[judge] += 加算値;

                if (!auto)
                {
                    this._判定toヒット数Auto含まない[judge] += 加算値;
                }
            }

            // (2) コンボを加算する。
            {
                bool コンボ切れ = (judge == 判定種別.OK || judge == 判定種別.MISS);

                if (コンボ切れ)
                {
                    this.Combo = 0;
                }
                else
                {
                    this.Combo++;
                    this.MaxCombo = Math.Max(this.Combo, this.MaxCombo);
                }
            }

            // (3) スコアを加算する。
            {
                double 基礎点  = 1000000.0 / (1275.0 + 50.0 * (this.総ノーツ数 - 50));
                int    コンボ数 = Math.Min(this.Combo, 50);

                this.Score += (int)Math.Floor(基礎点 * コンボ数 * this._判定値表[judge]);
            }

            // (4) 達成率を更新する。
            {
                double 判定値        = Math.Floor(100.0 * ((this._判定toヒット数[判定種別.PERFECT] * 85.0 + this._判定toヒット数[判定種別.GREAT] * 35.0) / this.総ノーツ数)) / 100.0; // 小数第3位以下切り捨て
                double フレーズコンボ成功率 = 0.0;                                                                                                                  // 未対応
                double COMBO値     = Math.Floor(100.0 * ((this.MaxCombo * 5.0 / this.総ノーツ数) + (フレーズコンボ成功率 * 10.0))) / 100.0;                               // 小数第3位以下切り捨て

                this.Achievement = (float)(Math.Floor(100.0 * ((判定値 + COMBO値) * this._オプション補正)) / 100.0);                                                 // 小数第3位以下切り捨て
            }

            // (5) SKILL値を更新する。
            this.Skill = (float)(Math.Floor(100.0 * ((this.Achievement * this._譜面レベル * 20.0) / 100.0)) / 100.0);                // 小数第3位以下切り捨て

            // (6) エキサイトゲージ → ここからは呼び出さない。(AutoPlayと区別がつかないため)

            // (7) ランクを更新する。
            {
                int Perfect = this._判定toヒット数Auto含まない[判定種別.PERFECT];
                int Great   = this._判定toヒット数Auto含まない[判定種別.GREAT];
                int Good    = this._判定toヒット数Auto含まない[判定種別.GOOD];
                int Ok      = this._判定toヒット数Auto含まない[判定種別.OK];
                int Miss    = this._判定toヒット数Auto含まない[判定種別.MISS];
                int Total   = Perfect + Great + Good + Ok + Miss;

                if (0 == Total)
                {
                    this.ランク = ランク種別.SS;    // 全AUTOならSS
                }
                else
                {
                    var rate = ((double)(Perfect + Great)) / ((double)Total);

                    this.ランク =
                        (1.00 == rate) ? ランク種別.SS :
                        (0.95 <= rate) ? ランク種別.S :
                        (0.90 <= rate) ? ランク種別.A :
                        (0.85 <= rate) ? ランク種別.B :
                        (0.80 <= rate) ? ランク種別.C :
                        (0.70 <= rate) ? ランク種別.D : ランク種別.E;
                }
            }
        }
Exemplo n.º 4
0
        // 進行と描画


        public void 進行描画する(float left, float top, ランク種別 rank)
        {
            this._ランク画像[rank].描画する(left, top, X方向拡大率: 3f, Y方向拡大率: 3f);
        }
Exemplo n.º 5
0
        // 進行と描画


        public void 進行描画する(ランク種別 rank)
        {
            this._ランク画像[rank].描画する(200f, 300f, 1f, 3f, 3f);
        }