// 進行と描画 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再開 } }
// 進行と描画 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再開 } }
/// <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; } } }
// 進行と描画 public void 進行描画する(float left, float top, ランク種別 rank) { this._ランク画像[rank].描画する(left, top, X方向拡大率: 3f, Y方向拡大率: 3f); }
// 進行と描画 public void 進行描画する(ランク種別 rank) { this._ランク画像[rank].描画する(200f, 300f, 1f, 3f, 3f); }