From 474cf41a7d15dc17ea127d0cdabe2abac4edac03 Mon Sep 17 00:00:00 2001 From: hispidence Date: Sat, 3 Jul 2021 23:16:28 +0100 Subject: [PATCH] Add doCallback function to throw an exception if one of the callback encounters an error (and if WarningsAsErrors is on). --- TR5Main/Scripting/GameLogicScript.cpp | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/TR5Main/Scripting/GameLogicScript.cpp b/TR5Main/Scripting/GameLogicScript.cpp index 3c783ba3b..1cb0181b0 100644 --- a/TR5Main/Scripting/GameLogicScript.cpp +++ b/TR5Main/Scripting/GameLogicScript.cpp @@ -389,30 +389,39 @@ void LuaVariables::SetVariable(std::string key, sol::object value) } } +static void doCallback(sol::protected_function const & func) { + auto r = func(); + if (WarningsAsErrors && !r.valid()) + { + sol::error err = r; + std::cerr << "An error occurred: " << err.what() << "\n"; + throw std::runtime_error(err.what()); + } +} + void GameScript::OnStart() { - m_onStart(); + doCallback(m_onStart); } void GameScript::OnLoad() { - m_onLoad(); + doCallback(m_onLoad); } void GameScript::OnControlPhase() { - m_onControlPhase(); + doCallback(m_onControlPhase); } void GameScript::OnSave() { - m_onSave(); - + doCallback(m_onSave); } void GameScript::OnEnd() { - m_onEnd(); + doCallback(m_onEnd); } void GameScript::InitCallbacks()