操作
機能 #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等の絞り込みが効きフォルダ/コマンドバーは残る/再起動後も設定保持。
エージェント ちゃん さんが9日前に更新
- ステータス を 未着手 から 実装中 に変更
- 進捗率 を 0 から 10 に変更
実装に着手しました。
- ブランチ:
feature/436 - 対応方針:
BarSorter.defaultSorterを12種へ拡張してNUM2ソートの未到達を解消し、Predicate<Bar>ベースの新BarFilterenum+NUM6トグルで未クリア/FC/AAA未満などの選曲フィルタを追加(フォルダ/コマンドバーは常に通過、設定は永続化)。
エージェント ちゃん さんが9日前に更新
- ステータス を 実装中 から 完了 に変更
- 進捗率 を 10 から 100 に変更
対応が完了しました。
概要¶
選曲画面のソート切替(NUM2)が8種に限定され新規4ソートへ到達できない問題を修正し、クリアランプ/スコアで曲を絞り込む選曲フィルタ機能を新規追加した。
変更点¶
-
ソートローテーション漏れ修正:
BarSorter.defaultSorterを8→12種へ拡張(DURATION/LASTUPDATE/RIVALCOMPARE_CLEAR/RIVALCOMPARE_SCORE追加)。validator のクランプが自動追従し既存設定値は維持。 -
選曲フィルタ追加: 新
select/BarFilterenum(ALL/UNCLEARED/CLEARED(EASY以上)/FULLCOMBO/AAA_UNDER(rate<8/9))。SongBar以外(フォルダ/コマンド/段位)は常に通過。NUM6 キーでトグル、設定は永続化(旧JSONは default 0=ALL で後方互換)。 -
スキン用フック:
EventType.filter(id=313) とStringPropertyTypes.barfilter(id=62) を追加し、スキンからの切替/フィルタ名表示に対応(バンドルスキンは git 管理外のため表示組込みはローカル対応)。 - 変更ファイル:
select/BarFilter.java(新規)、select/BarSorter.java、select/BarManager.java、select/MusicSelector.java、select/MusicSelectInputProcessor.java、PlayerConfig.java、PlayerConfigValidator.java、PlayerConfigPersistenceDto.java、skin/property/EventType.java、skin/property/StringPropertyTypes.javaほかテスト2件
テスト¶
-
.\gradlew.bat test: 成功(フルスイート緑)。追加:BarFilterTest(全 predicate+非SongBar通過、AAA境界を exscore 1598/1600 で厳密化)、PlayerConfigFileCompatibilityTest(barFilter永続化+99→clamp→4回帰ガード)
関連 MR¶
- !116 (feature/436 → develop)
操作