refactor(core): 진행 루프, 저장 데이터, 저장 관리자 개선
- ProgressLoop 로직 정리 - SaveData 모델 확장 - SaveManager 개선
This commit is contained in:
@@ -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)
|
||||||
|
|||||||
@@ -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? ?? '',
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// 저장 파일 목록 조회
|
/// 저장 파일 목록 조회
|
||||||
|
|||||||
Reference in New Issue
Block a user