if( y < -40.0 ) // y が画面上端より上に出ていればそこでチップのループ描画は終了。-40dpx はチップが隠れるであろう適当なマージン。
break;
+ #region " チップが描画開始チップであり、かつ、そのY座標が画面下端を超えたなら、描画開始チップ番号を更新する。"
+ //----------------
+ if( ( this.描画開始チップ番号 == i ) && ( this.画面の高さdpx + 40.0 < y ) ) // +40 dpx はチップが(以下同上
+ {
+ this.描画開始チップ番号++;
+ if( 演奏スコア.チップリスト.Count <= this.描画開始チップ番号 )
+ {
+ this.ステージクリア();
+ this.描画開始チップ番号 = -1; // 演奏終了。
+ }
+ }
+ //----------------
+ #endregion
+
// チップを1つ描画する。
if( チップ.可視 )
描画アクション( dr, チップ, (float) y );
}
}
-
/// <summary>
/// 音声の再生と演奏用入力は、描画処理とは並行して、高頻度に行う。
/// </summary>
if( y < -40.0 ) // y が画面上端より上に出ていればそこでチップのループ描画は終了。-40dpx はチップが隠れるであろう適当なマージン。
break;
- #region " チップが描画開始チップであり、かつ、そのY座標が画面下端を超えたなら、描画開始チップ番号を更新する。"
- //----------------
- if( ( this.描画開始チップ番号 == i ) && ( this.画面の高さdpx + 40.0 < y ) ) // +40 dpx はチップが(以下同上
- {
- this.描画開始チップ番号++;
- if( 演奏スコア.チップリスト.Count <= this.描画開始チップ番号 )
- {
- this.ステージクリア();
- this.描画開始チップ番号 = -1; // 演奏終了。
- }
- }
- //----------------
- #endregion
- #region " AutoPlay チップなら、自動ヒット判定を行う。"
- //----------------
- if( ( チップ.ヒットされていない ) && // チップが未ヒット、かつ、
- ( StrokeStyleT.ユーザ管理.現在選択されているユーザ.チップが自動演奏である( チップ.チップ種別 ) ) && // チップの AutoPlay が ON、かつ、
- ( 0 <= 描画距離dpx ) ) // バーを通過した。
- {
- チップ.ヒット済みである = true;
- チップ.不可視 = true;
- if( チップ.チップ種別 == SSTFormat.チップ種別.背景動画 )
- {
- // (A) 背景動画の場合。
- this.背景動画再生開始?.Invoke();
- }
- else
- {
- // (B) その他のチップの場合。
- this.チップヒット?.Invoke( チップ );
- this.コンボ加算?.Invoke();
- this.ヒット判定数加算?.Invoke( ヒット判定種別.AUTO );
- this.ヒット判定文字列開始?.Invoke( チップ.チップ種別, ヒット判定種別.AUTO );
- }
- }
- //----------------
- #endregion
- #region " Miss 判定を行う。"
- //----------------
- if( ( チップ.ヒットされていない ) && // チップが未ヒット、かつ、
- ( this.ヒット判定を行うチップと対応するレーン.ContainsKey( チップ.チップ種別 ) ) && // チップがヒット判定対象である、かつ、
- ( 描画時間差sec > StrokeStyleT.ユーザ管理.現在選択されているユーザ.ヒット範囲sec.Poor ) ) // 描画時間差が Poor 範囲を超えている。
- {
- チップ.ヒット済みである = true;
- チップ.不可視 = true;
- this.コンボリセット?.Invoke();
- this.ヒット判定文字列開始?.Invoke( チップ.チップ種別, ヒット判定種別.MISS );
- }
- //----------------
- #endregion
+ this.AutoPlayチップ判定を行う( チップ, 描画距離dpx );
+ this.Miss判定を行う( チップ, 描画時間差sec );
}
}
}
FDK.Log.Info( $"{FDK.Utilities.現在のメソッド名} <-- 終了" );
}
+ private void AutoPlayチップ判定を行う( SSTFormat.チップ chip, double 描画距離dpx )
+ {
+ if( ( chip.ヒットされていない ) && // チップが未ヒット、かつ、
+ ( StrokeStyleT.ユーザ管理.現在選択されているユーザ.チップが自動演奏である( chip.チップ種別 ) ) && // チップの AutoPlay が ON、かつ、
+ ( 0 <= 描画距離dpx ) ) // バーを通過した。
+ {
+ chip.ヒット済みである = true;
+ chip.不可視 = true;
+ if( chip.チップ種別 == SSTFormat.チップ種別.背景動画 )
+ {
+ // (A) 背景動画の場合。
+ this.背景動画再生開始?.Invoke();
+ }
+ else
+ {
+ // (B) その他のチップの場合。
+ this.チップヒット?.Invoke( chip );
+ this.コンボ加算?.Invoke();
+ this.ヒット判定数加算?.Invoke( ヒット判定種別.AUTO );
+ this.ヒット判定文字列開始?.Invoke( chip.チップ種別, ヒット判定種別.AUTO );
+ }
+ }
+ }
+ private void Miss判定を行う( SSTFormat.チップ chip, double 描画時間差sec )
+ {
+ if( ( chip.ヒットされていない ) && // チップが未ヒット、かつ、
+ ( this.ヒット判定を行うチップと対応するレーン.ContainsKey( chip.チップ種別 ) ) && // チップがヒット判定対象である、かつ、
+ ( 描画時間差sec > StrokeStyleT.ユーザ管理.現在選択されているユーザ.ヒット範囲sec.Poor ) ) // 描画時間差が Poor 範囲を超えている。
+ {
+ chip.ヒット済みである = true;
+ chip.不可視 = true;
+ this.コンボリセット?.Invoke();
+ this.ヒット判定文字列開始?.Invoke( chip.チップ種別, ヒット判定種別.MISS );
+ }
+ }
private void 小節線拍線を1つ描画する( デバイスリソース dr, SSTFormat.チップ chip, float Ydpx )
{