From 2ef46562c811bb220d2073477a4c77127cb70a9b Mon Sep 17 00:00:00 2001 From: lethosor Date: Fri, 23 Aug 2019 20:45:35 -0400 Subject: [PATCH] Avoid calling doSaveData twice when unloading a world This was happening because of a switch to viewscreen_game_cleanerst and back to viewscreen_savegamest when saving --- library/Core.cpp | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/library/Core.cpp b/library/Core.cpp index 0dd02f12d..380f37965 100644 --- a/library/Core.cpp +++ b/library/Core.cpp @@ -138,6 +138,7 @@ struct Core::Private std::thread hotkeythread; bool last_autosave_request{false}; + bool was_load_save{false}; }; struct CommandDepthCounter @@ -1967,18 +1968,17 @@ void Core::doUpdate(color_ostream &out, bool first_update) vs_changed = true; } + bool is_load_save = + strict_virtual_cast(screen) || + strict_virtual_cast(screen) || + strict_virtual_cast(screen); + // save data (do this before updating last_world_data_ptr and triggering unload events) if ((df::global::ui->main.autosave_request && !d->last_autosave_request) || - (vs_changed && strict_virtual_cast(screen))) + (is_load_save && !d->was_load_save && strict_virtual_cast(screen))) { doSaveData(out); } - d->last_autosave_request = df::global::ui->main.autosave_request; - - bool is_load_save = - strict_virtual_cast(screen) || - strict_virtual_cast(screen) || - strict_virtual_cast(screen); // detect if the game was loaded or unloaded in the meantime void *new_wdata = NULL; @@ -2036,6 +2036,9 @@ void Core::doUpdate(color_ostream &out, bool first_update) // Execute per-frame handlers onUpdate(out); + d->last_autosave_request = df::global::ui->main.autosave_request; + d->was_load_save = is_load_save; + out << std::flush; }