From 3f41555a6175f8c09291dabe5f0bdf55614bfaa5 Mon Sep 17 00:00:00 2001 From: Piotr Dziwinski Date: Tue, 14 Jul 2015 18:46:22 +0200 Subject: [PATCH] Better exception handling in CRobotMain --- src/object/robotmain.cpp | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/src/object/robotmain.cpp b/src/object/robotmain.cpp index a9acc5a2..297657d0 100644 --- a/src/object/robotmain.cpp +++ b/src/object/robotmain.cpp @@ -572,7 +572,7 @@ void CRobotMain::ChangePhase(Phase phase) m_sound->StopMusic(0.0f); if (m_base == nullptr || loading) StartMusic(); } - catch (const CLevelParserException& e) + catch (const std::runtime_error& e) { CLogger::GetInstancePointer()->Error("An error occured while trying to load a level\n"); CLogger::GetInstancePointer()->Error("%s\n", e.what()); @@ -619,7 +619,7 @@ void CRobotMain::ChangePhase(Phase phase) } StartMusic(); } - catch (const CLevelParserException& e) + catch (const std::runtime_error& e) { CLogger::GetInstancePointer()->Error("An error occured while trying to load win scene\n"); CLogger::GetInstancePointer()->Error("%s\n", e.what()); @@ -652,7 +652,7 @@ void CRobotMain::ChangePhase(Phase phase) StartMusic(); } - catch (const CLevelParserException& e) + catch (const std::runtime_error& e) { CLogger::GetInstancePointer()->Error("An error occured while trying to load lost scene\n"); CLogger::GetInstancePointer()->Error("%s\n", e.what()); @@ -2862,7 +2862,7 @@ void CRobotMain::ScenePerso() { CreateScene(false, true, false); // sets scene } - catch (const CLevelParserException& e) + catch (const std::runtime_error& e) { CLogger::GetInstancePointer()->Error("An error occured while trying to load apperance scene\n"); CLogger::GetInstancePointer()->Error("%s\n", e.what()); @@ -3540,8 +3540,16 @@ void CRobotMain::CreateScene(bool soluce, bool fixScene, bool resetObject) } catch (const CObjectCreateException& e) { - GetLogger()->Error("Error loading level object: %s\n", e.what()); - continue; + if (gadget) + { + GetLogger()->Warn("Error loading decorative object: %s\n", e.what()); + continue; + } + else + { + GetLogger()->Error("Error loading level object: %s\n", e.what()); + throw; + } } if (m_fixScene && type == OBJECT_HUMAN) @@ -5341,7 +5349,7 @@ void CRobotMain::ResetCreate() } } } - catch (const CLevelParserException& e) + catch (const std::runtime_error& e) { CLogger::GetInstancePointer()->Error("An error occured while trying to reset scene\n"); CLogger::GetInstancePointer()->Error("%s\n", e.what());