feat(ui): 게임 화면 및 UI 컴포넌트 개선
- front_screen: 프론트 화면 UI 업데이트 - game_play_screen: 게임 플레이 화면 수정 - game_session_controller: 세션 관리 로직 개선 - mobile_carousel_layout: 모바일 캐러셀 레이아웃 개선 - enhanced_animation_panel: 애니메이션 패널 업데이트 - help_dialog: 도움말 다이얼로그 수정 - return_rewards_dialog: 복귀 보상 다이얼로그 개선 - new_character_screen: 새 캐릭터 화면 수정 - settings_screen: 설정 화면 업데이트
This commit is contained in:
@@ -7,7 +7,7 @@ import 'package:flutter/services.dart' show KeyDownEvent, LogicalKeyboardKey;
|
||||
import 'package:asciineverdie/data/game_text_l10n.dart' as game_l10n;
|
||||
import 'package:asciineverdie/data/skill_data.dart';
|
||||
import 'package:asciineverdie/src/core/engine/iap_service.dart';
|
||||
import 'package:asciineverdie/src/core/engine/return_rewards_service.dart';
|
||||
import 'package:asciineverdie/src/core/model/treasure_chest.dart';
|
||||
import 'package:asciineverdie/data/story_data.dart';
|
||||
import 'package:asciineverdie/l10n/app_localizations.dart';
|
||||
import 'package:asciineverdie/src/core/animation/ascii_animation_type.dart';
|
||||
@@ -51,8 +51,6 @@ class GamePlayScreen extends StatefulWidget {
|
||||
this.audioService,
|
||||
this.forceCarouselLayout = false,
|
||||
this.forceDesktopLayout = false,
|
||||
this.onThemeModeChange,
|
||||
this.currentThemeMode = ThemeMode.system,
|
||||
});
|
||||
|
||||
final GameSessionController controller;
|
||||
@@ -66,12 +64,6 @@ class GamePlayScreen extends StatefulWidget {
|
||||
/// 테스트 모드: 모바일에서도 데스크톱 3패널 레이아웃 강제 사용
|
||||
final bool forceDesktopLayout;
|
||||
|
||||
/// 테마 모드 변경 콜백
|
||||
final void Function(ThemeMode mode)? onThemeModeChange;
|
||||
|
||||
/// 현재 테마 모드
|
||||
final ThemeMode currentThemeMode;
|
||||
|
||||
@override
|
||||
State<GamePlayScreen> createState() => _GamePlayScreenState();
|
||||
}
|
||||
@@ -316,8 +308,6 @@ class _GamePlayScreenState extends State<GamePlayScreen>
|
||||
builder: (_) => GamePlayScreen(
|
||||
controller: widget.controller,
|
||||
audioService: widget.audioService,
|
||||
currentThemeMode: widget.currentThemeMode,
|
||||
onThemeModeChange: widget.onThemeModeChange,
|
||||
),
|
||||
),
|
||||
);
|
||||
@@ -407,15 +397,19 @@ class _GamePlayScreenState extends State<GamePlayScreen>
|
||||
}
|
||||
|
||||
/// 복귀 보상 다이얼로그 표시 (Phase 7)
|
||||
void _showReturnRewardsDialog(ReturnReward reward) {
|
||||
void _showReturnRewardsDialog(ReturnChestReward reward) {
|
||||
// 잠시 후 다이얼로그 표시 (게임 시작 후)
|
||||
WidgetsBinding.instance.addPostFrameCallback((_) {
|
||||
if (!mounted) return;
|
||||
final state = widget.controller.state;
|
||||
if (state == null) return;
|
||||
|
||||
ReturnRewardsDialog.show(
|
||||
context,
|
||||
reward: reward,
|
||||
onClaim: (totalGold) {
|
||||
widget.controller.applyReturnReward(totalGold);
|
||||
playerLevel: state.traits.level,
|
||||
onClaim: (rewards) {
|
||||
widget.controller.applyReturnReward(rewards);
|
||||
},
|
||||
);
|
||||
});
|
||||
@@ -436,10 +430,6 @@ class _GamePlayScreenState extends State<GamePlayScreen>
|
||||
SettingsScreen.show(
|
||||
context,
|
||||
settingsRepository: settingsRepo,
|
||||
currentThemeMode: widget.currentThemeMode,
|
||||
onThemeModeChange: (mode) {
|
||||
widget.onThemeModeChange?.call(mode);
|
||||
},
|
||||
onLocaleChange: (locale) async {
|
||||
// 안전한 언어 변경: 전체 화면 재생성
|
||||
final navigator = Navigator.of(this.context);
|
||||
@@ -452,8 +442,6 @@ class _GamePlayScreenState extends State<GamePlayScreen>
|
||||
builder: (_) => GamePlayScreen(
|
||||
controller: widget.controller,
|
||||
audioService: widget.audioService,
|
||||
currentThemeMode: widget.currentThemeMode,
|
||||
onThemeModeChange: widget.onThemeModeChange,
|
||||
),
|
||||
),
|
||||
);
|
||||
@@ -586,6 +574,10 @@ class _GamePlayScreenState extends State<GamePlayScreen>
|
||||
widget.controller.loop?.cycleSpeed();
|
||||
setState(() {});
|
||||
},
|
||||
onSetSpeed: (speed) {
|
||||
widget.controller.loop?.setSpeed(speed);
|
||||
setState(() {});
|
||||
},
|
||||
// 특수 애니메이션 중에는 일시정지 상태로 표시하지 않음
|
||||
isPaused:
|
||||
!widget.controller.isRunning && _specialAnimation == null,
|
||||
@@ -620,8 +612,6 @@ class _GamePlayScreenState extends State<GamePlayScreen>
|
||||
builder: (_) => GamePlayScreen(
|
||||
controller: widget.controller,
|
||||
audioService: widget.audioService,
|
||||
currentThemeMode: widget.currentThemeMode,
|
||||
onThemeModeChange: widget.onThemeModeChange,
|
||||
),
|
||||
),
|
||||
);
|
||||
@@ -637,8 +627,6 @@ class _GamePlayScreenState extends State<GamePlayScreen>
|
||||
Navigator.of(context).pop();
|
||||
}
|
||||
},
|
||||
currentThemeMode: widget.currentThemeMode,
|
||||
onThemeModeChange: widget.onThemeModeChange,
|
||||
// 사운드 설정
|
||||
bgmVolume: _audioController.bgmVolume,
|
||||
sfxVolume: _audioController.sfxVolume,
|
||||
@@ -666,11 +654,13 @@ class _GamePlayScreenState extends State<GamePlayScreen>
|
||||
navigator.popUntil((route) => route.isFirst);
|
||||
}
|
||||
},
|
||||
// 수익화 버프 (자동부활, 5배속)
|
||||
// 수익화 버프 (자동부활, 광고배속)
|
||||
autoReviveEndMs: widget.controller.monetization.autoReviveEndMs,
|
||||
speedBoostEndMs: widget.controller.monetization.speedBoostEndMs,
|
||||
isPaidUser: widget.controller.monetization.isPaidUser,
|
||||
onSpeedBoostActivate: _handleSpeedBoost,
|
||||
adSpeedMultiplier: widget.controller.adSpeedMultiplier,
|
||||
has2xUnlocked: widget.controller.has2xUnlocked,
|
||||
),
|
||||
// 사망 오버레이
|
||||
if (state.isDead && state.deathInfo != null)
|
||||
|
||||
Reference in New Issue
Block a user