diff --git a/include/Nazara/Core.hpp b/include/Nazara/Core.hpp index c8e0a53e2..86bd4fc88 100644 --- a/include/Nazara/Core.hpp +++ b/include/Nazara/Core.hpp @@ -32,11 +32,11 @@ #include #include #include -#include #include #include #include #include +#include #include #include #include diff --git a/include/Nazara/Core/ApplicationBase.hpp b/include/Nazara/Core/ApplicationBase.hpp index 9cc285016..429141a88 100644 --- a/include/Nazara/Core/ApplicationBase.hpp +++ b/include/Nazara/Core/ApplicationBase.hpp @@ -9,6 +9,7 @@ #include #include +#include #include #include #include @@ -26,6 +27,7 @@ namespace Nz ~ApplicationBase() = default; template T& AddComponent(Args&&... args); + template void AddUpdater(F&& functor); inline void ClearComponents(); @@ -36,7 +38,7 @@ namespace Nz inline void Quit(); - void Update(Time elapsedTime); + bool Update(Time elapsedTime); ApplicationBase& operator=(const ApplicationBase&) = delete; ApplicationBase& operator=(ApplicationBase&&) = delete; @@ -44,6 +46,7 @@ namespace Nz private: std::atomic_bool m_running; std::vector> m_components; + std::vector> m_updaters; HighPrecisionClock m_clock; }; } diff --git a/include/Nazara/Core/ApplicationBase.inl b/include/Nazara/Core/ApplicationBase.inl index 1615256ba..5c3c242fc 100644 --- a/include/Nazara/Core/ApplicationBase.inl +++ b/include/Nazara/Core/ApplicationBase.inl @@ -37,6 +37,12 @@ namespace Nz return componentRef; } + template + void ApplicationBase::AddUpdater(F&& functor) + { + m_updaters.emplace_back(std::make_unique>>(std::forward(functor))); + } + inline void ApplicationBase::ClearComponents() { m_components.clear(); diff --git a/include/Nazara/Core/ApplicationUpdater.hpp b/include/Nazara/Core/ApplicationUpdater.hpp new file mode 100644 index 000000000..9a95f5610 --- /dev/null +++ b/include/Nazara/Core/ApplicationUpdater.hpp @@ -0,0 +1,45 @@ +// Copyright (C) 2022 Jérôme "Lynix" Leclercq (lynix680@gmail.com) +// This file is part of the "Nazara Engine - Platform module" +// For conditions of distribution and use, see copyright notice in Config.hpp + +#pragma once + +#ifndef NAZARA_CORE_APPLICATIONUPDATER_HPP +#define NAZARA_CORE_APPLICATIONUPDATER_HPP + +#include +#include +#include + +namespace Nz +{ + class NAZARA_CORE_API ApplicationUpdater + { + public: + ApplicationUpdater() = default; + ApplicationUpdater(const ApplicationUpdater&) = delete; + ApplicationUpdater(ApplicationUpdater&&) = delete; + virtual ~ApplicationUpdater(); + + virtual void Update(Time elapsedTime) = 0; + + ApplicationUpdater& operator=(const ApplicationUpdater&) = delete; + ApplicationUpdater& operator=(ApplicationUpdater&&) = delete; + }; + + template + class ApplicationUpdaterFunctor : public ApplicationUpdater + { + public: + ApplicationUpdaterFunctor(F functor); + + void Update(Time elapsedTime) override; + + private: + F m_functor; + }; +} + +#include + +#endif // NAZARA_CORE_APPLICATIONUPDATER_HPP diff --git a/include/Nazara/Core/ApplicationUpdater.inl b/include/Nazara/Core/ApplicationUpdater.inl new file mode 100644 index 000000000..5411b7576 --- /dev/null +++ b/include/Nazara/Core/ApplicationUpdater.inl @@ -0,0 +1,23 @@ +// Copyright (C) 2022 Jérôme "Lynix" Leclercq (lynix680@gmail.com) +// This file is part of the "Nazara Engine - Platform module" +// For conditions of distribution and use, see copyright notice in Config.hpp + +#include +#include + +namespace Nz +{ + template + ApplicationUpdaterFunctor::ApplicationUpdaterFunctor(F functor) : + m_functor(std::move(functor)) + { + } + + template + void ApplicationUpdaterFunctor::Update(Time elapsedTime) + { + m_functor(elapsedTime); + } +} + +#include diff --git a/src/Nazara/Core/ApplicationBase.cpp b/src/Nazara/Core/ApplicationBase.cpp index 69878e092..7db6944e0 100644 --- a/src/Nazara/Core/ApplicationBase.cpp +++ b/src/Nazara/Core/ApplicationBase.cpp @@ -26,12 +26,17 @@ namespace Nz return 0; } - void ApplicationBase::Update(Time elapsedTime) + bool ApplicationBase::Update(Time elapsedTime) { for (auto& componentPtr : m_components) { if (componentPtr) componentPtr->Update(elapsedTime); } + + for (auto& updater : m_updaters) + updater->Update(elapsedTime); + + return m_running; } } diff --git a/src/Nazara/Core/ApplicationUpdater.cpp b/src/Nazara/Core/ApplicationUpdater.cpp new file mode 100644 index 000000000..4c3cb5f23 --- /dev/null +++ b/src/Nazara/Core/ApplicationUpdater.cpp @@ -0,0 +1,11 @@ +// Copyright (C) 2022 Jérôme "Lynix" Leclercq (lynix680@gmail.com) +// This file is part of the "Nazara Engine - Platform module" +// For conditions of distribution and use, see copyright notice in Config.hpp + +#include +#include + +namespace Nz +{ + ApplicationUpdater::~ApplicationUpdater() = default; +} diff --git a/xmake/actions/generateheaders.lua b/xmake/actions/generateheaders.lua index 52b817335..45d1c129c 100644 --- a/xmake/actions/generateheaders.lua +++ b/xmake/actions/generateheaders.lua @@ -73,7 +73,7 @@ on_run(function () end paths["Audio"].Excludes["OpenALFunctions.hpp"] = true - paths["Core"].Excludes["ECS.hpp"] = true + paths["Core"].Excludes["AppEntitySystemComponent.hpp"] = true paths["OpenGLRenderer"].Excludes["Wrapper.hpp"] = true paths["VulkanRenderer"].Excludes["Wrapper.hpp"] = true