操作
リファクタ #466
完了[skin] スキンローダ・プロパティの汎用化・未実装対応
リファクタ #466:
[skin] スキンローダ・プロパティの汎用化・未実装対応
説明
親 #179 「TODO/FIXME 棚卸し」からの派生(skin 領域)。LR2/JSON ローダのコピペ整理とプロパティの未実装対応。
対象 TODO¶
-
src/.../skin/property/BooleanPropertyFactory.java:67,70,73— select, decide 時の実装・未実装。 -
src/.../skin/property/IntegerIndexPropertyTypes.java:153— 64-69 を target2, target3 に割り当てたい。 -
src/.../skin/SkinNoteDistributionGraph.java:26— 各 Texture を 1 枚にまとめ glBindTexture 回数を削減。 -
src/.../skin/SkinNoteDistributionGraph.java:130— スキン定義側で分岐できないか。 -
src/.../skin/SkinNoteDistributionGraph.java:153— 高速化のアイデア。 -
src/.../skin/lr2/LR2SelectSkinLoader.java:22— コピペのリファクタリング。 -
src/.../skin/lr2/LR2SkinCSVLoader.java:338— 固有実装の汎用化。 -
src/.../skin/lr2/LR2PlaySkinLoader.java:945— 固有実装の汎用化。 -
src/.../skin/lr2/LR2SkinHeaderLoader.java:49— header 読み込みに失敗したら null を返す。 -
src/.../skin/json/JsonPlaySkinObjectLoader.java:39— プレイスキン固有の値設定。note 未定義時は通らないため場所要検討。
対応観点¶
スキン互換性を崩さないこと。
優先度: 高め(一部未実装)
エージェント ちゃん さんが7日前に更新
- 関連している リファクタ #179: TODO/FIXME を領域別に棚卸ししてチケット化する を追加
エージェント ちゃん さんが7日前に更新
- ステータス を 未着手 から 実装中 に変更
- 進捗率 を 0 から 10 に変更
実装に着手しました。
- ブランチ:
feature/466 - 対応方針: スキン互換性を崩さない範囲で、LR2SelectSkinLoader の重複
setDestinationを共通ヘルパへ集約。実装可能な未実装項目(LR2SkinHeaderLoaderの失敗時 null 返し+全呼び出し元の null 処理、JsonPlaySkinObjectLoaderの play 固有値設定を note ブロック外へ移動)を対応。残る仕様判断・未実装・性能系 TODO(BooleanPropertyFactoryの SAVE_SCORE/NO_SAVE_CLEAR、IntegerIndexPropertyTypesの target2/3、SkinNoteDistributionGraphの性能/設計案、LR2SkinCSVLoader/LR2PlaySkinLoaderの laneCover 汎用化)は#464/#465同様に決定コメント化(挙動不変)。
エージェント ちゃん さんが7日前に更新
- ステータス を 実装中 から 完了 に変更
- 進捗率 を 10 から 100 に変更
MR !141 が develop にマージされ、本チケットを完了とします。
実装サマリ¶
スキン互換性を崩さない範囲で、LR2 セレクトスキンローダの重複集約+実装可能な未実装項目を対応。残りは #464/#465 同様に決定コメント化。
リファクタ(挙動不変)¶
-
LR2SelectSkinLoader: 各
DST_BAR_*の重複(負値正規化+20引数setDestination)をnormalizeNegativeSize/setBarDestination(obj, values, str, yBase)ヘルパへ集約。BODY 系はyBase=dst.height、他は0fで元式と完全一致。DST_NOTECHART/DST_BPMCHARTは無変更。
実装(挙動変更)¶
-
LR2SkinHeaderLoader: 読込失敗時に
null返却+throws IOException撤去(JSON/Lua のloadHeaderと整合)。Files.lines().forEach()の遅延読み込みに備えIOException+UncheckedIOExceptionを捕捉。呼び出し元SkinLoader/SkinConfiguration/SkinConfigurationViewを null チェック化。 -
JsonPlaySkinObjectLoader: play 固有値(close/loadend/playstart/judgetimer/finishmargin)を
noteブロック外の新フックJsonSkinObjectLoader#applySkinSettingsへ移動し、ロード毎に1回呼出。note 未定義スキンでも反映。
決定コメント化(ロジック不変)¶
-
BooleanPropertyFactory(67/70/73)、IntegerIndexPropertyTypes(153)、SkinNoteDistributionGraph(26/130/153)、LR2SkinCSVLoader(338)、LR2PlaySkinLoader(945) の 7 TODO を「なぜ今変えないか」を説明する決定コメントへ置換。
テスト¶
-
.\gradlew.bat test: 成功(全テスト合格) - 新規
LR2SkinHeaderLoaderNullReturnTest(非存在パス=IOException経路 / 不正バイト=UncheckedIOException経路の両方でnull返却を検証)
残課題(別途仕様確定が必要)¶
-
OPTION_NO_SAVE_CLEAR(クリア非保存)と target2/target3(2nd/3rd rival)は対応するデータソースが現状存在しないため、決定コメントで予約のみ・実装見送り。実装時は別チケットで仕様確定が必要。
操作