// 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 clock; Nz::LuaClass directory; Nz::LuaClass file; Nz::LuaClass stream; // Math Nz::LuaClass eulerAngles; Nz::LuaClass matrix4d; Nz::LuaClass quaternion; Nz::LuaClass rect; Nz::LuaClass vector2d; Nz::LuaClass vector3d; // Network Nz::LuaClass abstractSocket; Nz::LuaClass ipAddress; // Utility Nz::LuaClass abstractImage; Nz::LuaClass font; Nz::LuaClass keyboard; Nz::LuaClass node; // SDK Nz::LuaClass application; Nz::LuaClass entity; Nz::LuaClass nodeComponent; Nz::LuaClass velocityComponent; Nz::LuaClass world; #ifndef NDK_SERVER // Audio Nz::LuaClass music; Nz::LuaClass sound; Nz::LuaClass soundBuffer; Nz::LuaClass soundEmitter; // Graphics Nz::LuaClass abstractViewer; Nz::LuaClass instancedRenderable; Nz::LuaClass material; Nz::LuaClass model; Nz::LuaClass sprite; Nz::LuaClass spriteLibrary; Nz::LuaClass textureLibrary; Nz::LuaClass textureManager; // Renderer Nz::LuaClass texture; // SDK Nz::LuaClass cameraComponent; Nz::LuaClass console; 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 = 2); 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