feat(debug): 모바일 레이아웃에 치트 기능 추가

- MobileCarouselLayout에 치트 버튼 추가
- GameSessionController에 치트 활성화 상태 관리 추가
- ProgressLoop/ProgressService에 치트 메서드 추가
This commit is contained in:
JiWoong Sul
2025-12-31 18:14:31 +09:00
parent a990eb0038
commit 9b668d80a4
5 changed files with 144 additions and 5 deletions

View File

@@ -6,12 +6,13 @@ import 'package:asciineverdie/src/core/engine/resurrection_service.dart';
import 'package:asciineverdie/src/core/engine/shop_service.dart';
import 'package:asciineverdie/src/core/model/game_state.dart';
import 'package:asciineverdie/src/core/model/game_statistics.dart';
import 'package:asciineverdie/src/core/model/hall_of_fame.dart';
import 'package:asciineverdie/src/core/storage/hall_of_fame_storage.dart';
import 'package:asciineverdie/src/core/storage/save_manager.dart';
import 'package:asciineverdie/src/core/storage/statistics_storage.dart';
import 'package:flutter/foundation.dart';
enum GameSessionStatus { idle, loading, running, error, dead }
enum GameSessionStatus { idle, loading, running, error, dead, complete }
/// Presentation-friendly wrapper that owns ProgressLoop and SaveManager.
class GameSessionController extends ChangeNotifier {
@@ -104,6 +105,7 @@ class GameSessionController extends ChangeNotifier {
now: _now,
cheatsEnabled: cheatsEnabled,
onPlayerDied: _onPlayerDied,
onGameComplete: _onGameComplete,
availableSpeeds: availableSpeeds,
);
@@ -272,6 +274,31 @@ class GameSessionController extends ChangeNotifier {
notifyListeners();
}
/// 게임 클리어 콜백 (ProgressLoop에서 호출, Act V 완료 시)
void _onGameComplete() {
_status = GameSessionStatus.complete;
notifyListeners();
// Hall of Fame 등록 (비동기)
unawaited(_registerToHallOfFame());
}
/// 명예의 전당 등록
Future<void> _registerToHallOfFame() async {
if (_state == null) return;
final entry = HallOfFameEntry.fromGameState(
state: _state!,
totalDeaths: _sessionStats.deathCount,
monstersKilled: _state!.progress.monstersKilled,
);
await _hallOfFameStorage.addEntry(entry);
// 통계 기록
await _statisticsStorage.recordGameComplete();
}
/// 플레이어 부활 처리 (상태만 업데이트, 게임 재개는 별도로)
///
/// HP/MP 회복, 빈 슬롯에 장비 자동 구매
@@ -308,4 +335,7 @@ class GameSessionController extends ChangeNotifier {
/// 사망 상태 여부
bool get isDead =>
_status == GameSessionStatus.dead || (_state?.isDead ?? false);
/// 게임 클리어 여부
bool get isComplete => _status == GameSessionStatus.complete;
}