Sdk/Lua: Bind Sprite class

This commit is contained in:
Lynix 2016-10-21 02:00:51 +02:00
parent 4cd6bdd14a
commit 350c7dad59
4 changed files with 59 additions and 23 deletions

View File

@ -544,10 +544,14 @@ namespace Nz
inline unsigned int LuaImplQueryArg(const LuaInstance& instance, int index, InstancedRenderableRef* renderable, TypeTag<InstancedRenderableRef>) inline unsigned int LuaImplQueryArg(const LuaInstance& instance, int index, InstancedRenderableRef* renderable, TypeTag<InstancedRenderableRef>)
{ {
if (instance.IsOfType(index, "InstancedRenderable")) if (instance.IsOfType(index, "InstancedRenderable") ||
*renderable = *static_cast<InstancedRenderableRef*>(instance.CheckUserdata(index, "InstancedRenderable")); instance.IsOfType(index, "Model") ||
instance.IsOfType(index, "Sprite"))
{
*renderable = *static_cast<InstancedRenderableRef*>(instance.ToUserdata(index));
}
else else
*renderable = *static_cast<InstancedRenderableRef*>(instance.CheckUserdata(index, "Model")); instance.ArgError(index, "is not a InstancedRenderable instance");
return 1; return 1;
} }
@ -650,20 +654,6 @@ namespace Nz
#endif #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<EulerAnglesd>)
{
instance.PushInstance<EulerAnglesd>("EulerAngles", val);
return 1;
}
/*! /*!
* \brief Replies by value for Lua * \brief Replies by value for Lua
* \return 1 in case of success * \return 1 in case of success
@ -691,6 +681,20 @@ namespace Nz
* \param val Resulting euler angles * \param val Resulting euler angles
*/ */
inline int LuaImplReplyVal(const LuaInstance& instance, EulerAnglesd&& val, TypeTag<EulerAnglesd>)
{
instance.PushInstance<EulerAnglesd>("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<EulerAnglesf>) inline int LuaImplReplyVal(const LuaInstance& instance, EulerAnglesf&& val, TypeTag<EulerAnglesf>)
{ {
instance.PushInstance<EulerAnglesd>("EulerAngles", val); instance.PushInstance<EulerAnglesd>("EulerAngles", val);
@ -847,12 +851,12 @@ namespace Nz
* \return 1 in case of success * \return 1 in case of success
* *
* \param instance Lua instance to interact with * \param instance Lua instance to interact with
* \param val Resulting vector2D * \param handle Resulting texture
*/ */
inline int LuaImplReplyVal(const LuaInstance& instance, Vector2d&& val, TypeTag<Vector2d>) inline int LuaImplReplyVal(const LuaInstance& instance, TextureRef&& handle, TypeTag<TextureRef>)
{ {
instance.PushInstance<Vector2d>("Vector2", val); instance.PushInstance<TextureRef>("Texture", handle);
return 1; return 1;
} }
@ -861,12 +865,12 @@ namespace Nz
* \return 1 in case of success * \return 1 in case of success
* *
* \param instance Lua instance to interact with * \param instance Lua instance to interact with
* \param handle Resulting texture * \param val Resulting vector2D
*/ */
inline int LuaImplReplyVal(const LuaInstance& instance, TextureRef&& handle, TypeTag<TextureRef>) inline int LuaImplReplyVal(const LuaInstance& instance, Vector2d&& val, TypeTag<Vector2d>)
{ {
instance.PushInstance<TextureRef>("Texture", handle); instance.PushInstance<Vector2d>("Vector2", val);
return 1; return 1;
} }

View File

@ -77,6 +77,7 @@ namespace Ndk
// Graphics // Graphics
Nz::LuaClass<Nz::InstancedRenderableRef> instancedRenderable; Nz::LuaClass<Nz::InstancedRenderableRef> instancedRenderable;
Nz::LuaClass<Nz::ModelRef> modelClass; Nz::LuaClass<Nz::ModelRef> modelClass;
Nz::LuaClass<Nz::SpriteRef> spriteClass;
// Renderer // Renderer
Nz::LuaClass<Nz::TextureRef> texture; Nz::LuaClass<Nz::TextureRef> texture;

View File

@ -57,6 +57,7 @@ namespace Ndk
// Graphics // Graphics
instancedRenderable("InstancedRenderable"), instancedRenderable("InstancedRenderable"),
modelClass("Model"), modelClass("Model"),
spriteClass("Sprite"),
// Renderer // Renderer
texture("Texture"), texture("Texture"),

View File

@ -42,6 +42,35 @@ namespace Ndk
//modelClass.SetMethod("SetSequence", &Nz::Model::SetSequence); //modelClass.SetMethod("SetSequence", &Nz::Model::SetSequence);
modelClass.BindMethod("SetSkin", &Nz::Model::SetSkin); modelClass.BindMethod("SetSkin", &Nz::Model::SetSkin);
modelClass.BindMethod("SetSkinCount", &Nz::Model::SetSkinCount); modelClass.BindMethod("SetSkinCount", &Nz::Model::SetSkinCount);
/*********************************** Nz::Sprite ***********************************/
spriteClass.Inherit<Nz::InstancedRenderableRef>(instancedRenderable, [] (Nz::SpriteRef* sprite) -> Nz::InstancedRenderableRef*
{
return reinterpret_cast<Nz::InstancedRenderableRef*>(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); instancedRenderable.Register(instance);
modelClass.Register(instance); modelClass.Register(instance);
spriteClass.Register(instance);
} }
} }