From 350c7dad5925730ded0fcbb0d58b586b3146c61f Mon Sep 17 00:00:00 2001 From: Lynix Date: Fri, 21 Oct 2016 02:00:51 +0200 Subject: [PATCH] Sdk/Lua: Bind Sprite class --- SDK/include/NDK/LuaAPI.inl | 50 ++++++++++++++++------------- SDK/include/NDK/LuaBinding.hpp | 1 + SDK/src/NDK/LuaBinding.cpp | 1 + SDK/src/NDK/LuaBinding_Graphics.cpp | 30 +++++++++++++++++ 4 files changed, 59 insertions(+), 23 deletions(-) diff --git a/SDK/include/NDK/LuaAPI.inl b/SDK/include/NDK/LuaAPI.inl index 154c20a59..3697532f4 100644 --- a/SDK/include/NDK/LuaAPI.inl +++ b/SDK/include/NDK/LuaAPI.inl @@ -544,10 +544,14 @@ namespace Nz inline unsigned int LuaImplQueryArg(const LuaInstance& instance, int index, InstancedRenderableRef* renderable, TypeTag) { - if (instance.IsOfType(index, "InstancedRenderable")) - *renderable = *static_cast(instance.CheckUserdata(index, "InstancedRenderable")); + if (instance.IsOfType(index, "InstancedRenderable") || + instance.IsOfType(index, "Model") || + instance.IsOfType(index, "Sprite")) + { + *renderable = *static_cast(instance.ToUserdata(index)); + } else - *renderable = *static_cast(instance.CheckUserdata(index, "Model")); + instance.ArgError(index, "is not a InstancedRenderable instance"); return 1; } @@ -650,20 +654,6 @@ namespace Nz #endif - /*! - * \brief Replies by value for Lua - * \return 1 in case of success - * - * \param instance Lua instance to interact with - * \param val Resulting euler angles - */ - - inline int LuaImplReplyVal(const LuaInstance& instance, EulerAnglesd&& val, TypeTag) - { - instance.PushInstance("EulerAngles", val); - return 1; - } - /*! * \brief Replies by value for Lua * \return 1 in case of success @@ -691,6 +681,20 @@ namespace Nz * \param val Resulting euler angles */ + inline int LuaImplReplyVal(const LuaInstance& instance, EulerAnglesd&& val, TypeTag) + { + instance.PushInstance("EulerAngles", val); + return 1; + } + + /*! + * \brief Replies by value for Lua + * \return 1 in case of success + * + * \param instance Lua instance to interact with + * \param val Resulting euler angles + */ + inline int LuaImplReplyVal(const LuaInstance& instance, EulerAnglesf&& val, TypeTag) { instance.PushInstance("EulerAngles", val); @@ -847,12 +851,12 @@ namespace Nz * \return 1 in case of success * * \param instance Lua instance to interact with - * \param val Resulting vector2D + * \param handle Resulting texture */ - inline int LuaImplReplyVal(const LuaInstance& instance, Vector2d&& val, TypeTag) + inline int LuaImplReplyVal(const LuaInstance& instance, TextureRef&& handle, TypeTag) { - instance.PushInstance("Vector2", val); + instance.PushInstance("Texture", handle); return 1; } @@ -861,12 +865,12 @@ namespace Nz * \return 1 in case of success * * \param instance Lua instance to interact with - * \param handle Resulting texture + * \param val Resulting vector2D */ - inline int LuaImplReplyVal(const LuaInstance& instance, TextureRef&& handle, TypeTag) + inline int LuaImplReplyVal(const LuaInstance& instance, Vector2d&& val, TypeTag) { - instance.PushInstance("Texture", handle); + instance.PushInstance("Vector2", val); return 1; } diff --git a/SDK/include/NDK/LuaBinding.hpp b/SDK/include/NDK/LuaBinding.hpp index 61df55782..a82bae0c4 100644 --- a/SDK/include/NDK/LuaBinding.hpp +++ b/SDK/include/NDK/LuaBinding.hpp @@ -77,6 +77,7 @@ namespace Ndk // Graphics Nz::LuaClass instancedRenderable; Nz::LuaClass modelClass; + Nz::LuaClass spriteClass; // Renderer Nz::LuaClass texture; diff --git a/SDK/src/NDK/LuaBinding.cpp b/SDK/src/NDK/LuaBinding.cpp index 10d6e2e42..784306fc4 100644 --- a/SDK/src/NDK/LuaBinding.cpp +++ b/SDK/src/NDK/LuaBinding.cpp @@ -57,6 +57,7 @@ namespace Ndk // Graphics instancedRenderable("InstancedRenderable"), modelClass("Model"), + spriteClass("Sprite"), // Renderer texture("Texture"), diff --git a/SDK/src/NDK/LuaBinding_Graphics.cpp b/SDK/src/NDK/LuaBinding_Graphics.cpp index af319417e..fdae54c56 100644 --- a/SDK/src/NDK/LuaBinding_Graphics.cpp +++ b/SDK/src/NDK/LuaBinding_Graphics.cpp @@ -42,6 +42,35 @@ namespace Ndk //modelClass.SetMethod("SetSequence", &Nz::Model::SetSequence); modelClass.BindMethod("SetSkin", &Nz::Model::SetSkin); modelClass.BindMethod("SetSkinCount", &Nz::Model::SetSkinCount); + + /*********************************** Nz::Sprite ***********************************/ + spriteClass.Inherit(instancedRenderable, [] (Nz::SpriteRef* sprite) -> Nz::InstancedRenderableRef* + { + return reinterpret_cast(sprite); //TODO: Make a ObjectRefCast + }); + + spriteClass.SetConstructor([] (Nz::LuaInstance& /*lua*/, Nz::SpriteRef* sprite, std::size_t /*argumentCount*/) + { + Nz::PlacementNew(sprite, Nz::Sprite::New()); + return true; + }); + + spriteClass.BindMethod("GetColor", &Nz::Sprite::GetColor); + spriteClass.BindMethod("GetCornerColor", &Nz::Sprite::GetCornerColor); + //spriteClass.BindMethod("GetMaterial", &Nz::Sprite::GetMaterial); + spriteClass.BindMethod("GetOrigin", &Nz::Sprite::GetOrigin); + spriteClass.BindMethod("GetSize", &Nz::Sprite::GetSize); + spriteClass.BindMethod("GetTextureCoords", &Nz::Sprite::GetTextureCoords); + + spriteClass.BindMethod("SetColor", &Nz::Sprite::SetColor); + spriteClass.BindMethod("SetCornerColor", &Nz::Sprite::SetCornerColor); + spriteClass.BindMethod("SetDefaultMaterial", &Nz::Sprite::SetDefaultMaterial); + //spriteClass.BindMethod("SetMaterial", &Nz::Sprite::SetMaterial, true); + spriteClass.BindMethod("SetOrigin", &Nz::Sprite::SetOrigin); + spriteClass.BindMethod("SetSize", (void(Nz::Sprite::*)(const Nz::Vector2f&)) &Nz::Sprite::SetSize); + spriteClass.BindMethod("SetTexture", &Nz::Sprite::SetTexture, true); + spriteClass.BindMethod("SetTextureCoords", &Nz::Sprite::SetTextureCoords); + spriteClass.BindMethod("SetTextureRect", &Nz::Sprite::SetTextureRect); } /*! @@ -54,5 +83,6 @@ namespace Ndk { instancedRenderable.Register(instance); modelClass.Register(instance); + spriteClass.Register(instance); } } \ No newline at end of file