プロジェクト

全般

プロフィール

機能 #436

完了

選曲フィルタ機能の追加 + ソート切替のローテーション漏れ修正

機能 #436: 選曲フィルタ機能の追加 + ソート切替のローテーション漏れ修正

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

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

100%

予定工数:

説明

背景

  • 選曲画面の絞り込みはSQLコマンドフォルダ前提で、手軽なフィルタ手段が無い。
  • NUM2 のソート切替が BarSorter.defaultSorter(8種)に限定されており、DURATION / LASTUPDATE / RIVALCOMPARE_CLEAR / RIVALCOMPARE_SCORE に到達できない(別経路 songbar_sort(id=312) からのみ到達可能)。

方針

(1) ソートローテーション漏れ修正

  • select/BarSorter.java:260defaultSorterDURATION, LASTUPDATE, RIVALCOMPARE_CLEAR, RIVALCOMPARE_SCORE を追加。
  • PlayerConfigValidator.java:83 が sort index を defaultSorter.length-1 でクランプしているため配列拡張は安全(既存設定値は維持)。

(2) クリアランプ/スコアによる選曲フィルタトグル

  • 新 enum select/BarFilter.javaBarSorter の構造に倣って追加。各要素は Predicate<Bar> を持ち、SongBar 以外(フォルダ/コマンド/段位等)は常に通過させる。
    • 要素例: ALL(無効)/ UNCLEARED(未クリア)/ CLEARED(EASY以上)/ FULLCOMBO / AAA_UNDER(スコアレート<AAA)。
    • ランプ判定は ScoreData.getClear() を参照(雛形 BarSorter.java:126CLEAR 比較ロジック)。
  • 配線(既存ソートと並行する箇所に追加):
    • PlayerConfigbarFilter フィールド + getter/setter(getSort/setSort 付近, 484行)。PlayerConfigValidator.java:83 付近でクランプ、PlayerConfigPersistenceDto.java:218 付近で永続化。
    • select/MusicSelector.javagetFilter()/setFilter(int) を追加(setSort 625行が雛形)。
    • 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(...) の直前で newcurrentsongsBarFilter の predicate で除外(score は同ブロック 364-371行で解決済み)。
    • (任意)現在のフィルタ名を出す StringTypeStringPropertyTypes.java に追加。

検証

  • .\gradlew.bat clean build(test含む)。BarFilter predicate に JUnit5 追加。BarSorter/PlayerConfigValidator 既存テストの回帰確認。
  • 手動: NUM2 ソートが新規ソートまで回る/フィルタキーで未クリア・FC等の絞り込みが効きフォルダ/コマンドバーは残る/再起動後も設定保持。

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