From 049e37bcff630da9096c5d5f2c09ebf6c224f546 Mon Sep 17 00:00:00 2001 From: dal4segno Date: Tue, 29 Sep 2026 23:12:18 +0900 Subject: [PATCH] feat: show playable charts with score hover and special-start markers --- UPDATES.md | 7 + scripts/finalize-pages-build.mjs | 4 +- src/lib/components/PlayableChart.svelte | 234 +++++++++++++++++++ src/lib/components/ScoreTimelineChart.svelte | 41 +--- src/lib/engine/chart-geometry.ts | 27 +++ src/lib/engine/score-timeline.test.ts | 28 +++ src/lib/engine/score-timeline.ts | 40 ++++ src/lib/models/chart-visual.ts | 15 ++ src/routes/analysis/+page.svelte | 8 + 9 files changed, 362 insertions(+), 42 deletions(-) create mode 100644 src/lib/components/PlayableChart.svelte create mode 100644 src/lib/engine/chart-geometry.ts create mode 100644 src/lib/engine/score-timeline.test.ts create mode 100644 src/lib/engine/score-timeline.ts create mode 100644 src/lib/models/chart-visual.ts diff --git a/UPDATES.md b/UPDATES.md index 58b8f7a..dd3ca77 100644 --- a/UPDATES.md +++ b/UPDATES.md @@ -4,6 +4,13 @@ updatedAt: 2026-09-29T00:00:00Z ## 2026년 9월 29일 +### 채보에서 분석 점수 확인 + +`NEW` 배치 분석 결과에 레인·노트 너비·플릭·롱노트 연결을 표시하는 채보를 추가했습니다. 채보를 가리키거나 터치하면 해당 시각의 누적 평균 점수·최고 점수·최고점 유지 확률을 확인할 수 있습니다. 액티브 미발동 설정을 반영하며, 시간 확대와 스페셜 구간 이동을 지원합니다. + +`IMPROVED` 스페셜 시작과 수동 판정 노트가 겹치는 밀어치기 가능 지점을 무지개 선으로 표시합니다. 롱노트 중간·끝의 자동 판정만 겹치는 지점은 제외합니다. + + ### 게임 DB 갱신 `NEW` 마린·코요리·코보·벨즈의 신규 ★5 수영복 카드 4장을 추가했습니다. diff --git a/scripts/finalize-pages-build.mjs b/scripts/finalize-pages-build.mjs index eab90ad..cb044ee 100644 --- a/scripts/finalize-pages-build.mjs +++ b/scripts/finalize-pages-build.mjs @@ -39,8 +39,8 @@ style += ` `; await writeFile(stylePath, style); -// 채보는 app.js에 포함되므로 public 디렉터리에서 복사된 중복 파일은 제거한다. -await rm(path.join(output, 'data'), { recursive: true, force: true }); +// 점수 채보는 app.js에 포함된다. 별도로 불러오는 시각화 채보는 보존한다. +await rm(path.join(output, 'data', 'charts'), { recursive: true, force: true }); await rm(path.join(output, 'VERSION.txt'), { force: true }); await writeFile(path.join(output, 'README.txt'), `홀로도리 계산기 diff --git a/src/lib/components/PlayableChart.svelte b/src/lib/components/PlayableChart.svelte new file mode 100644 index 0000000..d1524d1 --- /dev/null +++ b/src/lib/components/PlayableChart.svelte @@ -0,0 +1,234 @@ + + +
+
+

채보와 점수

아래에서 위로 시간이 흐릅니다. 채보 위에 마우스를 올리거나 터치하면 해당 시각의 누적 점수를 볼 수 있습니다.

+ {#if visual} + + {/if} +
+ {#if error} +

{error}

+ {:else if !visual} +

채보를 불러오는 중입니다…

+ {:else} +
+
+
━ 탭━ 롱노트⌃ 플릭 밀어치기 가능오른쪽: 액티브 / 스페셜
+
+
+
{ if (event.pointerType !== 'touch') clearHover(); }} + on:keydown={onKeydown} on:blur={clearHover}> + +
+
+ {#if selected && hoverTime !== null} +
+ {formatTime(hoverTime)} + 평균 점수 {formatTimelineScore(selected.averageScore)} + 최고 점수 {formatTimelineScore(selected.maximumScore)} + 이 시간까지 최고점 유지 확률 {formatTimelineProbability(selected.maximumProbability)} +
+ {/if} +
+
+ +
+ {/if} +
+ + diff --git a/src/lib/components/ScoreTimelineChart.svelte b/src/lib/components/ScoreTimelineChart.svelte index c1fbeda..aab4f6c 100644 --- a/src/lib/components/ScoreTimelineChart.svelte +++ b/src/lib/components/ScoreTimelineChart.svelte @@ -1,5 +1,6 @@