feat(ui): 화면 및 컨트롤러 수익화 연동

- 앱 초기화에 광고/IAP 서비스 추가
- 게임 세션 컨트롤러 수익화 상태 관리
- 캐릭터 생성 화면 굴리기 제한 UI
- 설정 화면 광고 제거 구매 UI
- 애니메이션 패널 개선
This commit is contained in:
JiWoong Sul
2026-01-16 20:10:43 +09:00
parent c95e4de5a4
commit 748160d543
8 changed files with 1288 additions and 373 deletions

View File

@@ -3,6 +3,7 @@ import 'package:flutter/material.dart';
import 'package:asciineverdie/data/game_text_l10n.dart' as game_l10n;
import 'package:asciineverdie/l10n/app_localizations.dart';
import 'package:asciineverdie/src/core/audio/audio_service.dart';
import 'package:asciineverdie/src/core/engine/debug_settings_service.dart';
import 'package:asciineverdie/src/shared/retro_colors.dart';
import 'package:asciineverdie/src/core/engine/game_mutations.dart';
import 'package:asciineverdie/src/core/engine/progress_service.dart';
@@ -23,6 +24,7 @@ import 'package:asciineverdie/src/features/game/game_session_controller.dart';
import 'package:asciineverdie/src/features/game/widgets/notification_overlay.dart';
import 'package:asciineverdie/src/features/hall_of_fame/hall_of_fame_screen.dart';
import 'package:asciineverdie/src/features/new_character/new_character_screen.dart';
import 'package:asciineverdie/src/features/settings/settings_screen.dart';
class AskiiNeverDieApp extends StatefulWidget {
const AskiiNeverDieApp({super.key});
@@ -81,6 +83,8 @@ class _AskiiNeverDieAppState extends State<AskiiNeverDieApp> {
// 초기 설정 및 오디오 서비스 로드
_loadSettings();
_audioService.init();
// 디버그 설정 서비스 초기화 (Phase 8)
DebugSettingsService.instance.initialize();
// 세이브 파일 존재 여부 확인
_checkForExistingSave();
// 명예의 전당 로드
@@ -118,7 +122,7 @@ class _AskiiNeverDieAppState extends State<AskiiNeverDieApp> {
if (exists) {
// 세이브 파일에서 미리보기 정보 추출
final (outcome, state, _) = await _controller.saveManager.loadState();
final (outcome, state, _, _) = await _controller.saveManager.loadState();
if (outcome.success && state != null) {
final actName = _getActName(state.progress.plotStageCount);
preview = SavedGamePreview(
@@ -465,6 +469,7 @@ class _AskiiNeverDieAppState extends State<AskiiNeverDieApp> {
onLoadSave: _loadSave,
onHallOfFame: _navigateToHallOfFame,
onLocalArena: _navigateToArena,
onSettings: _showSettings,
hasSaveFile: _hasSave,
savedGamePreview: _savedGamePreview,
hallOfFameCount: _hallOfFame.count,
@@ -602,6 +607,18 @@ class _AskiiNeverDieAppState extends State<AskiiNeverDieApp> {
_audioService.playBgm('title');
});
}
/// 설정 화면 표시 (모달 바텀시트)
void _showSettings(BuildContext context) {
SettingsScreen.show(
context,
settingsRepository: _settingsRepository,
currentThemeMode: _themeMode,
onThemeModeChange: _changeThemeMode,
onBgmVolumeChange: _audioService.setBgmVolume,
onSfxVolumeChange: _audioService.setSfxVolume,
);
}
}
/// 스플래시 화면 (세이브 파일 확인 중) - 레트로 스타일