퀘스트 일시 정지 · 이어하기 · 진행 상태 서버 저장 · 목록 보상받기
This commit is contained in:
@@ -159,15 +159,28 @@ class ShakeJudge {
|
||||
required this.bpm,
|
||||
required this.segments,
|
||||
this.windows = const ShakeWindows(),
|
||||
}) : assert(bpm > 0 && segments > 0);
|
||||
List<double> hits = const [],
|
||||
this.position = Duration.zero,
|
||||
}) : assert(bpm > 0 && segments > 0) {
|
||||
// 일시 정지에서 「이어하기」 — 멈추기 전 판정을 그대로 잇는다(원장 C-83).
|
||||
for (var i = 0; i < hits.length && i < segments; i++) {
|
||||
if (hits[i] >= 0) _best[i] = hits[i];
|
||||
}
|
||||
}
|
||||
|
||||
final double bpm;
|
||||
final int segments;
|
||||
final ShakeWindows windows;
|
||||
|
||||
/// 마지막으로 본 영상 시각 — 진행 화면을 나가면 「이어하기」의 시작점이 된다.
|
||||
Duration position;
|
||||
|
||||
/// 박 번호 → 가장 가까운 흔들기의 거리(박 비율).
|
||||
final _best = <int, double>{};
|
||||
|
||||
/// 박마다 [_best] — 흔들기가 없으면 -1. 일시 정지 세션에 남긴다.
|
||||
List<double> get hits => [for (var i = 0; i < segments; i++) _best[i] ?? -1];
|
||||
|
||||
Duration get beat => Duration(microseconds: (60e6 / bpm).round());
|
||||
|
||||
/// 마지막 박의 판정 창이 닫히는 영상 시각.
|
||||
|
||||
Reference in New Issue
Block a user