プロジェクト

全般

プロフィール

機能 #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等の絞り込みが効きフォルダ/コマンドバーは残る/再起動後も設定保持。

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

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

実装に着手しました。

  • ブランチ: feature/436
  • 対応方針: BarSorter.defaultSorter を12種へ拡張してNUM2ソートの未到達を解消し、Predicate<Bar> ベースの新 BarFilter enum+NUM6トグルで未クリア/FC/AAA未満などの選曲フィルタを追加(フォルダ/コマンドバーは常に通過、設定は永続化)。

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

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

対応が完了しました。

概要

選曲画面のソート切替(NUM2)が8種に限定され新規4ソートへ到達できない問題を修正し、クリアランプ/スコアで曲を絞り込む選曲フィルタ機能を新規追加した。

変更点

  • ソートローテーション漏れ修正: BarSorter.defaultSorter を8→12種へ拡張(DURATION/LASTUPDATE/RIVALCOMPARE_CLEAR/RIVALCOMPARE_SCORE 追加)。validator のクランプが自動追従し既存設定値は維持。
  • 選曲フィルタ追加: 新 select/BarFilter enum(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.javaselect/BarManager.javaselect/MusicSelector.javaselect/MusicSelectInputProcessor.javaPlayerConfig.javaPlayerConfigValidator.javaPlayerConfigPersistenceDto.javaskin/property/EventType.javaskin/property/StringPropertyTypes.java ほかテスト2件

テスト

  • .\gradlew.bat test : 成功(フルスイート緑)。追加: BarFilterTest(全 predicate+非SongBar通過、AAA境界を exscore 1598/1600 で厳密化)、PlayerConfigFileCompatibilityTestbarFilter 永続化+99→clamp→4 回帰ガード)

関連 MR

  • !116 (feature/436 → develop)

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