diff --git a/examples/Tut01/main.cpp b/examples/Tut01/main.cpp index 186cfc69d..10b91368f 100644 --- a/examples/Tut01/main.cpp +++ b/examples/Tut01/main.cpp @@ -1,5 +1,6 @@ // Sources pour https://github.com/NazaraEngine/NazaraEngine/wiki/(FR)-Tutoriel:-%5B01%5D-Hello-World +#include #include #include #include @@ -14,7 +15,7 @@ int main() { - Nz::Modules nazara; + Nz::Application app; entt::registry registry; Nz::SystemGraph systemGraph(registry); diff --git a/include/Nazara/Core/Application.hpp b/include/Nazara/Core/Application.hpp index c0113f749..8f701a74c 100644 --- a/include/Nazara/Core/Application.hpp +++ b/include/Nazara/Core/Application.hpp @@ -8,39 +8,25 @@ #define NAZARA_CORE_APPLICATION_HPP #include -#include -#include -#include -#include +#include +#include namespace Nz { - class NAZARA_CORE_API Application + template + class Application : public ApplicationBase { public: - inline Application(); - inline Application(int argc, char** argv); - Application(int argc, const char** argv); + using ApplicationBase::ApplicationBase; Application(const Application&) = delete; Application(Application&&) = delete; ~Application() = default; - template T& AddComponent(Args&&... args); - inline void AddComponent(std::unique_ptr&& component); - - int Run(); - - inline void Quit(); - - void Update(Time elapsedTime); - Application& operator=(const Application&) = delete; Application& operator=(Application&&) = delete; private: - std::atomic_bool m_running; - std::vector m_components; - HighPrecisionClock m_clock; + Modules m_modules; }; } diff --git a/include/Nazara/Core/Application.inl b/include/Nazara/Core/Application.inl index 851faa47d..7e797fad2 100644 --- a/include/Nazara/Core/Application.inl +++ b/include/Nazara/Core/Application.inl @@ -7,35 +7,6 @@ namespace Nz { - template - T& Nz::Application::AddComponent(Args&& ...args) - { - std::unique_ptr component = std::make_unique(std::forward(args)...); - T& componentRef = *component; - AddComponent(std::move(component)); - - return componentRef; - } - - inline Application::Application() : - Application(0, static_cast(nullptr)) - { - } - - inline Application::Application(int argc, char** argv) : - Application(argc, static_cast(argv)) - { - } - - void Application::AddComponent(std::unique_ptr&& component) - { - m_components.emplace_back(std::move(component)); - } - - inline void Application::Quit() - { - m_running = false; - } } #include diff --git a/include/Nazara/Core/ApplicationBase.hpp b/include/Nazara/Core/ApplicationBase.hpp new file mode 100644 index 000000000..be750316f --- /dev/null +++ b/include/Nazara/Core/ApplicationBase.hpp @@ -0,0 +1,49 @@ +// Copyright (C) 2022 Jérôme "Lynix" Leclercq (lynix680@gmail.com) +// This file is part of the "Nazara Engine - Core module" +// For conditions of distribution and use, see copyright notice in Config.hpp + +#pragma once + +#ifndef NAZARA_CORE_APPLICATIONBASE_HPP +#define NAZARA_CORE_APPLICATIONBASE_HPP + +#include +#include +#include +#include +#include + +namespace Nz +{ + class NAZARA_CORE_API ApplicationBase + { + public: + inline ApplicationBase(); + inline ApplicationBase(int argc, char** argv); + ApplicationBase(int argc, const Pointer* argv); + ApplicationBase(const ApplicationBase&) = delete; + ApplicationBase(ApplicationBase&&) = delete; + ~ApplicationBase() = default; + + template T& AddComponent(Args&&... args); + inline void AddComponent(std::unique_ptr&& component); + + int Run(); + + inline void Quit(); + + void Update(Time elapsedTime); + + ApplicationBase& operator=(const ApplicationBase&) = delete; + ApplicationBase& operator=(ApplicationBase&&) = delete; + + private: + std::atomic_bool m_running; + std::vector> m_components; + HighPrecisionClock m_clock; + }; +} + +#include + +#endif // NAZARA_CORE_APPLICATIONBASE_HPP diff --git a/include/Nazara/Core/ApplicationBase.inl b/include/Nazara/Core/ApplicationBase.inl new file mode 100644 index 000000000..3ae4485f1 --- /dev/null +++ b/include/Nazara/Core/ApplicationBase.inl @@ -0,0 +1,41 @@ +// Copyright (C) 2022 Jérôme "Lynix" Leclercq (lynix680@gmail.com) +// This file is part of the "Nazara Engine - Core module" +// For conditions of distribution and use, see copyright notice in Config.hpp + +#include +#include + +namespace Nz +{ + template + T& Nz::ApplicationBase::AddComponent(Args&& ...args) + { + std::unique_ptr component = std::make_unique(std::forward(args)...); + T& componentRef = *component; + AddComponent(std::move(component)); + + return componentRef; + } + + inline ApplicationBase::ApplicationBase() : + ApplicationBase(0, static_cast(nullptr)) + { + } + + inline ApplicationBase::ApplicationBase(int argc, char** argv) : + ApplicationBase(argc, const_cast*>(argv)) + { + } + + void ApplicationBase::AddComponent(std::unique_ptr&& component) + { + m_components.emplace_back(std::move(component)); + } + + inline void ApplicationBase::Quit() + { + m_running = false; + } +} + +#include diff --git a/src/Nazara/Core/ApplicationBase.cpp b/src/Nazara/Core/ApplicationBase.cpp new file mode 100644 index 000000000..34903b223 --- /dev/null +++ b/src/Nazara/Core/ApplicationBase.cpp @@ -0,0 +1,32 @@ +// Copyright (C) 2022 Jérôme "Lynix" Leclercq (lynix680@gmail.com) +// This file is part of the "Nazara Engine - Core module" +// For conditions of distribution and use, see copyright notice in Config.hpp + +#include +#include + +namespace Nz +{ + ApplicationBase::ApplicationBase(int argc, const Pointer* argv) : + m_running(true) + { + } + + int ApplicationBase::Run() + { + // Ignore time between creation and Run() call + m_clock.Restart(); + + while (m_running) + { + Time elapsedTime = m_clock.Restart(); + Update(elapsedTime); + } + + return 0; + } + + void ApplicationBase::Update(Time elapsedTime) + { + } +}