プロジェクト

全般

プロフィール

リファクタ #464

完了

[play/judge] 判定処理の仕様判断・リファクタ

リファクタ #464: [play/judge] 判定処理の仕様判断・リファクタ

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

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

100%

予定工数:

説明

#179 「TODO/FIXME 棚卸し」からの派生(play/judge 領域。gameplay リスク高)。仕様判断を要するものを含む。

対象 TODO(仕様判断)

  • src/.../play/JudgeManager.java:24 — HCN 押し直しの発音をどうするか。
  • src/.../play/JudgeManager.java:412 — この時点で空 POOR 処理を分岐させるべきか。

対象 TODO(リファクタ)

  • src/.../play/JudgeManager.java:614 — processing 値の変化時のみ実行したい。
  • src/.../play/JudgeManager.java:615 — HCN は別タイマーにするかも。
  • src/.../play/KeyInputProccessor.java:149 — 判定処理スレッドは JudgeManager に渡した方がよいかも。
  • src/.../skin/SkinHitErrorVisualizer.java:189 — JudgeManager と重複した処理。共通化。

対応観点

仕様判断項(24/412)は先に仕様を確定してから実装。判定はリグレッションリスクが高いためリプレイ再現テストを推奨。

優先度: 高め


関連するチケット 1 (0件未完了1件完了)

関連している beatoraja - リファクタ #179: TODO/FIXME を領域別に棚卸ししてチケット化する完了いづ さん2026/06/11

操作

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

  • 関連している リファクタ #179: TODO/FIXME を領域別に棚卸ししてチケット化する を追加

いづ さん さんが7日前に更新 操作 #2

  • 対象バージョン1.3.1 にセット

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

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

実装に着手しました。

  • ブランチ: feature/464
  • 対応方針: 仕様判断項(24 HCN押し直し発音 / 412 空POOR分岐)は現状挙動を維持し決定コメント化、リファクタ項(614/615 holdTimer最適化・189 判定窓計算の共通化・149 判定スレッドのJudgeManager移管)を実施。既存JudgeManagerUpdateTest/FakeJudgeContext基盤でリグレッションテストを担保。

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

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

対応が完了しました。

概要

play/judge 領域の TODO 6件を棚卸し。仕様判断項(HCN押し直し発音・空POOR分岐)は現状挙動を維持して決定コメント化し、リファクタ項(holdTimer最適化・判定窓計算の共通化・判定スレッドの所有権移管)を実施。判定挙動・発音・タイマー観測状態は現状と完全同一。

変更点

  • JudgeManager:24/412(仕様判断・挙動変更なし) — 開いた疑問形TODOを決定コメントへ置換。HCN/CN押し直しは新規キー音を鳴らさない(持続音はsetVolume制御、再ヒット音は二重発音になる)/空POORはtnote==null側のelseに集約しノーツマッチ地点では分岐しない。
  • JudgeManager:614/615LaneState.holdTimerOnを追加し holdTimer のswitchTimerを状態遷移時のみ呼出(switchTimerは冪等のため観測状態は同一)。HCN別タイマー化はスキン互換維持のため見送り。
  • 判定窓レート計算の共通化JudgeProperty.compute{Key,Scratch}JudgeWindowRateへ抽出し、JudgeManager.initSkinHitErrorVisualizer.getJudgeAreaが共用(算出結果は現状と完全一致)。
  • 判定スレッドの移管(149) — 内部クラスJudgeThreadKeyInputProccessorからJudgeManager所有へ移管。JudgeContextgetPlayMicroTime/setReplayKeyState/resetAllKeyStateの seam を追加。BMSPlayerの呼出は不変、スレッドモデルも不変。
  • 変更ファイル: JudgeManager.java / KeyInputProccessor.java / JudgeContext.java / BMSPlayerJudgeContext.java / JudgeProperty.java / SkinHitErrorVisualizer.java ほかテスト3件、計9件。

テスト

  • .\gradlew.bat test : 成功(全スイート BUILD SUCCESSFUL)。追加テスト: JudgePropertyWindowRateTest、holdTimer遷移テスト、startJudge/stopJudge lifecycle smoke テスト。

関連 MR

  • !139 (feature/464 → develop)

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