From b240cd2626f102da86df2a59e2b3bd1c53873c3b Mon Sep 17 00:00:00 2001 From: JiWoong Sul Date: Mon, 30 Mar 2026 23:17:59 +0900 Subject: [PATCH] =?UTF-8?q?fix(buff):=20=EC=95=B1=20=EC=9E=AC=EC=8B=9C?= =?UTF-8?q?=EC=9E=91=20=ED=9B=84=20=EB=B0=B0=EC=86=8D=20=EB=B6=80=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8=EA=B0=80=20=EB=B3=B5=EC=9B=90=EB=90=98=EC=A7=80=20?= =?UTF-8?q?=EC=95=8A=EB=8A=94=20=EB=B2=84=EA=B7=B8=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - speed_boost_manager: restoreFromMonetization() 추가 - game_session_controller: loadAndStart에서 배속 상태 복원 호출 - speedBoostEndMs가 세이브에 남아있어도 _isSpeedBoostActive가 false로 리셋되어 배속이 적용 안 되던 문제 해결 --- .../game/game_session_controller.dart | 6 +++++ .../game/managers/speed_boost_manager.dart | 24 +++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/lib/src/features/game/game_session_controller.dart b/lib/src/features/game/game_session_controller.dart index 5874e14..9bffa6b 100644 --- a/lib/src/features/game/game_session_controller.dart +++ b/lib/src/features/game/game_session_controller.dart @@ -294,6 +294,12 @@ class GameSessionController extends ChangeNotifier { // 비모바일 플랫폼 또는 테스트 환경에서는 무시 } + // 속도 부스트 상태 복원 (앱 재시작 대응) + _speedBoostManager.restoreFromMonetization( + monetization: _monetization, + loop: null, // startNew에서 loop 생성 후 적용됨 + ); + // 복귀 보상 체크 (Phase 7) _returnRewardsManager.checkReturnRewards( monetization: _monetization, diff --git a/lib/src/features/game/managers/speed_boost_manager.dart b/lib/src/features/game/managers/speed_boost_manager.dart index bcd865c..2e6a4f2 100644 --- a/lib/src/features/game/managers/speed_boost_manager.dart +++ b/lib/src/features/game/managers/speed_boost_manager.dart @@ -194,6 +194,30 @@ class SpeedBoostManager { return monetization.copyWith(speedBoostEndMs: null); } + /// 세이브에서 복원된 MonetizationState 기반으로 배속 상태 복원 + /// + /// 앱 재시작 후 로드 시 호출. speedBoostEndMs가 미래면 배속 재활성화. + void restoreFromMonetization({ + required MonetizationState monetization, + required ProgressLoop? loop, + }) { + final endMs = monetization.speedBoostEndMs; + if (endMs == null) return; + + final now = DateTime.now().millisecondsSinceEpoch; + if (now < endMs) { + // 아직 만료되지 않음 → 배속 재활성화 + _isSpeedBoostActive = true; + if (loop != null) { + savedSpeedMultiplier = loop.speedMultiplier; + loop.updateAvailableSpeeds([speedBoostMultiplier]); + } + debugPrint( + '[SpeedBoost] Restored from save, ${(endMs - now) ~/ 1000}s remaining', + ); + } + } + /// 부스트 상태에 따른 초기 배속 설정 계산 /// /// startNew() 호출 시 사용