From 220f76a6b5fa6d8b72ef6ff18a4e451eb64e1849 Mon Sep 17 00:00:00 2001 From: Sygmei <> Date: Sun, 14 Jun 2020 19:57:31 +0200 Subject: [PATCH] Fixed bad TextureNotFoundException --- include/Core/Engine/Exceptions.hpp | 2 +- include/Core/Scene/Scene.hpp | 2 +- include/Core/Triggers/TriggerGroup.hpp | 1 + src/Core/Scene/Scene.cpp | 13 +++++++------ src/Core/Triggers/TriggerGroup.cpp | 6 ++++++ src/Core/Triggers/TriggerManager.cpp | 5 +++-- 6 files changed, 19 insertions(+), 10 deletions(-) diff --git a/include/Core/Engine/Exceptions.hpp b/include/Core/Engine/Exceptions.hpp index 24475a6f1..37b67e2f6 100644 --- a/include/Core/Engine/Exceptions.hpp +++ b/include/Core/Engine/Exceptions.hpp @@ -50,7 +50,7 @@ namespace obe::Engine::Exceptions std::string_view path, std::vector mounts, DebugInfo info) : Exception("TextureNotFound", info) { - this->error("Could not find Texture with path '{}'"); + this->error("Could not find Texture with path '{}'", path); this->hint("The following paths were used to search for the Texture ({})", fmt::join(mounts, ", ")); } diff --git a/include/Core/Scene/Scene.hpp b/include/Core/Scene/Scene.hpp index e503072c9..41f44f787 100644 --- a/include/Core/Scene/Scene.hpp +++ b/include/Core/Scene/Scene.hpp @@ -20,7 +20,7 @@ namespace obe namespace obe::Scene { - using OnSceneLoadCallback = std::function; + using OnSceneLoadCallback = sol::protected_function; /** * \brief The Scene class is a container of all the game elements diff --git a/include/Core/Triggers/TriggerGroup.hpp b/include/Core/Triggers/TriggerGroup.hpp index 99394cbdd..5c3080e4b 100644 --- a/include/Core/Triggers/TriggerGroup.hpp +++ b/include/Core/Triggers/TriggerGroup.hpp @@ -31,6 +31,7 @@ namespace obe::Triggers explicit TriggerGroup(sol::state_view lua, const std::string& triggerGroupNamespace, const std::string& triggerGroupName); + ~TriggerGroup(); /** * \brief Sets if the TriggerGroup is joinable or not * \param joinable true if the TriggerGroup should be joinable, false diff --git a/src/Core/Scene/Scene.cpp b/src/Core/Scene/Scene.cpp index d31c7232b..992a31564 100644 --- a/src/Core/Scene/Scene.cpp +++ b/src/Core/Scene/Scene.cpp @@ -366,14 +366,15 @@ namespace obe::Scene this->loadFromFile(futureLoadBuffer); if (m_onLoadCallback) { - try - { - m_onLoadCallback(futureLoadBuffer); - } - catch (std::exception& e) + sol::protected_function_result result + = m_onLoadCallback(futureLoadBuffer); + if (!result.valid()) { + const auto error = result.get(); + const std::string errMsg = "\n \"" + + Utils::String::replace(error.what(), "\n", "\n ") + "\""; throw Exceptions::SceneOnLoadCallbackError( - currentScene, futureLoadBuffer, e.what(), EXC_INFO); + currentScene, futureLoadBuffer, errMsg, EXC_INFO); } } } diff --git a/src/Core/Triggers/TriggerGroup.cpp b/src/Core/Triggers/TriggerGroup.cpp index a337b2827..7d6e4da37 100644 --- a/src/Core/Triggers/TriggerGroup.cpp +++ b/src/Core/Triggers/TriggerGroup.cpp @@ -13,6 +13,12 @@ namespace obe::Triggers m_name = triggerGroupName; } + TriggerGroup::~TriggerGroup() + { + Debug::Log->trace( + " Deleting TriggerGroup '{}.{}'", m_fromNsp, m_name); + } + std::weak_ptr TriggerGroup::get(const std::string& triggerName) { if (m_triggerMap.find(triggerName) != m_triggerMap.end()) diff --git a/src/Core/Triggers/TriggerManager.cpp b/src/Core/Triggers/TriggerManager.cpp index f25fa39b8..efcce8adc 100644 --- a/src/Core/Triggers/TriggerManager.cpp +++ b/src/Core/Triggers/TriggerManager.cpp @@ -100,11 +100,12 @@ namespace obe::Triggers void TriggerManager::removeNamespace(const std::string& space) { Debug::Log->debug(" Removing Trigger Namespace {0}", space); - if (m_allTriggers.find(space) != m_allTriggers.end()) + if (const auto spaceItr = m_allTriggers.find(space); + spaceItr != m_allTriggers.end()) { Debug::Log->trace( " Found Trigger Namespace {0}, removing it...", space); - m_allTriggers.erase(m_allTriggers.find(space)); + m_allTriggers.erase(spaceItr); return; } std::vector namespaces(m_allTriggers.size());