// Copyright (C) 2023 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 #include namespace Nz { inline ApplicationBase::ApplicationBase() : ApplicationBase(0, static_cast(nullptr)) { } inline ApplicationBase::ApplicationBase(int argc, char** argv) : ApplicationBase(argc, const_cast*>(argv)) { } template T& ApplicationBase::AddComponent(Args&&... args) { std::size_t componentIndex = ApplicationComponentRegistry::GetComponentId(); std::unique_ptr component = std::make_unique(*this, std::forward(args)...); T& componentRef = *component; if (componentIndex >= m_components.size()) m_components.resize(componentIndex + 1); else if (m_components[componentIndex] != nullptr) throw std::runtime_error("component was added multiple times"); m_components[componentIndex] = std::move(component); 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(); } template T* ApplicationBase::GetComponent() { std::size_t componentIndex = ApplicationComponentRegistry::GetComponentId(); if (componentIndex >= m_components.size()) return nullptr; return m_components[componentIndex].get(); } template const T* ApplicationBase::GetComponent() const { std::size_t componentIndex = ApplicationComponentRegistry::GetComponentId(); if (componentIndex >= m_components.size()) return nullptr; return m_components[componentIndex].get(); } inline void ApplicationBase::Quit() { m_running = false; } } #include