aboutsummaryrefslogtreecommitdiff
path: root/src/lua/modules/graphics/je_lua_sprite.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/lua/modules/graphics/je_lua_sprite.cpp')
-rw-r--r--src/lua/modules/graphics/je_lua_sprite.cpp60
1 files changed, 16 insertions, 44 deletions
diff --git a/src/lua/modules/graphics/je_lua_sprite.cpp b/src/lua/modules/graphics/je_lua_sprite.cpp
index f02d1cc..b81b66b 100644
--- a/src/lua/modules/graphics/je_lua_sprite.cpp
+++ b/src/lua/modules/graphics/je_lua_sprite.cpp
@@ -2,7 +2,6 @@
#include "lua/modules/types.h"
#include "lua/common/je_lua_common.h"
#include "libjin/jin.h"
-#include "je_lua_sprite.h"
using namespace JinEngine::Graphics;
using namespace JinEngine::Graphics::Shaders;
@@ -11,52 +10,20 @@ namespace JinEngine
{
namespace Lua
{
- //////////////////////////////////////////////////////////////////////////////////////////////////////////
- // Sprite class.
- //////////////////////////////////////////////////////////////////////////////////////////////////////////
- Lua::Sprite::~Sprite()
+ // Sprite dependency slots.
+ enum SpriteDependency
{
- if (mGraphicShared != nullptr)
- {
- mGraphicShared->release();
- mGraphicShared = nullptr;
- }
- if (mShaderShared != nullptr)
- {
- mShaderShared->release();
- mShaderShared = nullptr;
- }
- }
-
- void Lua::Sprite::setShader(Shared<Shader>* shader)
- {
- if (mShaderShared != nullptr)
- mShaderShared->release();
- mShaderShared = shader;
- mShaderShared->retain();
- Parent::setShader(mShaderShared->getObject());
- }
-
- void Lua::Sprite::setGraphic(Shared<Graphic>* graphic)
- {
- if (mGraphicShared != nullptr)
- mGraphicShared = graphic;
- mGraphicShared = graphic;
- mGraphicShared->retain();
- Parent::setGraphic(mGraphicShared->getObject());
- }
+ DEP_GRAPHIC = 1,
+ DEP_SHADER = 2,
+ };
- //////////////////////////////////////////////////////////////////////////////////////////////////////////
- // Register Sprite class.
- //////////////////////////////////////////////////////////////////////////////////////////////////////////
-
- typedef Shared<Lua::Sprite>& SharedSprite;
+ typedef Shared<Sprite>& SharedSprite;
LUA_IMPLEMENT inline SharedSprite checkSprite(lua_State* L)
{
Proxy* proxy = (Proxy*)luax_checktype(L, 1, JIN_GRAPHICS_SPRITE);
- return proxy->getShared<Lua::Sprite>();
+ return proxy->getShared<Sprite>();
}
LUA_IMPLEMENT int l_gc(lua_State* L)
@@ -82,7 +49,7 @@ namespace JinEngine
case 2:
{
int origin = luax_checkinteger(L, 2);
- sprite->setOrigin(static_cast<Lua::Sprite::Origin>(origin));
+ sprite->setOrigin(static_cast<Sprite::Origin>(origin));
}
break;
case 3:
@@ -129,7 +96,9 @@ namespace JinEngine
{
SharedSprite sprite = checkSprite(L);
Proxy* proxy = (Proxy*)luax_checktype(L, 2, JIN_GRAPHICS_SHADER);
- sprite->setShader(&proxy->getShared<Shader>());
+ Shader* shader = proxy->getObject<Shader>();
+ sprite->setShader(shader);
+ sprite.setDependency(DEP_SHADER, &proxy->getShared<Shader>());
return 0;
}
@@ -142,8 +111,11 @@ namespace JinEngine
p = (Proxy*)luax_checktype(L, 2, JIN_GRAPHICS_TEXTURE);
else if (luax_istype(L, 2, JIN_GRAPHICS_CANVAS))
p = (Proxy*)luax_checktype(L, 2, JIN_GRAPHICS_CANVAS);
- if(p != nullptr)
- sprite->setGraphic(&p->getShared<Graphic>());
+ if (p != nullptr)
+ {
+ sprite->setGraphic(p->getObject<Graphic>());
+ sprite.setDependency(DEP_GRAPHIC, &p->getShared<Graphic>());
+ }
return 0;
}