퀘스트 일시 정지 · 이어하기 · 진행 상태 서버 저장 · 목록 보상받기

This commit is contained in:
Sn-Kinos
2026-10-06 03:20:46 +09:00
parent ecf5998725
commit abe5f1ae50
28 changed files with 1023 additions and 118 deletions
+14 -1
View File
@@ -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());
/// 마지막 박의 판정 창이 닫히는 영상 시각.