aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/CMakeLists.txt2
-rw-r--r--src/crepe/api/BehaviorScript.h2
-rw-r--r--src/crepe/api/BehaviorScript.hpp1
-rw-r--r--src/crepe/api/Engine.cpp13
-rw-r--r--src/crepe/facade/CMakeLists.txt2
-rw-r--r--src/crepe/facade/SignalCatch.cpp20
-rw-r--r--src/crepe/facade/SignalCatch.h23
-rw-r--r--src/crepe/manager/SystemManager.cpp30
-rw-r--r--src/crepe/manager/SystemManager.h13
-rw-r--r--src/crepe/manager/SystemManager.hpp5
-rw-r--r--src/crepe/system/ScriptSystem.cpp25
11 files changed, 19 insertions, 117 deletions
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 90312b3..696856c 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -15,7 +15,6 @@ find_package(GTest REQUIRED)
find_package(whereami REQUIRED)
find_library(BERKELEY_DB db)
find_library(FONTCONFIG_LIB fontconfig)
-find_package(segvcatch REQUIRED)
add_library(crepe SHARED)
add_executable(test_main EXCLUDE_FROM_ALL)
@@ -32,7 +31,6 @@ target_link_libraries(crepe
PUBLIC ${BERKELEY_DB}
PUBLIC whereami
PUBLIC ${FONTCONFIG_LIB}
- PUBLIC segvcatch
)
add_subdirectory(crepe)
diff --git a/src/crepe/api/BehaviorScript.h b/src/crepe/api/BehaviorScript.h
index 52cf259..3909b96 100644
--- a/src/crepe/api/BehaviorScript.h
+++ b/src/crepe/api/BehaviorScript.h
@@ -48,8 +48,6 @@ public:
BehaviorScript & set_script(Args &&... args);
protected:
- //! Script type name
- std::string name = "unknown script";
//! Script instance
std::unique_ptr<Script> script = nullptr;
//! ScriptSystem needs direct access to the script instance
diff --git a/src/crepe/api/BehaviorScript.hpp b/src/crepe/api/BehaviorScript.hpp
index 218f27c..353d5e2 100644
--- a/src/crepe/api/BehaviorScript.hpp
+++ b/src/crepe/api/BehaviorScript.hpp
@@ -11,7 +11,6 @@ template <class T, typename... Args>
BehaviorScript & BehaviorScript::set_script(Args &&... args) {
static_assert(std::is_base_of<Script, T>::value);
this->script = std::unique_ptr<Script>(new T(std::forward<Args>(args)...));
- this->name = typeid(T).name();
this->script->game_object_id = this->game_object_id;
this->script->active = this->active;
diff --git a/src/crepe/api/Engine.cpp b/src/crepe/api/Engine.cpp
index 35743e3..cd9786b 100644
--- a/src/crepe/api/Engine.cpp
+++ b/src/crepe/api/Engine.cpp
@@ -1,6 +1,3 @@
-#include <segvcatch.h>
-
-#include "../facade/SignalCatch.h"
#include "../util/Log.h"
#include "Engine.h"
@@ -9,8 +6,6 @@ using namespace crepe;
using namespace std;
int Engine::main() noexcept {
- SignalCatch signal_catch;
-
try {
this->setup();
} catch (const exception & e) {
@@ -50,23 +45,23 @@ void Engine::loop() {
while (timer.get_lag() >= timer.get_fixed_delta_time()) {
try {
systems.fixed_update();
- timer.advance_fixed_elapsed_time();
} catch (const exception & e) {
Log::logf(
- Log::Level::WARNING, "Uncaught exception in fixed update function: {}",
+ Log::Level::WARNING, "Uncaught exception in fixed update function: {}\n",
e.what()
);
}
+ timer.advance_fixed_elapsed_time();
}
try {
systems.frame_update();
- timer.enforce_frame_rate();
} catch (const exception & e) {
Log::logf(
- Log::Level::WARNING, "Uncaught exception in frame update function: {}",
+ Log::Level::WARNING, "Uncaught exception in frame update function: {}\n",
e.what()
);
}
+ timer.enforce_frame_rate();
}
}
diff --git a/src/crepe/facade/CMakeLists.txt b/src/crepe/facade/CMakeLists.txt
index 4873e8d..243ae46 100644
--- a/src/crepe/facade/CMakeLists.txt
+++ b/src/crepe/facade/CMakeLists.txt
@@ -6,7 +6,6 @@ target_sources(crepe PUBLIC
DB.cpp
FontFacade.cpp
Font.cpp
- SignalCatch.cpp
)
target_sources(crepe PUBLIC FILE_SET HEADERS FILES
@@ -17,6 +16,5 @@ target_sources(crepe PUBLIC FILE_SET HEADERS FILES
DB.h
FontFacade.h
Font.h
- SignalCatch.h
)
diff --git a/src/crepe/facade/SignalCatch.cpp b/src/crepe/facade/SignalCatch.cpp
deleted file mode 100644
index 4988047..0000000
--- a/src/crepe/facade/SignalCatch.cpp
+++ /dev/null
@@ -1,20 +0,0 @@
-#include <stdexcept>
-
-#include "SignalCatch.h"
-
-using namespace crepe;
-using namespace std;
-
-SignalCatch::SignalCatch() {
- segvcatch::init_segv(&SignalCatch::segv);
- segvcatch::init_fpe(&SignalCatch::fpe);
-}
-
-SignalCatch::~SignalCatch() {
- segvcatch::init_segv();
- segvcatch::init_fpe();
-}
-
-void SignalCatch::segv() { throw runtime_error("segmentation fault"); }
-
-void SignalCatch::fpe() { throw domain_error("floating point exception"); }
diff --git a/src/crepe/facade/SignalCatch.h b/src/crepe/facade/SignalCatch.h
deleted file mode 100644
index cf86b56..0000000
--- a/src/crepe/facade/SignalCatch.h
+++ /dev/null
@@ -1,23 +0,0 @@
-#pragma once
-
-#include <segvcatch.h>
-
-namespace crepe {
-
-class SignalCatch {
-public:
- SignalCatch();
- ~SignalCatch();
-
-private:
- static void segv();
- static void fpe();
-
-public:
- SignalCatch(const SignalCatch &) = delete;
- SignalCatch(SignalCatch &&) = delete;
- SignalCatch & operator=(const SignalCatch &) = delete;
- SignalCatch & operator=(SignalCatch &&) = delete;
-};
-
-} // namespace crepe
diff --git a/src/crepe/manager/SystemManager.cpp b/src/crepe/manager/SystemManager.cpp
index fea59aa..eabc022 100644
--- a/src/crepe/manager/SystemManager.cpp
+++ b/src/crepe/manager/SystemManager.cpp
@@ -31,31 +31,17 @@ SystemManager::SystemManager(Mediator & mediator) : Manager(mediator) {
this->mediator.system_manager = *this;
}
-void SystemManager::fixed_update() noexcept {
- for (SystemEntry & entry : this->system_order) {
- if (!entry.system.active) continue;
- try {
- entry.system.fixed_update();
- } catch (const exception & e) {
- Log::logf(
- Log::Level::WARNING, "Uncaught exception in {} fixed update: {}", entry.name,
- e.what()
- );
- }
+void SystemManager::fixed_update() {
+ for (System & system : this->system_order) {
+ if (!system.active) continue;
+ system.fixed_update();
}
}
-void SystemManager::frame_update() noexcept {
- for (SystemEntry & entry : this->system_order) {
- if (!entry.system.active) continue;
- try {
- entry.system.frame_update();
- } catch (const exception & e) {
- Log::logf(
- Log::Level::WARNING, "Uncaught exception in {} frame update: {}", entry.name,
- e.what()
- );
- }
+void SystemManager::frame_update() {
+ for (System & system : this->system_order) {
+ if (!system.active) continue;
+ system.frame_update();
}
}
diff --git a/src/crepe/manager/SystemManager.h b/src/crepe/manager/SystemManager.h
index 7b862a3..614d90c 100644
--- a/src/crepe/manager/SystemManager.h
+++ b/src/crepe/manager/SystemManager.h
@@ -26,14 +26,14 @@ public:
*
* Updates the game state based on the elapsed time since the last frame.
*/
- void frame_update() noexcept;
+ void frame_update();
/**
* \brief Fixed update executed at a fixed rate.
*
* This function updates physics and game logic based on LoopTimer's fixed_delta_time.
*/
- void fixed_update() noexcept;
+ void fixed_update();
private:
/**
@@ -43,20 +43,13 @@ private:
* constructor of \c SystemManager using SystemManager::load_system.
*/
std::unordered_map<std::type_index, std::unique_ptr<System>> systems;
- //! Internal ordered system list entry
- struct SystemEntry {
- //! System instance reference
- System & system;
- //! System name
- std::string name;
- };
/**
* \brief Collection of System instances
*
* This map holds System instances indexed by the system's class typeid. It is filled in the
* constructor of \c SystemManager using SystemManager::load_system.
*/
- std::vector<SystemEntry> system_order;
+ std::vector<std::reference_wrapper<System>> system_order;
/**
* \brief Initialize a system
* \tparam T System type (must be derivative of \c System)
diff --git a/src/crepe/manager/SystemManager.hpp b/src/crepe/manager/SystemManager.hpp
index a19a253..addd274 100644
--- a/src/crepe/manager/SystemManager.hpp
+++ b/src/crepe/manager/SystemManager.hpp
@@ -38,10 +38,7 @@ void SystemManager::load_system() {
throw runtime_error(format("SystemManager: {} is already initialized", type.name()));
System * system = new T(this->mediator);
this->systems[type] = unique_ptr<System>(system);
- this->system_order.push_back(SystemEntry {
- .system = *this->systems[type],
- .name = type.name(),
- });
+ this->system_order.push_back(*this->systems[type]);
}
} // namespace crepe
diff --git a/src/crepe/system/ScriptSystem.cpp b/src/crepe/system/ScriptSystem.cpp
index f1e31f9..ed0c7cc 100644
--- a/src/crepe/system/ScriptSystem.cpp
+++ b/src/crepe/system/ScriptSystem.cpp
@@ -32,29 +32,10 @@ void ScriptSystem::update(
if (script == nullptr) continue;
if (!script->initialized) {
- try {
- script->init();
- script->initialized = true;
- } catch (const exception & e) {
- Log::logf(
- Log::Level::WARNING,
- "Disabled script \"{}\" due to exception in init function: {}",
- behavior_script.name, e.what()
- );
- behavior_script.active = false;
- }
+ script->init();
+ script->initialized = true;
}
- try {
- (*script.*update_function)(delta_time);
- } catch (const exception & e) {
- // TODO: discern between fixed/frame update
- Log::logf(
- Log::Level::WARNING,
- "Disabled script \"{}\" due to exception in update function: {}",
- behavior_script.name, e.what()
- );
- behavior_script.active = false;
- }
+ (*script.*update_function)(delta_time);
}
}