プロジェクト

全般

プロフィール

機能 #380

完了

機能 #344: [Phase 4] レンダリングと UI/スキン描画

beatoraja スキン: IR 拡張+JSON スキンパーサ

機能 #380: beatoraja スキン: IR 拡張+JSON スキンパーサ

エージェント ちゃん さんが14日前に追加. 14日前に更新.

ステータス:
完了
優先度:
通常
担当者:
対象バージョン:
開始日:
2026/06/22
期日:
進捗率:

100%

予定工数:

説明

目的

beatoraja スキンを表示するための第一段。内部スキン IR を beatoraja のスキンオブジェクトモデルへ拡張し、JSON 形式 (.json) スキンをパースして IR へ写像する。#360 で分割された beatoraja スキンエンジンの 1/3。

スコープ

  • beatoraja スキンオブジェクトモデルの IR 拡張: header / destination(複数アニメ keyframe) / image / imageset / value(number) / text / slider / graph / judge / gauge / bga / note など。LR2 IR とは別系統で無損失保持(既存 ferrhythm-skin の方針を踏襲)。
  • beatoraja JSON スキン形式のパーサ(serde_json)。
  • op/timer/value/offset 等は素データ保持し、意味付け・描画は後続チケットへ委譲。

スコープ外

  • Lua スキン実行(.luaskin/.lua)→ 次チケット。
  • timer/value/option ID のゲーム状態への接続→ 3 つ目のチケット。

検証

コンテナ TDD(パーサ/IR 写像)。実描画は Windows ホスト。

担当

Codex 委譲(IR+パーサのみ、frontend-design 不要)。

関連

#360 で「画面の状態遷移+ネイティブ UI」を実装済み。本系列は #344 Phase 4 内で beatoraja スキン描画を完成させる。

エージェント ちゃん さんが14日前に更新 操作 #1

  • ステータス未着手 から 却下 に変更

ネイティブ UI を主体とする方針転換(2026-06-22 ユーザー決定)により、samples/skin/ の beatoraja スキンは使用せず、beatoraja スキンパーサ・エンジンは不要化したため 却下。将来 beatoraja スキン対応が必要になった際に再起票する。

エージェント ちゃん さんが14日前に更新 操作 #2

  • ステータス却下 から 未着手 に変更

却下を取り消して復活。

2026-06-22 のネイティブUI主体方針を再転換。ネイティブUI(#383)の作り込みが期待に届かず、beatoraja スキン(Lua含む)を完全パースして完全移植する方針に変更(ユーザー指示)。ネイティブUI描画は破棄、#383 のウィンドウ/入力/音声配線は #382 のスキン描画統合で流用。本チケット(IR拡張+JSONパーサ)から着手。

エージェント ちゃん さんが14日前に更新 操作 #3

  • ステータス未着手 から 実装中 に変更
  • 進捗率0 から 10 に変更

実装に着手しました。

  • ブランチ: feature/380-beatoraja-skin-ir
  • 対応方針: ferrhythm-skin に beatoraja スキンオブジェクトモデルのIR(LR2 IRとは別系統・無損保持)を新設し、beatorajaの寛容JSON方言//コメント・配列要素間のカンマ欠落・Shift-JIS)を読む専用リーダで IR へ写像。Lua実行・ID接続・描画は後続(#381/#382)。Codex委譲。

エージェント ちゃん さんが14日前に更新 操作 #4

  • ステータス実装中 から 完了 に変更
  • 進捗率10 から 100 に変更

対応が完了しました。

概要

beatoraja スキンエンジンの第一段。beatoraja のスキンオブジェクトモデルを無損失で表す内部 IR と、それを生成する寛容 JSON パーサを ferrhythm-skin に新設。Lua 実行・描画・ID 写像は後続(#381/#382)。

変更点

  • beatoraja::modeljson/JsonSkin.java を忠実 1:1 移植(Skin +全 36 ネスト型)。無損失・既定値保持・Integer.MIN_VALUE 未設定を Option<i32>・ref/timer/op は生 int 保持(#382 境界)。
  • beatoraja::json:libgdx JsonReader 相当の寛容リーダ(///* */ コメント/要素間カンマ省略/末尾カンマ/無クォート・単一クォート)。未知キーは warnings へ退避。
  • parse_json_skin(UTF-8/Shift-JIS フォールバック)、SkinError::Json 追加、クレートルートへ配線。
  • 変更ファイル: crates/ferrhythm-skin/src/beatoraja/{model,json,mod}.rs 新設、error.rs/lib.rs 修正(4 件)。

テスト

  • cargo test -p ferrhythm-skin : 成功(35 件、serde feature 時 36 件)。寛容 JSON 単体+写像+env 駆動の実スキンパース。実 decide.json(Shift-JIS+カンマ省略+コメント)を type=6/1920x1080 で確認。
  • cargo clippy --all-targets -- -D warnings / cargo fmt --all -- --check : 成功。ワークスペース全 27 スイート緑。

関連 MR

  • !25 (feature/380-beatoraja-skin-ir → develop)

他の形式にエクスポート: PDF Atom