// Copyright (C) 2015 Jérôme Leclercq // This file is part of the "Nazara Development Kit" // For conditions of distribution and use, see copyright notice in Prerequesites.hpp #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 #endif namespace Ndk { 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::Physics::Initialize(); Nz::Utility::Initialize(); #ifndef NDK_SERVER // Client modules Nz::Audio::Initialize(); Nz::Graphics::Initialize(); #endif // SDK Initialization // Components BaseComponent::Initialize(); // Shared components InitializeComponent("NdkColli"); InitializeComponent("NdkNode"); InitializeComponent("NdkPhys"); InitializeComponent("NdkVeloc"); #ifndef NDK_SERVER // Client components InitializeComponent("NdkCam"); InitializeComponent("NdkLight"); InitializeComponent("NdkList"); InitializeComponent("NdkGfx"); #endif // Systems BaseSystem::Initialize(); // Shared systems InitializeSystem(); InitializeSystem(); #ifndef NDK_SERVER // Client systems InitializeSystem(); InitializeSystem(); #endif NazaraNotice("Initialized: SDK"); return true; } catch (const std::exception& e) { NazaraError("Failed to initialize NDK: " + Nz::String(e.what())); return false; } } 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; // Uninitialize the engine #ifndef NDK_SERVER // Client modules Nz::Audio::Uninitialize(); Nz::Graphics::Uninitialize(); #endif // Shared modules Nz::Lua::Uninitialize(); Nz::Noise::Uninitialize(); Nz::Physics::Uninitialize(); Nz::Utility::Uninitialize(); NazaraNotice("Uninitialized: SDK"); } unsigned int Sdk::s_referenceCounter = 0; }