// 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 #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); template void AddUpdater(F&& functor); inline void ClearComponents(); template T* GetComponent(); template const T* GetComponent() const; int Run(); inline void Quit(); bool Update(Time elapsedTime); ApplicationBase& operator=(const ApplicationBase&) = delete; ApplicationBase& operator=(ApplicationBase&&) = delete; private: std::atomic_bool m_running; std::vector> m_components; std::vector> m_updaters; HighPrecisionClock m_clock; }; } #include #endif // NAZARA_CORE_APPLICATIONBASE_HPP