Skip to content

Commit c842ad9

Browse files
committed
Fix crash in MainLoopController
1 parent b183260 commit c842ad9

File tree

1 file changed

+41
-40
lines changed

1 file changed

+41
-40
lines changed

source/Gui/MainLoopController.cpp

Lines changed: 41 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -144,41 +144,41 @@ void MainLoopController::processLoadingScreen()
144144
{
145145
drawLoadingScreen();
146146

147-
auto requestedSimState = _PersisterFacade::get()->getRequestState(_loadSimRequestId).value();
148-
if (requestedSimState == PersisterRequestState::Finished) {
149-
auto const& data = _PersisterFacade::get()->fetchReadSimulationData(_loadSimRequestId);
150-
auto const& deserializedSim = data.deserializedSimulation;
151-
Viewport::get().setCenterInWorldPos(deserializedSim.auxiliaryData.center);
152-
Viewport::get().setZoomFactor(deserializedSim.auxiliaryData.zoom);
153-
TemporalControlWindow::get().onSnapshot();
154-
155-
_simulationLoadedTimepoint = std::chrono::steady_clock::now();
156-
_programState = ProgramState::FadeOutLoadingScreen;
157-
}
158-
if (requestedSimState == PersisterRequestState::Error) {
159-
GenericMessageDialog::get().information("Error", "The default simulation file could not be read.\nAn empty simulation will be created.");
160-
161-
DeserializedSimulation deserializedSim;
162-
deserializedSim.auxiliaryData.worldSize.x = 1000;
163-
deserializedSim.auxiliaryData.worldSize.y = 500;
164-
deserializedSim.auxiliaryData.timestep = 0;
165-
deserializedSim.auxiliaryData.zoom = 12.0f;
166-
deserializedSim.auxiliaryData.center = {500.0f, 250.0f};
167-
deserializedSim.auxiliaryData.realTime = std::chrono::milliseconds(0);
168-
169-
_SimulationFacade::get()->newSimulation(
170-
deserializedSim.auxiliaryData.timestep, deserializedSim.auxiliaryData.worldSize, deserializedSim.auxiliaryData.simulationParameters);
171-
_SimulationFacade::get()->setSimulationData(deserializedSim.mainData);
172-
_SimulationFacade::get()->setStatisticsHistory(deserializedSim.statistics);
173-
_SimulationFacade::get()->setRealTime(deserializedSim.auxiliaryData.realTime);
174-
Viewport::get().setCenterInWorldPos(deserializedSim.auxiliaryData.center);
175-
Viewport::get().setZoomFactor(deserializedSim.auxiliaryData.zoom);
176-
TemporalControlWindow::get().onSnapshot();
177-
178-
_simulationLoadedTimepoint = std::chrono::steady_clock::now();
179-
_programState = ProgramState::FadeOutLoadingScreen;
147+
if (auto requestedSimState = _PersisterFacade::get()->getRequestState(_loadSimRequestId)) {
148+
if (requestedSimState.value() == PersisterRequestState::Finished) {
149+
auto const& data = _PersisterFacade::get()->fetchReadSimulationData(_loadSimRequestId);
150+
auto const& deserializedSim = data.deserializedSimulation;
151+
Viewport::get().setCenterInWorldPos(deserializedSim.auxiliaryData.center);
152+
Viewport::get().setZoomFactor(deserializedSim.auxiliaryData.zoom);
153+
TemporalControlWindow::get().onSnapshot();
154+
155+
_simulationLoadedTimepoint = std::chrono::steady_clock::now();
156+
_programState = ProgramState::FadeOutLoadingScreen;
157+
}
158+
if (requestedSimState.value() == PersisterRequestState::Error) {
159+
GenericMessageDialog::get().information("Error", "The default simulation file could not be read.\nAn empty simulation will be created.");
160+
161+
DeserializedSimulation deserializedSim;
162+
deserializedSim.auxiliaryData.worldSize.x = 1000;
163+
deserializedSim.auxiliaryData.worldSize.y = 500;
164+
deserializedSim.auxiliaryData.timestep = 0;
165+
deserializedSim.auxiliaryData.zoom = 12.0f;
166+
deserializedSim.auxiliaryData.center = {500.0f, 250.0f};
167+
deserializedSim.auxiliaryData.realTime = std::chrono::milliseconds(0);
168+
169+
_SimulationFacade::get()->newSimulation(
170+
deserializedSim.auxiliaryData.timestep, deserializedSim.auxiliaryData.worldSize, deserializedSim.auxiliaryData.simulationParameters);
171+
_SimulationFacade::get()->setSimulationData(deserializedSim.mainData);
172+
_SimulationFacade::get()->setStatisticsHistory(deserializedSim.statistics);
173+
_SimulationFacade::get()->setRealTime(deserializedSim.auxiliaryData.realTime);
174+
Viewport::get().setCenterInWorldPos(deserializedSim.auxiliaryData.center);
175+
Viewport::get().setZoomFactor(deserializedSim.auxiliaryData.zoom);
176+
TemporalControlWindow::get().onSnapshot();
177+
178+
_simulationLoadedTimepoint = std::chrono::steady_clock::now();
179+
_programState = ProgramState::FadeOutLoadingScreen;
180+
}
180181
}
181-
182182
OverlayController::get().process();
183183

184184
std::this_thread::sleep_for(std::chrono::milliseconds(10));
@@ -260,12 +260,13 @@ void MainLoopController::processExiting()
260260

261261
FpsController::get().processForceFps(WindowController::get().getFps());
262262

263-
auto requestedSimState = _PersisterFacade::get()->getRequestState(_saveSimRequestId).value();
264-
if (requestedSimState == PersisterRequestState::Finished) {
265-
_PersisterFacade::get()->fetchSaveSimulationData(_saveSimRequestId);
266-
_programState = ProgramState::Finished;
267-
} else if (requestedSimState == PersisterRequestState::Error) {
268-
_programState = ProgramState::Finished;
263+
if (auto requestedSimState = _PersisterFacade::get()->getRequestState(_saveSimRequestId)) {
264+
if (requestedSimState.value() == PersisterRequestState::Finished) {
265+
_PersisterFacade::get()->fetchSaveSimulationData(_saveSimRequestId);
266+
_programState = ProgramState::Finished;
267+
} else if (requestedSimState.value() == PersisterRequestState::Error) {
268+
_programState = ProgramState::Finished;
269+
}
269270
}
270271
}
271272

0 commit comments

Comments
 (0)