Skip to content

Commit 24d5c26

Browse files
committed
Made save menu async- in future can investigate adding a little saving icon
1 parent 30430a0 commit 24d5c26

File tree

3 files changed

+25
-11
lines changed

3 files changed

+25
-11
lines changed

Source/Managers/ActivityMan.cpp

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -81,8 +81,9 @@ bool ActivityMan::ForceAbortSave() {
8181
#define HACK_MZ_COMPRESS_METHOD_DEFLATE 8
8282

8383
bool ActivityMan::SaveCurrentGame(const std::string& fileName) {
84-
m_SaveGameTask.wait();
85-
m_SaveGameTask = std::future<void>();
84+
if (m_SaveGameTask.valid()) {
85+
m_SaveGameTask.wait();
86+
}
8687

8788
Scene* scene = g_SceneMan.GetScene();
8889
GAScripted* activity = dynamic_cast<GAScripted*>(GetActivity());
@@ -258,8 +259,10 @@ bool ActivityMan::LoadAndLaunchGame(const std::string& fileName) {
258259
unzFile zippedSaveFile = unzOpen(saveFilePath.c_str());
259260
if (!zippedSaveFile) {
260261
// Might be trying to open one we're already saving too, wait until we finish saving and try again
261-
m_SaveGameTask.wait();
262-
zippedSaveFile = unzOpen(saveFilePath.c_str());
262+
if (m_SaveGameTask.valid()) {
263+
m_SaveGameTask.wait();
264+
zippedSaveFile = unzOpen(saveFilePath.c_str());
265+
}
263266

264267
if (!zippedSaveFile) {
265268
// Some other process is stopping us from loading, oh well

Source/Managers/ActivityMan.h

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -131,11 +131,15 @@ namespace RTE {
131131
bool LoadAndLaunchGame(const std::string& fileName);
132132

133133
/// Waits for the task that saves the game to complete.
134-
void WaitForSaveGameTask() const { m_SaveGameTask.wait(); }
134+
void WaitForSaveGameTask() const {
135+
if (m_SaveGameTask.valid()) {
136+
m_SaveGameTask.wait();
137+
}
138+
}
135139

136140
/// Returns whether a save is currently in progress.
137141
/// @return Whether or not a save is currently in progress.
138-
bool IsCurrentlySaving() const { return m_SaveGameTask.wait_for(std::chrono::seconds(0)) == std::future_status::ready; }
142+
bool IsCurrentlySaving() const { return m_SaveGameTask.valid() && m_SaveGameTask.wait_for(std::chrono::seconds(0)) != std::future_status::ready; }
139143
#pragma endregion
140144

141145
#pragma region Activity Start Handling

Source/Menus/SaveLoadMenuGUI.cpp

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -74,12 +74,16 @@ SaveLoadMenuGUI::SaveLoadMenuGUI(AllegroScreen* guiScreen, GUIInputWrapper* guiI
7474
m_ConfirmationButton = dynamic_cast<GUIButton*>(m_GUIControlManager->GetControl("ConfirmButton"));
7575
m_CancelButton = dynamic_cast<GUIButton*>(m_GUIControlManager->GetControl("CancelButton"));
7676

77+
m_SaveGamesFetched = false;
78+
7779
SwitchToConfirmDialogMode(ConfirmDialogMode::None);
7880
}
7981

8082
void SaveLoadMenuGUI::PopulateSaveGamesList() {
81-
g_ActivityMan.WaitForSaveGameTask();
82-
83+
if (g_ActivityMan.IsCurrentlySaving() || m_SaveGamesFetched) {
84+
return;
85+
}
86+
8387
m_SaveGames.clear();
8488
m_SaveGameName->SetText("");
8589

@@ -143,6 +147,7 @@ void SaveLoadMenuGUI::PopulateSaveGamesList() {
143147
});
144148

145149
UpdateSaveGamesGUIList();
150+
m_SaveGamesFetched = true;
146151
}
147152

148153
void SaveLoadMenuGUI::UpdateSaveGamesGUIList() {
@@ -209,7 +214,7 @@ void SaveLoadMenuGUI::CreateSave() {
209214
g_GUISound.UserErrorSound()->Play();
210215
}
211216

212-
PopulateSaveGamesList();
217+
m_SaveGamesFetched = false;
213218
}
214219

215220
void SaveLoadMenuGUI::DeleteSave() {
@@ -218,7 +223,7 @@ void SaveLoadMenuGUI::DeleteSave() {
218223
std::filesystem::remove(saveFilePath);
219224
g_GUISound.ConfirmSound()->Play();
220225

221-
PopulateSaveGamesList();
226+
m_SaveGamesFetched = false;
222227
}
223228

224229
void SaveLoadMenuGUI::UpdateButtonEnabledStates() {
@@ -271,6 +276,8 @@ void SaveLoadMenuGUI::SwitchToConfirmDialogMode(ConfirmDialogMode mode) {
271276
}
272277

273278
bool SaveLoadMenuGUI::HandleInputEvents(PauseMenuGUI* pauseMenu) {
279+
PopulateSaveGamesList();
280+
274281
m_GUIControlManager->Update();
275282

276283
GUIEvent guiEvent;
@@ -324,7 +331,7 @@ bool SaveLoadMenuGUI::HandleInputEvents(PauseMenuGUI* pauseMenu) {
324331
}
325332

326333
void SaveLoadMenuGUI::Refresh() {
327-
PopulateSaveGamesList();
334+
m_SaveGamesFetched = false;
328335
UpdateButtonEnabledStates();
329336
}
330337

0 commit comments

Comments
 (0)