操作
機能 #436
完了選曲フィルタ機能の追加 + ソート切替のローテーション漏れ修正
機能 #436:
選曲フィルタ機能の追加 + ソート切替のローテーション漏れ修正
説明
背景¶
- 選曲画面の絞り込みはSQLコマンドフォルダ前提で、手軽なフィルタ手段が無い。
-
NUM2のソート切替がBarSorter.defaultSorter(8種)に限定されており、DURATION/LASTUPDATE/RIVALCOMPARE_CLEAR/RIVALCOMPARE_SCOREに到達できない(別経路songbar_sort(id=312) からのみ到達可能)。
方針¶
(1) ソートローテーション漏れ修正¶
-
select/BarSorter.java:260のdefaultSorterにDURATION, LASTUPDATE, RIVALCOMPARE_CLEAR, RIVALCOMPARE_SCOREを追加。 -
PlayerConfigValidator.java:83が sort index をdefaultSorter.length-1でクランプしているため配列拡張は安全(既存設定値は維持)。
(2) クリアランプ/スコアによる選曲フィルタトグル¶
- 新 enum
select/BarFilter.javaをBarSorterの構造に倣って追加。各要素はPredicate<Bar>を持ち、SongBar以外(フォルダ/コマンド/段位等)は常に通過させる。- 要素例:
ALL(無効)/UNCLEARED(未クリア)/CLEARED(EASY以上)/FULLCOMBO/AAA_UNDER(スコアレート<AAA)。 - ランプ判定は
ScoreData.getClear()を参照(雛形BarSorter.java:126のCLEAR比較ロジック)。
- 要素例:
- 配線(既存ソートと並行する箇所に追加):
-
PlayerConfigにbarFilterフィールド + getter/setter(getSort/setSort付近, 484行)。PlayerConfigValidator.java:83付近でクランプ、PlayerConfigPersistenceDto.java:218付近で永続化。 -
select/MusicSelector.javaにgetFilter()/setFilter(int)を追加(setSort625行が雛形)。 -
skin/property/EventType.javaに新filterイベント(未使用 id を採番、sort(12) 50-56行が雛形)→setFilter(...)→getBarManager().updateBar()→play(OPTION_CHANGE)。 -
select/MusicSelectInputProcessor.javaで空いているControlKeys(NUM0=検索/NUM1=mode/NUM2=sort/NUM3=lnmode は使用済、NUM4 等の空きを確認の上)にexecuteEvent(EventType.filter)を割当(94行が雛形)。 -
select/BarManager.java:373付近、Sort.instance().sort(...)の直前でnewcurrentsongsをBarFilterの predicate で除外(score は同ブロック 364-371行で解決済み)。 - (任意)現在のフィルタ名を出す
StringTypeをStringPropertyTypes.javaに追加。
-
検証¶
-
.\gradlew.bat clean build(test含む)。BarFilterpredicate に JUnit5 追加。BarSorter/PlayerConfigValidator既存テストの回帰確認。 - 手動:
NUM2ソートが新規ソートまで回る/フィルタキーで未クリア・FC等の絞り込みが効きフォルダ/コマンドバーは残る/再起動後も設定保持。
操作