refactor(core): 진행 루프, 저장 데이터, 저장 관리자 개선
- ProgressLoop 로직 정리 - SaveData 모델 확장 - SaveManager 개선
This commit is contained in:
@@ -108,7 +108,7 @@ class ProgressLoop {
|
||||
_timer?.cancel();
|
||||
_timer = 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);
|
||||
|
||||
if (saveManager != null && _autoSaveConfig.shouldSave(result)) {
|
||||
saveManager!.saveState(_state);
|
||||
saveManager!.saveState(_state, cheatsEnabled: cheatsEnabled);
|
||||
}
|
||||
|
||||
// 사망 시 루프 정지 및 콜백 호출 (Phase 4)
|
||||
|
||||
@@ -16,9 +16,10 @@ class GameSave {
|
||||
required this.skillBook,
|
||||
required this.progress,
|
||||
required this.queue,
|
||||
this.cheatsEnabled = false,
|
||||
});
|
||||
|
||||
factory GameSave.fromState(GameState state) {
|
||||
factory GameSave.fromState(GameState state, {bool cheatsEnabled = false}) {
|
||||
return GameSave(
|
||||
version: kSaveVersion,
|
||||
rngState: state.rng.state,
|
||||
@@ -29,6 +30,7 @@ class GameSave {
|
||||
skillBook: state.skillBook,
|
||||
progress: state.progress,
|
||||
queue: state.queue,
|
||||
cheatsEnabled: cheatsEnabled,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -41,10 +43,12 @@ class GameSave {
|
||||
final SkillBook skillBook;
|
||||
final ProgressState progress;
|
||||
final QueueState queue;
|
||||
final bool cheatsEnabled;
|
||||
|
||||
Map<String, dynamic> toJson() {
|
||||
return {
|
||||
'version': version,
|
||||
'cheatsEnabled': cheatsEnabled,
|
||||
'rng': rngState,
|
||||
'traits': {
|
||||
'name': traits.name,
|
||||
@@ -144,6 +148,7 @@ class GameSave {
|
||||
|
||||
return GameSave(
|
||||
version: json['version'] as int? ?? kSaveVersion,
|
||||
cheatsEnabled: json['cheatsEnabled'] as bool? ?? false,
|
||||
rngState: json['rng'] as int? ?? 0,
|
||||
traits: Traits(
|
||||
name: traitsJson['name'] as String? ?? '',
|
||||
|
||||
@@ -13,19 +13,23 @@ class SaveManager {
|
||||
|
||||
/// Save current game state to disk. [fileName] may be absolute or relative.
|
||||
/// Returns outcome with error on failure.
|
||||
Future<SaveOutcome> saveState(GameState state, {String? fileName}) {
|
||||
final save = GameSave.fromState(state);
|
||||
Future<SaveOutcome> saveState(
|
||||
GameState state, {
|
||||
String? fileName,
|
||||
bool cheatsEnabled = false,
|
||||
}) {
|
||||
final save = GameSave.fromState(state, cheatsEnabled: cheatsEnabled);
|
||||
return _repo.save(save, fileName ?? defaultFileName);
|
||||
}
|
||||
|
||||
/// Load game state from disk. [fileName] may be absolute (e.g., file picker).
|
||||
/// Returns outcome + optional state.
|
||||
Future<(SaveOutcome, GameState?)> loadState({String? fileName}) async {
|
||||
/// Returns outcome + optional state + cheatsEnabled flag.
|
||||
Future<(SaveOutcome, GameState?, bool)> loadState({String? fileName}) async {
|
||||
final (outcome, save) = await _repo.load(fileName ?? defaultFileName);
|
||||
if (!outcome.success || save == null) {
|
||||
return (outcome, null);
|
||||
return (outcome, null, false);
|
||||
}
|
||||
return (outcome, save.toState());
|
||||
return (outcome, save.toState(), save.cheatsEnabled);
|
||||
}
|
||||
|
||||
/// 저장 파일 목록 조회
|
||||
|
||||
Reference in New Issue
Block a user