feat(ui): UI 컴포넌트 및 위젯 개선

- 게임 플레이 화면 개선
- 캐로셀 네비게이션 개선
- 각 페이지 위젯 스타일 통일
- 레트로 스타일 공통 위젯 개선
This commit is contained in:
JiWoong Sul
2025-12-31 17:47:02 +09:00
parent e679abd0d8
commit ff4ad4c9e7
34 changed files with 171 additions and 149 deletions

View File

@@ -1,13 +1,14 @@
import 'dart:async';
import 'package:askiineverdie/src/core/engine/progress_loop.dart';
import 'package:askiineverdie/src/core/engine/progress_service.dart';
import 'package:askiineverdie/src/core/engine/resurrection_service.dart';
import 'package:askiineverdie/src/core/engine/shop_service.dart';
import 'package:askiineverdie/src/core/model/game_state.dart';
import 'package:askiineverdie/src/core/model/game_statistics.dart';
import 'package:askiineverdie/src/core/storage/save_manager.dart';
import 'package:askiineverdie/src/core/storage/statistics_storage.dart';
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/game_state.dart';
import 'package:asciineverdie/src/core/model/game_statistics.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 }
@@ -21,14 +22,17 @@ class GameSessionController extends ChangeNotifier {
Duration tickInterval = const Duration(milliseconds: 50),
DateTime Function()? now,
StatisticsStorage? statisticsStorage,
HallOfFameStorage? hallOfFameStorage,
}) : _tickInterval = tickInterval,
_now = now ?? DateTime.now,
_statisticsStorage = statisticsStorage ?? StatisticsStorage();
_statisticsStorage = statisticsStorage ?? StatisticsStorage(),
_hallOfFameStorage = hallOfFameStorage ?? HallOfFameStorage();
final ProgressService progressService;
final SaveManager saveManager;
final AutoSaveConfig autoSaveConfig;
final StatisticsStorage _statisticsStorage;
final HallOfFameStorage _hallOfFameStorage;
final Duration _tickInterval;
final DateTime Function() _now;
@@ -88,6 +92,9 @@ class GameSessionController extends ChangeNotifier {
}
_initPreviousValues(state);
// 명예의 전당 체크 → 가용 배속 결정
final availableSpeeds = await _getAvailableSpeeds();
_loop = ProgressLoop(
initialState: state,
progressService: progressService,
@@ -97,6 +104,7 @@ class GameSessionController extends ChangeNotifier {
now: _now,
cheatsEnabled: cheatsEnabled,
onPlayerDied: _onPlayerDied,
availableSpeeds: availableSpeeds,
);
_subscription = _loop!.stream.listen((next) {
@@ -109,6 +117,20 @@ class GameSessionController extends ChangeNotifier {
notifyListeners();
}
/// 명예의 전당 상태에 따른 가용 배속 목록 반환
/// - 디버그 모드(치트 활성화): [1, 5, 20] (터보 모드)
/// - 명예의 전당에 캐릭터 없음: [1, 5]
/// - 명예의 전당에 캐릭터 있음: [1, 2, 5]
Future<List<int>> _getAvailableSpeeds() async {
// 디버그 모드면 터보(20x) 추가
if (_cheatsEnabled) {
return [1, 5, 20];
}
final hallOfFame = await _hallOfFameStorage.load();
return hallOfFame.isEmpty ? [1, 5] : [1, 2, 5];
}
/// 이전 값 초기화 (통계 변화 추적용)
void _initPreviousValues(GameState state) {
_previousLevel = state.traits.level;