機能 #186
完了機能 #162: OBS連携機能
PLAYステート中にノーツレーダー出す
説明
Beatoraja画面の右下あたりなら被ってても影響ない。(紫ボックスのあたり)
ノーツレーダーのデザインはゲーム内と同じ感じでいいが、既存OBS用パーツに寄せたほうがより良い。
また、各軸の値も表示できるとよい

ファイル
| clipboard-202606141017-nurj6.png (60.2 KB) clipboard-202606141017-nurj6.png | いづ さん, 2026/06/14 10:17 | ||
| design.jpg (148 KB) design.jpg | いづ さん, 2026/06/14 10:19 |
いづ さん さんが22日前に更新
操作
#2
- ファイル clipboard-202606141017-nurj6.png clipboard-202606141017-nurj6.png を追加
- 説明 を更新 (差分)
いづ さん さんが22日前に更新
操作
#5
- ファイル design.jpg design.jpg を追加
エージェント ちゃん さんが22日前に更新
操作
#6
- ステータス を 未着手 から 実装中 に変更
- 進捗率 を 0 から 10 に変更
エージェント ちゃん さんが22日前に更新
操作
#7
Started. branch=feature/186-notes-radar
エージェント ちゃん さんが22日前に更新
操作
#8
Done, review PASS. commit 78b224c9. Backend radar in state.json + OBS hexagon overlay.
エージェント ちゃん さんが22日前に更新
操作
#9
実装完了(レビュー PASS): ノーツレーダー表示¶
選曲中/プレイ中に、選択譜面の 6 軸ノーツレーダーを OBS オーバーレイ右下へ表示する機能を実装しました。
-
ブランチ:
feature/186-notes-radar(commit78b224c9) -
本体側:
ObsStateがSongData.getNotesRadarFeature()の 6 軸(NOTES/PEAK/SCRATCH/SOF-LAN/CHARGE/CHORD)を/state.jsonのradarに出力。各軸 0〜200 を小数点 2 桁・[0,200]クランプ、曲なし/全軸 0 のときはnull。ロケール非依存で出力。 -
OBS 側:
obs/overlay.{html,css,js}に#notesradarブロックを追加。六角形レーダー(軸配置はゲーム内SkinRadarChartと一致、NOTES が上で時計回り)+各軸数値を表示。リザルトでは非表示、配色は既存 OBS パーツに準拠。README.md/state.sample.jsonも更新。 -
テスト:
xvfb-run -a ./gradlew test --tests "*ObsState*"成功(ObsStateRadarTest5 件 +ObsStateHeartRateTest4 件)。overlay.js構文 OK、state.sample.json妥当な JSON。
MR 作成はご指示待ちです(許可いただければ feature/186-notes-radar → develop で作成します)。
エージェント ちゃん さんが22日前に更新
操作
#10
修正: 配置調整と MUSIC SELECT 中のレーダー更新¶
レビュー指摘 2 点を対応(commit 2501604a)。
-
配置: ノーツレーダーブロックの右下を
#stage(ゲーム画面フレーム)の右下に揃えた(従来はフレーム下にはみ出していた)。bottom: calc(98.5vh - 46.125vw)でステージ枠の寸法に追従。 -
MUSIC SELECT 中の更新: 選曲カーソルが曲に移るたびに
MusicSelector.render()からObsController.onSongSelected()でハイライト曲をObsStateに反映。約 1 秒のポーリングで OBS 側に反映され、選曲中もカーソル中の譜面のレーダーが表示される(変化時のみ push、フォルダ上では直前曲を維持)。これに伴い nowplaying バーも選曲中にカーソル追従する(#182「選曲〜プレイ中の曲情報」の意図に沿う)。
xvfb-run -a ./gradlew compileJava test --tests "*ObsState*" 成功。
エージェント ちゃん さんが22日前に更新
操作
#12
不具合修正: RESULT 中のレーダー残留・中央フラッシュ¶
レビュー指摘 2 点を修正(commit 01b4ceb0)。両症状は同一原因でした。
原因: リザルト遷移時、MusicResult.create() 内の onResultScore() が phase="result" を設定した後に、changeState の case RESULT -> onResult() が setNowPlaying()(phase="select" を強制)を呼び、result フェーズを select に上書きしていた。このため /state.json の phase が "select" のままになり、(1) ノーツレーダー/nowplaying がリザルト中も残る、(2) 中央の result ブロックが一瞬出て消える(フラッシュ)が発生(#182 以来 result オーバーレイが実質機能していなかった)。
修正(本体側のみ・Codex 実装→Claude レビュー):
-
ObsState.enterResult()を追加(phase を result にするだけで nowPlaying/lastResult/radar/heartRate/session/history は保持)。 -
ObsController.onResult()をsetNowPlaying(...)からenterResult()に変更。onResultScore がセットした result フェーズが維持され、レーダー/nowplaying はbody.phase-resultで非表示、result ブロックは正しく表示され続ける。 - 回帰防止テストを
ObsStateRadarTestに追加。
テスト: xvfb-run -a ./gradlew compileJava test --tests "*ObsState*" 成功。
エージェント ちゃん さんが22日前に更新
操作
#13
MR 作成¶
実装完了。MR を作成しました(レビュー待ち)。
- MR: !28
feature/186-notes-radar→develophttps://gitlab.izu-san.com/games/beatoraja/-/merge_requests/28 - assignee / reviewer: いづさん
- テスト:
xvfb-run -a ./gradlew test全緑
承認・マージ後にステータスを 完了 へ移します。
エージェント ちゃん さんが22日前に更新
操作
#14
- ステータス を 実装中 から 完了 に変更
- 進捗率 を 10 から 100 に変更
対応が完了しました。
概要¶
OBS 連携オーバーレイに、選曲中/プレイ中の譜面のノーツレーダー(6 軸)と各軸数値を画面右下に表示する機能を追加。あわせてリザルト周りの表示不具合を修正し、本体リザルト画面と重複する result ブロックを撤去した。
変更点¶
- ノーツレーダー(本体 + OBS):
ObsStateが 6 軸(NOTES/PEAK/SCRATCH/SOF-LAN/CHARGE/CHORD・各 0〜200 小数 2 桁)を/state.jsonのradarに出力。OBS 側#notesradarに六角形チャート(ゲーム内SkinRadarChartと同軸配置)+数値を表示。 - 表示フェーズ: 選曲・プレイ中は表示、リザルトは非表示。
- 配置: レーダー右下をゲーム画面フレーム右下に整列。
- 選曲カーソル追従:
MusicSelector.render()→ObsController.onSongSelected()でハイライト曲を反映(変化時のみ push)。 - リザルト不具合修正:
onResult()が phase=result を select に上書きしていた問題をObsState.enterResult()で解消(レーダー残留・中央フラッシュを修正)。 - result ブロック撤去(本体リザルト画面で十分なため)。
テスト¶
-
xvfb-run -a ./gradlew test: 成功(ObsStateRadarTest追加分含む全緑)
関連 MR¶
- !28 (
feature/186-notes-radar→develop) マージ済み(merge commit a76036f3)
補足¶
- backend は
lastResultを引き続き/state.jsonに出力(OBS 側未使用のデッドデータ)。撤去要否は別途判断。