続ける前にサインインする。
refs #186 PLAY/選曲中にノーツレーダーをOBSオーバーレイへ表示
refs #186
概要
OBS 連携オーバーレイ(#162)に、選曲中/プレイ中の譜面のノーツレーダー(6 軸)と各軸数値を画面右下に表示する機能を追加する。あわせてリザルト周りの表示不具合を修正し、本体リザルト画面と重複する result ブロックを撤去する。
変更点
-
ノーツレーダー表示(本体 + OBS):
ObsStateがSongData.getNotesRadarFeature()の 6 軸(NOTES/PEAK/SCRATCH/SOF-LAN/CHARGE/CHORD)を/state.jsonのradarに出力(各軸 0〜200 を小数点 2 桁・[0,200]クランプ、曲なし/全軸 0 はnull、ロケール非依存)。OBS 側は#notesradarブロックを追加し、六角形レーダー(軸配置はゲーム内SkinRadarChartと一致=NOTES が上で時計回り)+各軸数値を表示。配色は既存 OBS パーツに準拠。 - 表示フェーズ: 選曲(select)・プレイ中(playing)で表示、リザルト(result)では非表示。
-
配置: レーダーブロックの右下を
#stage(ゲーム画面フレーム)の右下に整列(bottom: calc(98.5vh - 46.125vw))。 -
選曲カーソル追従:
MusicSelector.render()からObsController.onSongSelected()でハイライト曲をObsStateに反映(変化時のみ push)。選曲中もカーソル中の譜面のレーダー/nowplaying が更新される(ポーリングのまま)。 -
リザルト不具合修正:
onResult()のsetNowPlaying()(phase=select 強制)がonResultScore()の phase=result を上書きしていた問題を、ObsState.enterResult()(phase のみ result 化)に置き換えて解消。リザルト中にレーダー/nowplaying が残る・中央オーバーレイが一瞬出る不具合を修正。 -
result ブロック撤去: 本体リザルト画面で十分なため、OBS の
#resultブロック(HTML/CSS/JS)と README 記載を削除。phase=result による他ブロック非表示ロジックは維持(backend はlastResultを引き続き出力するがオーバーレイ未使用)。
テスト
-
xvfb-run -a ./gradlew test: 成功(ObsStateRadarTest追加分含む全テスト緑) -
node --check obs/overlay.js/state.sample.jsonの JSON 妥当性 : OK
動作確認
- OBS ブラウザソースで
http://localhost:<port>/overlay.htmlを開き、選曲をスクロール → カーソル中の譜面のレーダー・数値が更新されること。 - 適当な譜面をプレイ → プレイ中もレーダー表示、リザルトでレーダー/nowplaying が消え、中央のフラッシュが出ないこと。
- レーダーブロック右下がゲーム画面フレーム右下と揃っていること。
レビュー観点
-
MusicSelector.render()への OBS 更新フック追加(毎フレームではなく選曲変化時のみ push/OBS 無効時は短絡)。 -
onResult()→enterResult()変更によるリザルト時フェーズ保持(回帰防止テストあり)。 -
lastResultを backend に残しているが OBS 側未使用。撤去するかは要否判断(今回はスコープ維持のため残置)。