feat(ui): UI 컴포넌트 및 위젯 개선
- 게임 플레이 화면 개선 - 캐로셀 네비게이션 개선 - 각 페이지 위젯 스타일 통일 - 레트로 스타일 공통 위젯 개선
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user