// Copyright (C) 2017 Jérôme Leclercq // This file is part of the "Nazara Development Kit" // For conditions of distribution and use, see copyright notice in Prerequisites.hpp #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #ifndef NDK_SERVER #include #include #include #include #include #include #include #include #include #include #include #include #endif namespace Ndk { /*! * \ingroup NDK * \class Ndk::Sdk * \brief NDK class that represents the software development kit, a set of tools made to ease the conception of application */ /*! * \brief Initializes the Sdk module * \return true if initialization is successful * * \remark Produces a NazaraNotice */ bool Sdk::Initialize() { if (s_referenceCounter++ > 0) return true; // Already initialized try { Nz::ErrorFlags errFlags(Nz::ErrorFlag_ThrowException, true); // Initialize the engine first // Shared modules Nz::Lua::Initialize(); Nz::Noise::Initialize(); Nz::Physics2D::Initialize(); Nz::Physics3D::Initialize(); Nz::Utility::Initialize(); #ifndef NDK_SERVER // Client modules Nz::Audio::Initialize(); Nz::Graphics::Initialize(); #endif // SDK Initialization // Components BaseComponent::Initialize(); // Shared components InitializeComponent("NdkColl2"); InitializeComponent("NdkColl3"); InitializeComponent("NdkNode"); InitializeComponent("NdkPhys2"); InitializeComponent("NdkPhys3"); InitializeComponent("NdkVeloc"); InitializeComponent("NdkCons2"); #ifndef NDK_SERVER // Client components InitializeComponent("NdkCam"); InitializeComponent("NdkDebug"); InitializeComponent("NdkLight"); InitializeComponent("NdkList"); InitializeComponent("NdkGfx"); InitializeComponent("NdkPaEmi"); InitializeComponent("NdkPaGrp"); #endif // Systems BaseSystem::Initialize(); // Shared systems InitializeSystem(); InitializeSystem(); InitializeSystem(); #ifndef NDK_SERVER // Client systems InitializeSystem(); InitializeSystem(); InitializeSystem(); InitializeSystem(); // Widgets if (!CheckboxWidget::Initialize()) { NazaraError("Failed to initialize Checkbox Widget"); return false; } #endif NazaraNotice("Initialized: SDK"); return true; } catch (const std::exception& e) { NazaraError("Failed to initialize NDK: " + Nz::String(e.what())); return false; } } /*! * \brief Uninitializes the Sdk module * * \remark Produces a NazaraNotice */ void Sdk::Uninitialize() { if (s_referenceCounter != 1) { // Either the module is not initialized, either it was initialized multiple times if (s_referenceCounter > 1) s_referenceCounter--; return; } // Uninitialize the SDK s_referenceCounter = 0; // Components BaseComponent::Uninitialize(); // Systems BaseSystem::Uninitialize(); // Uninitialize the engine #ifndef NDK_SERVER // Client modules Nz::Audio::Uninitialize(); Nz::Graphics::Uninitialize(); #endif // Shared modules Nz::Lua::Uninitialize(); Nz::Noise::Uninitialize(); Nz::Physics2D::Uninitialize(); Nz::Physics3D::Uninitialize(); Nz::Utility::Uninitialize(); #ifndef NDK_SERVER // Widgets CheckboxWidget::Uninitialize(); #endif NazaraNotice("Uninitialized: SDK"); } unsigned int Sdk::s_referenceCounter = 0; }