refactor(core): 진행 루프, 저장 데이터, 저장 관리자 개선

- ProgressLoop 로직 정리
- SaveData 모델 확장
- SaveManager 개선
This commit is contained in:
JiWoong Sul
2026-01-08 16:05:08 +09:00
parent 56b568a832
commit 606d052e2c
3 changed files with 18 additions and 9 deletions

View File

@@ -108,7 +108,7 @@ class ProgressLoop {
_timer?.cancel(); _timer?.cancel();
_timer = null; _timer = null;
if (saveOnStop && _autoSaveConfig.onStop && saveManager != null) { if (saveOnStop && _autoSaveConfig.onStop && saveManager != null) {
await saveManager!.saveState(_state); await saveManager!.saveState(_state, cheatsEnabled: cheatsEnabled);
} }
} }
@@ -131,7 +131,7 @@ class ProgressLoop {
_stateController.add(_state); _stateController.add(_state);
if (saveManager != null && _autoSaveConfig.shouldSave(result)) { if (saveManager != null && _autoSaveConfig.shouldSave(result)) {
saveManager!.saveState(_state); saveManager!.saveState(_state, cheatsEnabled: cheatsEnabled);
} }
// 사망 시 루프 정지 및 콜백 호출 (Phase 4) // 사망 시 루프 정지 및 콜백 호출 (Phase 4)

View File

@@ -16,9 +16,10 @@ class GameSave {
required this.skillBook, required this.skillBook,
required this.progress, required this.progress,
required this.queue, required this.queue,
this.cheatsEnabled = false,
}); });
factory GameSave.fromState(GameState state) { factory GameSave.fromState(GameState state, {bool cheatsEnabled = false}) {
return GameSave( return GameSave(
version: kSaveVersion, version: kSaveVersion,
rngState: state.rng.state, rngState: state.rng.state,
@@ -29,6 +30,7 @@ class GameSave {
skillBook: state.skillBook, skillBook: state.skillBook,
progress: state.progress, progress: state.progress,
queue: state.queue, queue: state.queue,
cheatsEnabled: cheatsEnabled,
); );
} }
@@ -41,10 +43,12 @@ class GameSave {
final SkillBook skillBook; final SkillBook skillBook;
final ProgressState progress; final ProgressState progress;
final QueueState queue; final QueueState queue;
final bool cheatsEnabled;
Map<String, dynamic> toJson() { Map<String, dynamic> toJson() {
return { return {
'version': version, 'version': version,
'cheatsEnabled': cheatsEnabled,
'rng': rngState, 'rng': rngState,
'traits': { 'traits': {
'name': traits.name, 'name': traits.name,
@@ -144,6 +148,7 @@ class GameSave {
return GameSave( return GameSave(
version: json['version'] as int? ?? kSaveVersion, version: json['version'] as int? ?? kSaveVersion,
cheatsEnabled: json['cheatsEnabled'] as bool? ?? false,
rngState: json['rng'] as int? ?? 0, rngState: json['rng'] as int? ?? 0,
traits: Traits( traits: Traits(
name: traitsJson['name'] as String? ?? '', name: traitsJson['name'] as String? ?? '',

View File

@@ -13,19 +13,23 @@ class SaveManager {
/// Save current game state to disk. [fileName] may be absolute or relative. /// Save current game state to disk. [fileName] may be absolute or relative.
/// Returns outcome with error on failure. /// Returns outcome with error on failure.
Future<SaveOutcome> saveState(GameState state, {String? fileName}) { Future<SaveOutcome> saveState(
final save = GameSave.fromState(state); GameState state, {
String? fileName,
bool cheatsEnabled = false,
}) {
final save = GameSave.fromState(state, cheatsEnabled: cheatsEnabled);
return _repo.save(save, fileName ?? defaultFileName); return _repo.save(save, fileName ?? defaultFileName);
} }
/// Load game state from disk. [fileName] may be absolute (e.g., file picker). /// Load game state from disk. [fileName] may be absolute (e.g., file picker).
/// Returns outcome + optional state. /// Returns outcome + optional state + cheatsEnabled flag.
Future<(SaveOutcome, GameState?)> loadState({String? fileName}) async { Future<(SaveOutcome, GameState?, bool)> loadState({String? fileName}) async {
final (outcome, save) = await _repo.load(fileName ?? defaultFileName); final (outcome, save) = await _repo.load(fileName ?? defaultFileName);
if (!outcome.success || save == null) { if (!outcome.success || save == null) {
return (outcome, null); return (outcome, null, false);
} }
return (outcome, save.toState()); return (outcome, save.toState(), save.cheatsEnabled);
} }
/// 저장 파일 목록 조회 /// 저장 파일 목록 조회