feat(game): 게임 클리어 시 VictoryOverlay 추가

- VictoryOverlay 위젯 신규 생성
- GameSessionController에 isComplete 상태 추가
- 레벨 100 도달 시 승리 오버레이 표시
- 승리 후 명예의 전당 화면으로 이동
This commit is contained in:
JiWoong Sul
2025-12-31 18:52:18 +09:00
parent 9b668d80a4
commit a6d3c1e42f
4 changed files with 635 additions and 65 deletions

View File

@@ -4,6 +4,7 @@ import 'package:asciineverdie/src/core/engine/progress_loop.dart';
import 'package:asciineverdie/src/core/engine/progress_service.dart';
import 'package:asciineverdie/src/core/engine/resurrection_service.dart';
import 'package:asciineverdie/src/core/engine/shop_service.dart';
import 'package:asciineverdie/src/core/model/combat_stats.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';
@@ -285,18 +286,40 @@ class GameSessionController extends ChangeNotifier {
/// 명예의 전당 등록
Future<void> _registerToHallOfFame() async {
if (_state == null) return;
if (_state == null) {
debugPrint('[HallOfFame] _state is null, skipping registration');
return;
}
final entry = HallOfFameEntry.fromGameState(
state: _state!,
totalDeaths: _sessionStats.deathCount,
monstersKilled: _state!.progress.monstersKilled,
);
try {
debugPrint('[HallOfFame] Starting registration...');
await _hallOfFameStorage.addEntry(entry);
// 최종 전투 스탯 계산 (CombatStats)
final combatStats = CombatStats.fromStats(
stats: _state!.stats,
equipment: _state!.equipment,
level: _state!.traits.level,
);
// 통계 기록
await _statisticsStorage.recordGameComplete();
final entry = HallOfFameEntry.fromGameState(
state: _state!,
totalDeaths: _sessionStats.deathCount,
monstersKilled: _state!.progress.monstersKilled,
combatStats: combatStats,
);
debugPrint('[HallOfFame] Entry created: ${entry.characterName} Lv.${entry.level}');
final success = await _hallOfFameStorage.addEntry(entry);
debugPrint('[HallOfFame] Storage save result: $success');
// 통계 기록
await _statisticsStorage.recordGameComplete();
debugPrint('[HallOfFame] Registration complete');
} catch (e, st) {
debugPrint('[HallOfFame] ERROR: $e');
debugPrint('[HallOfFame] StackTrace: $st');
}
}
/// 플레이어 부활 처리 (상태만 업데이트, 게임 재개는 별도로)