diff --git a/include/Nazara/Core.hpp b/include/Nazara/Core.hpp index a17ca0220..bf67424a4 100644 --- a/include/Nazara/Core.hpp +++ b/include/Nazara/Core.hpp @@ -32,6 +32,7 @@ #include #include #include +#include #include #include #include diff --git a/include/Nazara/Core/Application.hpp b/include/Nazara/Core/Application.hpp new file mode 100644 index 000000000..c0113f749 --- /dev/null +++ b/include/Nazara/Core/Application.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_APPLICATION_HPP +#define NAZARA_CORE_APPLICATION_HPP + +#include +#include +#include +#include +#include + +namespace Nz +{ + class NAZARA_CORE_API Application + { + public: + inline Application(); + inline Application(int argc, char** argv); + Application(int argc, const char** argv); + 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; + }; +} + +#include + +#endif // NAZARA_CORE_APPLICATION_HPP diff --git a/include/Nazara/Core/Application.inl b/include/Nazara/Core/Application.inl new file mode 100644 index 000000000..851faa47d --- /dev/null +++ b/include/Nazara/Core/Application.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::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/ApplicationComponent.hpp b/include/Nazara/Core/ApplicationComponent.hpp new file mode 100644 index 000000000..601aa6fbb --- /dev/null +++ b/include/Nazara/Core/ApplicationComponent.hpp @@ -0,0 +1,33 @@ +// 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_APPLICATIONCOMPONENT_HPP +#define NAZARA_CORE_APPLICATIONCOMPONENT_HPP + +#include +#include +#include + +namespace Nz +{ + class NAZARA_CORE_API ApplicationComponent + { + public: + ApplicationComponent() = default; + ApplicationComponent(const ApplicationComponent&) = delete; + ApplicationComponent(ApplicationComponent&&) = delete; + virtual ~ApplicationComponent(); + + virtual void Update(Time elapsedTime); + + ApplicationComponent& operator=(const ApplicationComponent&) = delete; + ApplicationComponent& operator=(ApplicationComponent&&) = delete; + }; +} + +#include + +#endif // NAZARA_CORE_APPLICATIONCOMPONENT_HPP diff --git a/include/Nazara/Core/ApplicationComponent.inl b/include/Nazara/Core/ApplicationComponent.inl new file mode 100644 index 000000000..116de11f4 --- /dev/null +++ b/include/Nazara/Core/ApplicationComponent.inl @@ -0,0 +1,12 @@ +// 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 +{ +} + +#include diff --git a/include/Nazara/Platform/AppWindowingComponent.hpp b/include/Nazara/Platform/AppWindowingComponent.hpp new file mode 100644 index 000000000..f2e22fda6 --- /dev/null +++ b/include/Nazara/Platform/AppWindowingComponent.hpp @@ -0,0 +1,33 @@ +// 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_PLATFORM_APPWINDOWINGCOMPONENT_HPP +#define NAZARA_PLATFORM_APPWINDOWINGCOMPONENT_HPP + +#include +#include +#include + +namespace Nz +{ + class NAZARA_PLATFORM_API AppWindowingComponent : public ApplicationComponent + { + public: + AppWindowingComponent() = default; + AppWindowingComponent(const AppWindowingComponent&) = delete; + AppWindowingComponent(AppWindowingComponent&&) = delete; + ~AppWindowingComponent() = default; + + void Update(Time elapsedTime) override; + + AppWindowingComponent& operator=(const AppWindowingComponent&) = delete; + AppWindowingComponent& operator=(AppWindowingComponent&&) = delete; + }; +} + +#include + +#endif // NAZARA_PLATFORM_APPWINDOWINGCOMPONENT_HPP diff --git a/include/Nazara/Platform/AppWindowingComponent.inl b/include/Nazara/Platform/AppWindowingComponent.inl new file mode 100644 index 000000000..83a77dc5b --- /dev/null +++ b/include/Nazara/Platform/AppWindowingComponent.inl @@ -0,0 +1,12 @@ +// 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 +{ +} + +#include diff --git a/src/Nazara/Core/Application.cpp b/src/Nazara/Core/Application.cpp new file mode 100644 index 000000000..c5cd89208 --- /dev/null +++ b/src/Nazara/Core/Application.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 +{ + Application::Application(int argc, const char** argv) : + m_running(true) + { + } + + int Application::Run() + { + // Ignore time between creation and Run() call + m_clock.Restart(); + + while (m_running) + { + Time elapsedTime = m_clock.Restart(); + Update(elapsedTime); + } + + return 0; + } + + void Application::Update(Time elapsedTime) + { + } +} diff --git a/src/Nazara/Core/ApplicationComponent.cpp b/src/Nazara/Core/ApplicationComponent.cpp new file mode 100644 index 000000000..6e3347696 --- /dev/null +++ b/src/Nazara/Core/ApplicationComponent.cpp @@ -0,0 +1,15 @@ +// 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 +{ + ApplicationComponent::~ApplicationComponent() = default; + + void ApplicationComponent::Update(Time elapsedTime) + { + } +} diff --git a/src/Nazara/Platform/AppWindowingComponent.cpp b/src/Nazara/Platform/AppWindowingComponent.cpp new file mode 100644 index 000000000..621808ca9 --- /dev/null +++ b/src/Nazara/Platform/AppWindowingComponent.cpp @@ -0,0 +1,14 @@ +// 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 +{ + void AppWindowingComponent::Update(Time elapsedTime) + { + // SDL_PollEvent + } +}