Add lua bindings for TextureCache::addImageAsync and update the related test cases

This commit is contained in:
samuele3hu 2014-07-14 16:05:48 +08:00
parent 5f453d0105
commit 4cb6c1c74f
2 changed files with 71 additions and 10 deletions

View File

@ -6510,6 +6510,73 @@ static void extendFastTMXLayer(lua_State* tolua_S)
lua_pop(tolua_S, 1); lua_pop(tolua_S, 1);
} }
static int lua_cocos2dx_TextureCache_addImageAsync(lua_State* tolua_S)
{
if (nullptr == tolua_S)
return 0 ;
int argc = 0;
TextureCache* self = nullptr;
#if COCOS2D_DEBUG >= 1
tolua_Error tolua_err;
if (!tolua_isusertype(tolua_S,1,"cc.TextureCache",0,&tolua_err)) goto tolua_lerror;
#endif
self = static_cast<TextureCache*>(tolua_tousertype(tolua_S,1,0));
#if COCOS2D_DEBUG >= 1
if (nullptr == self) {
tolua_error(tolua_S,"invalid 'self' in function 'lua_cocos2dx_TextureCache_addImageAsync'\n", NULL);
return 0;
}
#endif
argc = lua_gettop(tolua_S) - 1;
if (2 == argc)
{
#if COCOS2D_DEBUG >= 1
if (!tolua_isstring(tolua_S, 2, 0, &tolua_err) ||
!toluafix_isfunction(tolua_S,3,"LUA_FUNCTION",0,&tolua_err))
{
goto tolua_lerror;
}
#endif
const char* configFilePath = tolua_tostring(tolua_S, 2, "");
LUA_FUNCTION handler = ( toluafix_ref_function(tolua_S, 3, 0));
self->addImageAsync(configFilePath, [=](Texture2D* tex){
int ID = (tex) ? (int)tex->_ID : -1;
int* luaID = (tex) ? &tex->_luaID : nullptr;
toluafix_pushusertype_ccobject(tolua_S, ID, luaID, (void*)tex, "cc.Texture2D");
LuaEngine::getInstance()->getLuaStack()->executeFunctionByHandler(handler,1);
LuaEngine::getInstance()->removeScriptHandler(handler);
});
return 0;
}
CCLOG("'addImageAsync' function of TextureCache has wrong number of arguments: %d, was expecting %d\n", argc, 1);
#if COCOS2D_DEBUG >= 1
tolua_lerror:
tolua_error(tolua_S,"#ferror in function 'addImageAsync'.",&tolua_err);
return 0;
#endif
}
static void extendTextureCache(lua_State* tolua_S)
{
lua_pushstring(tolua_S, "cc.TextureCache");
lua_rawget(tolua_S, LUA_REGISTRYINDEX);
if (lua_istable(tolua_S,-1))
{
tolua_function(tolua_S, "addImageAsync", lua_cocos2dx_TextureCache_addImageAsync);
}
lua_pop(tolua_S, 1);
}
int register_all_cocos2dx_manual(lua_State* tolua_S) int register_all_cocos2dx_manual(lua_State* tolua_S)
{ {
if (NULL == tolua_S) if (NULL == tolua_S)
@ -6564,6 +6631,7 @@ int register_all_cocos2dx_manual(lua_State* tolua_S)
extendEventListenerFocus(tolua_S); extendEventListenerFocus(tolua_S);
extendApplication(tolua_S); extendApplication(tolua_S);
extendFastTMXLayer(tolua_S); extendFastTMXLayer(tolua_S);
extendTextureCache(tolua_S);
return 0; return 0;
} }

View File

@ -969,23 +969,16 @@ local function TextureAsync()
local seq = cc.Sequence:create(scale, scale_back) local seq = cc.Sequence:create(scale, scale_back)
label:runAction(cc.RepeatForever:create(seq)) label:runAction(cc.RepeatForever:create(seq))
local function imageLoaded(pObj) local function imageLoaded(texture)
local tex = pObj
local director = cc.Director:getInstance() local director = cc.Director:getInstance()
--cc.ASSERT( [NSThread currentThread] == [director runningThread], @"FAIL. Callback should be on cocos2d thread") local sprite = cc.Sprite:createWithTexture(texture)
-- IMPORTANT: The order on the callback is not guaranteed. Don't depend on the callback
-- This test just creates a sprite based on the Texture
local sprite = cc.Sprite:createWithTexture(tex)
sprite:setAnchorPoint(cc.p(0,0)) sprite:setAnchorPoint(cc.p(0,0))
ret:addChild(sprite, -1) ret:addChild(sprite, -1)
local size = director:getWinSize() local size = director:getWinSize()
local i = m_nImageOffset * 32 local i = m_nImageOffset * 32
sprite:setPosition(cc.p( i % size.width, (i / size.width) * 32 )) sprite:setPosition(cc.p( i % size.width, math.floor((i / size.width)) * 32 ))
m_nImageOffset = m_nImageOffset + 1 m_nImageOffset = m_nImageOffset + 1
cclog("Image loaded:...")-- %p", tex) cclog("Image loaded:...")-- %p", tex)