// 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 #pragma once #ifndef NDK_LUABINDING_HPP #define NDK_LUABINDING_HPP #include #include #include #include #include #include #include #include #include #include #ifndef NDK_SERVER #include #include #include #include #endif namespace Ndk { class NDK_API LuaBinding { public: LuaBinding(); ~LuaBinding() = default; template void BindComponent(const Nz::String& name); void RegisterClasses(Nz::LuaInstance& instance); // Core Nz::LuaClass clockClass; Nz::LuaClass directoryClass; Nz::LuaClass fileClass; Nz::LuaClass streamClass; // Math Nz::LuaClass eulerAnglesClass; Nz::LuaClass quaternionClass; Nz::LuaClass rectClass; Nz::LuaClass vector2dClass; Nz::LuaClass vector3dClass; // Network Nz::LuaClass abstractSocketClass; Nz::LuaClass ipAddressClass; // Utility Nz::LuaClass abstractImage; Nz::LuaClass fontClass; Nz::LuaClass nodeClass; // SDK Nz::LuaClass application; Nz::LuaClass entityClass; Nz::LuaClass nodeComponent; Nz::LuaClass velocityComponent; Nz::LuaClass worldClass; #ifndef NDK_SERVER // Audio Nz::LuaClass musicClass; Nz::LuaClass soundClass; Nz::LuaClass soundBuffer; Nz::LuaClass soundEmitter; // Graphics Nz::LuaClass instancedRenderable; Nz::LuaClass modelClass; // SDK Nz::LuaClass consoleClass; Nz::LuaClass graphicsComponent; #endif private: void BindCore(); void BindMath(); void BindNetwork(); void BindSDK(); void BindUtility(); void RegisterCore(Nz::LuaInstance& instance); void RegisterMath(Nz::LuaInstance& instance); void RegisterNetwork(Nz::LuaInstance& instance); void RegisterSDK(Nz::LuaInstance& instance); void RegisterUtility(Nz::LuaInstance& instance); #ifndef NDK_SERVER void BindAudio(); void BindGraphics(); void BindRenderer(); void RegisterAudio(Nz::LuaInstance& instance); void RegisterGraphics(Nz::LuaInstance& instance); void RegisterRenderer(Nz::LuaInstance& instance); #endif using AddComponentFunc = int(*)(Nz::LuaInstance&, EntityHandle&); using GetComponentFunc = int(*)(Nz::LuaInstance&, BaseComponent&); struct ComponentBinding { AddComponentFunc adder; ComponentIndex index; GetComponentFunc getter; Nz::String name; }; ComponentBinding* QueryComponentIndex(Nz::LuaInstance& lua, int argIndex = 1); std::vector m_componentBinding; std::unordered_map m_componentBindingByName; }; template int AddComponentOfType(Nz::LuaInstance& lua, EntityHandle& handle); template int PushComponentOfType(Nz::LuaInstance& lua, BaseComponent& component); } #include #endif // NDK_LUABINDING_HPP