Reconstruct the operation of handling lua script event

This commit is contained in:
samuele3hu 2013-12-26 19:43:49 +08:00
parent 9679b0c8a7
commit 756a72cbca
7 changed files with 314 additions and 228 deletions

View File

@ -210,8 +210,6 @@ enum ScriptEventType
kAccelerometerEvent,
kControlEvent,
kCommonEvent,
kTableViewEvent,//Now it's only used in LuaBinding
kAssetsManagerEvent,//Now it's only used in Lua Binding
kCocoStudioEventListener,//Now it's only used in Lua Binding
kArmatureWrapper,//Now it's only used in Lua Binding
kEventListenerAcc,//Now it's only used in Lua Binding

View File

@ -27,7 +27,6 @@
#include "cocos2d.h"
#include "CCArray.h"
#include "CCScheduler.h"
#include "LuaScriptHandlerMgr.h"
#include "extensions/GUI/CCControlExtension/CCControl.h"
#include "LuaOpengl.h"
#include "lua_cocos2dx_manual.hpp"
@ -249,16 +248,6 @@ int LuaEngine::sendEvent(ScriptEvent* evt)
return handlerControlEvent(evt->data);
}
break;
case kTableViewEvent:
{
return handleTableViewEvent(evt->data);
}
break;
case kAssetsManagerEvent:
{
return handleAssetsManagerEvent(evt->data);
}
break;
case kCocoStudioEventListener:
{
return handleCocoStudioEventListener(evt->data);
@ -622,51 +611,6 @@ int LuaEngine::handleTouchesEvent(void* data)
return ret;
}
int LuaEngine::handleTableViewEvent(void* data)
{
if (nullptr == data)
return 0;
BasicScriptData* eventData = static_cast<BasicScriptData*>(data);
if (nullptr == eventData->nativeObject || nullptr == eventData->value)
return 0;
LuaTableViewEventData* tableViewEventData = static_cast<LuaTableViewEventData*>(eventData->value);
if (tableViewEventData->handlerType < ScriptHandlerMgr::HandlerType::SCROLLVIEW_SCROLL || tableViewEventData->handlerType > ScriptHandlerMgr::HandlerType::TABLEVIEW_NUMS_OF_CELLS )
return 0;
int handler = ScriptHandlerMgr::getInstance()->getObjectHandler((void*)eventData->nativeObject, tableViewEventData->handlerType);
if (0 == handler)
return 0;
int ret = 0;
switch (tableViewEventData->handlerType)
{
case ScriptHandlerMgr::HandlerType::SCROLLVIEW_SCROLL:
case ScriptHandlerMgr::HandlerType::SCROLLVIEW_ZOOM:
{
_stack->pushObject(static_cast<Object*>(eventData->nativeObject), "TableView");
ret = _stack->executeFunctionByHandler(handler, 1);
}
break;
case ScriptHandlerMgr::HandlerType::TABLECELL_TOUCHED:
case ScriptHandlerMgr::HandlerType::TABLECELL_HIGHLIGHT:
case ScriptHandlerMgr::HandlerType::TABLECELL_UNHIGHLIGHT:
case ScriptHandlerMgr::HandlerType::TABLECELL_WILL_RECYCLE:
{
_stack->pushObject(static_cast<Object*>(eventData->nativeObject), "TableView");
_stack->pushObject(static_cast<Object*>(tableViewEventData->value), "TableViewCell");
ret = _stack->executeFunctionByHandler(handler, 2);
}
break;
default:
break;
}
return ret;
}
int LuaEngine::handlerControlEvent(void* data)
{
if ( NULL == data )
@ -706,110 +650,9 @@ int LuaEngine::sendEventReturnArray(ScriptEvent* message,int numResults,Array& r
if (nullptr == message || numResults <= 0)
return 0;
switch (message->type)
{
case kTableViewEvent:
return handleTableViewEventReturnArray(message->data,numResults,resultArray);
break;
default:
break;
}
return 0;
}
int LuaEngine::handleTableViewEventReturnArray(void* data,int numResults,Array& resultArray)
{
if (nullptr == data || numResults <= 0)
return 0;
if (nullptr == data)
return 0;
BasicScriptData* eventData = static_cast<BasicScriptData*>(data);
if (nullptr == eventData->nativeObject || nullptr == eventData->value)
return 0;
LuaTableViewEventData* tableViewEventData = static_cast<LuaTableViewEventData*>(eventData->value);
if (tableViewEventData->handlerType < ScriptHandlerMgr::HandlerType::SCROLLVIEW_SCROLL || tableViewEventData->handlerType > ScriptHandlerMgr::HandlerType::TABLEVIEW_NUMS_OF_CELLS )
return 0;
int handler = ScriptHandlerMgr::getInstance()->getObjectHandler((void*)eventData->nativeObject, tableViewEventData->handlerType);
if (0 == handler)
return 0;
int ret = 0;
switch (tableViewEventData->handlerType)
{
case ScriptHandlerMgr::HandlerType::TABLECELL_SIZE_FOR_INDEX:
{
_stack->pushObject(static_cast<Object*>(eventData->nativeObject), "TableView");
_stack->pushLong(*((long*)tableViewEventData->value));
ret = _stack->executeFunctionReturnArray(handler, 2, 2, resultArray);
}
break;
case ScriptHandlerMgr::HandlerType::TABLECELL_AT_INDEX:
{
_stack->pushObject(static_cast<Object*>(eventData->nativeObject), "TableView");
_stack->pushLong(*((long*)tableViewEventData->value));
ret = _stack->executeFunctionReturnArray(handler, 2, 1, resultArray);
}
break;
case ScriptHandlerMgr::HandlerType::TABLEVIEW_NUMS_OF_CELLS:
{
_stack->pushObject(static_cast<Object*>(eventData->nativeObject), "TableView");
ret = _stack->executeFunctionReturnArray(handler, 1, 1, resultArray);
}
break;
default:
break;
}
return ret;
}
int LuaEngine::handleAssetsManagerEvent(void* data)
{
if (nullptr == data)
return 0;
BasicScriptData* eventData = static_cast<BasicScriptData*>(data);
if (nullptr == eventData->nativeObject || nullptr == eventData->value)
return 0;
LuaAssetsManagerEventData* assetsManagerEventData = static_cast<LuaAssetsManagerEventData*>(eventData->value);
if (assetsManagerEventData->handlerType < ScriptHandlerMgr::HandlerType::ASSETSMANAGER_PROGRESS || assetsManagerEventData->handlerType > ScriptHandlerMgr::HandlerType::ASSETSMANAGER_ERROR )
return 0;
int handler = ScriptHandlerMgr::getInstance()->getObjectHandler((void*)eventData->nativeObject, assetsManagerEventData->handlerType);
if (0 == handler)
return 0;
int ret = 0;
switch (assetsManagerEventData->handlerType)
{
case ScriptHandlerMgr::HandlerType::ASSETSMANAGER_PROGRESS:
case ScriptHandlerMgr::HandlerType::ASSETSMANAGER_ERROR:
{
_stack->pushInt(assetsManagerEventData->value);
ret = _stack->executeFunctionByHandler(handler, 1);
}
break;
case ScriptHandlerMgr::HandlerType::ASSETSMANAGER_SUCCESS:
{
ret = _stack->executeFunctionByHandler(handler, 0);
}
break;
default:
break;
}
return ret;
}
int LuaEngine::handleCocoStudioEventListener(void* data)
{
@ -1046,4 +889,190 @@ int LuaEngine::handleEventListenerCustom(void* data)
return ret;
}
int LuaEngine::handleEvent(ScriptHandlerMgr::HandlerType type,void* data)
{
switch (type)
{
case ScriptHandlerMgr::HandlerType::SCROLLVIEW_SCROLL:
case ScriptHandlerMgr::HandlerType::SCROLLVIEW_ZOOM:
case ScriptHandlerMgr::HandlerType::TABLECELL_TOUCHED:
case ScriptHandlerMgr::HandlerType::TABLECELL_HIGHLIGHT:
case ScriptHandlerMgr::HandlerType::TABLECELL_UNHIGHLIGHT:
case ScriptHandlerMgr::HandlerType::TABLECELL_WILL_RECYCLE:
{
return handleTableViewEvent(type, data);
}
break;
case ScriptHandlerMgr::HandlerType::ASSETSMANAGER_PROGRESS:
case ScriptHandlerMgr::HandlerType::ASSETSMANAGER_ERROR:
case ScriptHandlerMgr::HandlerType::ASSETSMANAGER_SUCCESS:
{
return handleAssetsManagerEvent(type, data);
}
break;
default:
break;
}
return 0;
}
int LuaEngine::handleEvent(ScriptHandlerMgr::HandlerType type, void* data, int numResults, const std::function<void(lua_State*,int)>& func)
{
switch (type)
{
case ScriptHandlerMgr::HandlerType::TABLECELL_SIZE_FOR_INDEX:
case ScriptHandlerMgr::HandlerType::TABLECELL_AT_INDEX:
case ScriptHandlerMgr::HandlerType::TABLEVIEW_NUMS_OF_CELLS:
{
return handlerTableViewEvent(type, data, numResults,func);
}
break;
default:
break;
}
return 0;
}
int LuaEngine::handleTableViewEvent(ScriptHandlerMgr::HandlerType type,void* data)
{
if (nullptr == data)
return 0;
BasicScriptData* eventData = static_cast<BasicScriptData*>(data);
if (nullptr == eventData->nativeObject || nullptr == eventData->value)
return 0;
LuaTableViewEventData* tableViewData = static_cast<LuaTableViewEventData*>(eventData->value);
int handler = ScriptHandlerMgr::getInstance()->getObjectHandler((void*)eventData->nativeObject, type);
if (0 == handler)
return 0;
Object* obj = static_cast<Object*>(eventData->nativeObject);
if (nullptr == obj)
return 0;
int ret = 0;
switch (type)
{
case ScriptHandlerMgr::HandlerType::SCROLLVIEW_SCROLL:
case ScriptHandlerMgr::HandlerType::SCROLLVIEW_ZOOM:
{
toluafix_pushusertype_ccobject(_stack->getLuaState(), obj->_ID, &(obj->_luaID), (void*)(obj),"TableView");
ret = _stack->executeFunctionByHandler(handler, 1);
}
break;
case ScriptHandlerMgr::HandlerType::TABLECELL_TOUCHED:
case ScriptHandlerMgr::HandlerType::TABLECELL_HIGHLIGHT:
case ScriptHandlerMgr::HandlerType::TABLECELL_UNHIGHLIGHT:
case ScriptHandlerMgr::HandlerType::TABLECELL_WILL_RECYCLE:
{
Object* cellObject = static_cast<Object*>(tableViewData->value);
if (nullptr == cellObject) {
break;
}
toluafix_pushusertype_ccobject(_stack->getLuaState(), obj->_ID, &(obj->_luaID), (void*)(obj),"TableView");
toluafix_pushusertype_ccobject(_stack->getLuaState(), cellObject->_ID, &(cellObject->_luaID), (void*)(cellObject),"TableViewCell");
ret = _stack->executeFunctionByHandler(handler, 2);
}
break;
default:
break;
}
return ret;
}
int LuaEngine::handlerTableViewEvent(ScriptHandlerMgr::HandlerType handlerType,void* data, int numResults, const std::function<void(lua_State*,int)> func)
{
if (nullptr == data || numResults <= 0)
return 0;
BasicScriptData* eventData = static_cast<BasicScriptData*>(data);
if (nullptr == eventData->nativeObject || nullptr == eventData->value)
return 0;
LuaTableViewEventData* tableViewData = static_cast<LuaTableViewEventData*>(eventData->value);
int handler = ScriptHandlerMgr::getInstance()->getObjectHandler((void*)eventData->nativeObject, handlerType);
if (0 == handler)
return 0;
Object* obj = static_cast<Object*>(eventData->nativeObject);
if (nullptr == obj)
return 0;
int ret = 0;
switch (handlerType)
{
case ScriptHandlerMgr::HandlerType::TABLECELL_SIZE_FOR_INDEX:
{
toluafix_pushusertype_ccobject(_stack->getLuaState(), obj->_ID, &(obj->_luaID), (void*)(obj),"TableView");
_stack->pushLong(*((long*)tableViewData->value));
ret = _stack->executeFunction(handler, 2, 2, func);
}
break;
case ScriptHandlerMgr::HandlerType::TABLECELL_AT_INDEX:
{
toluafix_pushusertype_ccobject(_stack->getLuaState(), obj->_ID, &(obj->_luaID), (void*)(obj),"TableView");
_stack->pushLong(*((long*)tableViewData->value));
ret = _stack->executeFunction(handler, 2, 1, func);
}
break;
case ScriptHandlerMgr::HandlerType::TABLEVIEW_NUMS_OF_CELLS:
{
toluafix_pushusertype_ccobject(_stack->getLuaState(), obj->_ID, &(obj->_luaID), (void*)(obj),"TableView");
ret = _stack->executeFunction(handler, 1, 1, func);
}
break;
default:
break;
}
return ret;
}
int LuaEngine::handleAssetsManagerEvent(ScriptHandlerMgr::HandlerType type,void* data)
{
if (nullptr == data)
return 0;
BasicScriptData* eventData = static_cast<BasicScriptData*>(data);
if (nullptr == eventData->nativeObject || nullptr == eventData->value)
return 0;
LuaAssetsManagerEventData* assetsManagerData = static_cast<LuaAssetsManagerEventData*>(eventData->value);
int handler = ScriptHandlerMgr::getInstance()->getObjectHandler((void*)eventData->nativeObject, type);
if (0 == handler)
return 0;
int ret = 0;
switch (type)
{
case ScriptHandlerMgr::HandlerType::ASSETSMANAGER_PROGRESS:
case ScriptHandlerMgr::HandlerType::ASSETSMANAGER_ERROR:
{
_stack->pushInt(assetsManagerData->value);
ret = _stack->executeFunctionByHandler(handler, 1);
}
break;
case ScriptHandlerMgr::HandlerType::ASSETSMANAGER_SUCCESS:
{
ret = _stack->executeFunctionByHandler(handler, 0);
}
break;
default:
break;
}
return ret;
}
NS_CC_END

View File

@ -33,6 +33,7 @@ extern "C" {
#include "CCScriptSupport.h"
#include "CCLuaStack.h"
#include "CCLuaValue.h"
#include "LuaScriptHandlerMgr.h"
NS_CC_BEGIN
@ -117,6 +118,8 @@ public:
virtual int sendEvent(ScriptEvent* message);
virtual int sendEventReturnArray(ScriptEvent* message,int numResults,Array& resultArray);
virtual int handleEvent(ScriptHandlerMgr::HandlerType type,void* data);
virtual int handleEvent(ScriptHandlerMgr::HandlerType type, void* data, int numResults, const std::function<void(lua_State*,int)>& func);
private:
LuaEngine(void)
: _stack(NULL)
@ -134,9 +137,6 @@ private:
int handleTouchEvent(void* data);
int handleTouchesEvent(void* data);
int handlerControlEvent(void* data);
int handleTableViewEvent(void* data);
int handleTableViewEventReturnArray(void* data,int numResults,Array& resultArray);
int handleAssetsManagerEvent(void* data);
int handleCocoStudioEventListener(void* data);
int handleArmatureWrapper(void* data);
int handleEventListenerAcc(void* data);
@ -145,6 +145,10 @@ private:
int handleEventListenerTouches(void* data);
int handleEventListenerMouse(void* data);
int handleEventListenerCustom(void* data);
int handleAssetsManagerEvent(ScriptHandlerMgr::HandlerType type,void* data);
int handleTableViewEvent(ScriptHandlerMgr::HandlerType type,void* data);
int handlerTableViewEvent(ScriptHandlerMgr::HandlerType type,void* data, int numResults, const std::function<void(lua_State*,int)> func);
private:
static LuaEngine* _defaultEngine;
LuaStack *_stack;

View File

@ -577,4 +577,73 @@ int LuaStack::executeFunctionReturnArray(int handler,int numArgs,int numResults,
return 1;
}
int LuaStack::executeFunction(int handler, int numArgs, int numResults, const std::function<void(lua_State*,int)>& func)
{
if (pushFunctionByHandler(handler)) /* L: ... arg1 arg2 ... func */
{
if (numArgs > 0)
{
lua_insert(_state, -(numArgs + 1)); /* L: ... func arg1 arg2 ... */
}
int functionIndex = -(numArgs + 1);
if (!lua_isfunction(_state, functionIndex))
{
CCLOG("value at stack [%d] is not function", functionIndex);
lua_pop(_state, numArgs + 1); // remove function and arguments
return 0;
}
int traceCallback = 0;
lua_getglobal(_state, "__G__TRACKBACK__"); /* L: ... func arg1 arg2 ... G */
if (!lua_isfunction(_state, -1))
{
lua_pop(_state, 1); /* L: ... func arg1 arg2 ... */
}
else
{
lua_insert(_state, functionIndex - 1); /* L: ... G func arg1 arg2 ... */
traceCallback = functionIndex - 1;
}
int error = 0;
++_callFromLua;
error = lua_pcall(_state, numArgs, numResults, traceCallback); /* L: ... [G] ret1 ret2 ... retResults*/
--_callFromLua;
if (error)
{
if (traceCallback == 0)
{
CCLOG("[LUA ERROR] %s", lua_tostring(_state, - 1)); /* L: ... error */
lua_pop(_state, 1); // remove error message from stack
}
else /* L: ... G error */
{
lua_pop(_state, 2); // remove __G__TRACKBACK__ and error message from stack
}
return 0;
}
// get return value,don't pass LUA_MULTRET to numResults,
if (numResults <= 0)
return 0;
if (nullptr == func)
return 0;
func(_state,numResults);
if (traceCallback)
{
lua_pop(_state, 1); // remove __G__TRACKBACK__ from stack /* L: ... */
}
}
lua_settop(_state, 0);
return 1;
}
NS_CC_END

View File

@ -116,6 +116,7 @@ public:
virtual int executeFunctionByHandler(int nHandler, int numArgs);
virtual int executeFunctionReturnArray(int handler,int numArgs,int numResults,Array& resultArray);
virtual int executeFunction(int handler, int numArgs, int numResults, const std::function<void(lua_State*,int)>& func);
virtual bool handleAssert(const char *msg);

View File

@ -877,10 +877,9 @@ public:
int handler = ScriptHandlerMgr::getInstance()->getObjectHandler((void*)view, ScriptHandlerMgr::HandlerType::SCROLLVIEW_SCROLL);
if (0 != handler)
{
LuaTableViewEventData eventData(ScriptHandlerMgr::HandlerType::SCROLLVIEW_SCROLL);
LuaTableViewEventData eventData;
BasicScriptData data(view,&eventData);
ScriptEvent event(kTableViewEvent,(void*)&data);
LuaEngine::getInstance()->sendEvent(&event);
LuaEngine::getInstance()->handleEvent(ScriptHandlerMgr::HandlerType::SCROLLVIEW_SCROLL, (void*)&data);
}
}
}
@ -892,10 +891,9 @@ public:
int handler = ScriptHandlerMgr::getInstance()->getObjectHandler((void*)view, ScriptHandlerMgr::HandlerType::SCROLLVIEW_ZOOM);
if (0 != handler)
{
LuaTableViewEventData eventData(ScriptHandlerMgr::HandlerType::SCROLLVIEW_ZOOM);
LuaTableViewEventData eventData;
BasicScriptData data(view,&eventData);
ScriptEvent event(kTableViewEvent,(void*)&data);
LuaEngine::getInstance()->sendEvent(&event);
LuaEngine::getInstance()->handleEvent(ScriptHandlerMgr::HandlerType::SCROLLVIEW_ZOOM, (void*)&data);
}
}
}
@ -907,10 +905,9 @@ public:
int handler = ScriptHandlerMgr::getInstance()->getObjectHandler((void*)table, ScriptHandlerMgr::HandlerType::TABLECELL_TOUCHED);
if (0 != handler)
{
LuaTableViewEventData eventData(ScriptHandlerMgr::HandlerType::TABLECELL_TOUCHED,cell);
LuaTableViewEventData eventData(cell);
BasicScriptData data(table,&eventData);
ScriptEvent event(kTableViewEvent,(void*)&data);
LuaEngine::getInstance()->sendEvent(&event);
LuaEngine::getInstance()->handleEvent(ScriptHandlerMgr::HandlerType::TABLECELL_TOUCHED,(void*)&data);
}
}
}
@ -922,10 +919,9 @@ public:
int handler = ScriptHandlerMgr::getInstance()->getObjectHandler((void*)table, ScriptHandlerMgr::HandlerType::TABLECELL_HIGHLIGHT);
if (0 != handler)
{
LuaTableViewEventData eventData(ScriptHandlerMgr::HandlerType::TABLECELL_HIGHLIGHT,cell);
LuaTableViewEventData eventData(cell);
BasicScriptData data(table,&eventData);
ScriptEvent event(kTableViewEvent,(void*)&data);
LuaEngine::getInstance()->sendEvent(&event);
LuaEngine::getInstance()->handleEvent(ScriptHandlerMgr::HandlerType::TABLECELL_HIGHLIGHT,(void*)&data);
}
}
}
@ -937,10 +933,9 @@ public:
int handler = ScriptHandlerMgr::getInstance()->getObjectHandler((void*)table, ScriptHandlerMgr::HandlerType::TABLECELL_UNHIGHLIGHT);
if (0 != handler)
{
LuaTableViewEventData eventData(ScriptHandlerMgr::HandlerType::TABLECELL_UNHIGHLIGHT,cell);
LuaTableViewEventData eventData(cell);
BasicScriptData data(table,&eventData);
ScriptEvent event(kTableViewEvent,(void*)&data);
LuaEngine::getInstance()->sendEvent(&event);
LuaEngine::getInstance()->handleEvent(ScriptHandlerMgr::HandlerType::TABLECELL_UNHIGHLIGHT,(void*)&data);
}
}
}
@ -952,10 +947,9 @@ public:
int handler = ScriptHandlerMgr::getInstance()->getObjectHandler((void*)table, ScriptHandlerMgr::HandlerType::TABLECELL_WILL_RECYCLE);
if (0 != handler)
{
LuaTableViewEventData eventData(ScriptHandlerMgr::HandlerType::TABLECELL_WILL_RECYCLE,cell);
LuaTableViewEventData eventData(cell);
BasicScriptData data(table,&eventData);
ScriptEvent event(kTableViewEvent,(void*)&data);
LuaEngine::getInstance()->sendEvent(&event);
LuaEngine::getInstance()->handleEvent(ScriptHandlerMgr::HandlerType::TABLECELL_WILL_RECYCLE,(void*)&data);
}
}
}
@ -1033,19 +1027,20 @@ public:
int handler = ScriptHandlerMgr::getInstance()->getObjectHandler((void*)table, ScriptHandlerMgr::HandlerType::TABLECELL_SIZE_FOR_INDEX);
if (0 != handler)
{
Array resultArray;
resultArray.initWithCapacity(1);
LuaTableViewEventData eventData(ScriptHandlerMgr::HandlerType::TABLECELL_SIZE_FOR_INDEX,&idx);
LuaTableViewEventData eventData(&idx);
BasicScriptData data(table,&eventData);
ScriptEvent event(kTableViewEvent,(void*)&data);
LuaEngine::getInstance()->sendEventReturnArray(&event, 2, resultArray);
CCASSERT(resultArray.count() == 2, "tableCellSizeForIndex Array count error");
Double* width = dynamic_cast<Double*>(resultArray.getObjectAtIndex(0));
Double* height = dynamic_cast<Double*>(resultArray.getObjectAtIndex(1));
if (nullptr != width && nullptr != height)
{
return Size((float)width->getValue(), (float)height->getValue());
}
float width = 0.0;
float height = 0.0;
LuaEngine::getInstance()->handleEvent(ScriptHandlerMgr::HandlerType::TABLECELL_SIZE_FOR_INDEX, (void*)&data,2,[&](lua_State* L,int numReturn){
CCASSERT(numReturn == 2, "tableCellSizeForIndex return count error");
ValueVector vec;
width = (float)tolua_tonumber(L, -1, 0);
lua_pop(L, 1);
height = (float)tolua_tonumber(L, -1, 0);
lua_pop(L, 1);
});
return Size(width, height);
}
}
@ -1059,17 +1054,14 @@ public:
int handler = ScriptHandlerMgr::getInstance()->getObjectHandler((void*)table, ScriptHandlerMgr::HandlerType::TABLECELL_AT_INDEX);
if (0 != handler)
{
Array resultArray;
resultArray.initWithCapacity(1);
LuaTableViewEventData eventData(ScriptHandlerMgr::HandlerType::TABLECELL_AT_INDEX,&idx);
LuaTableViewEventData eventData(&idx);
BasicScriptData data(table,&eventData);
ScriptEvent event(kTableViewEvent,(void*)&data);
LuaEngine::getInstance()->sendEventReturnArray(&event, 1, resultArray);
TableViewCell* viewCell = nullptr;
if (resultArray.count() > 0)
{
viewCell = dynamic_cast<TableViewCell*>(resultArray.getObjectAtIndex(0));
}
LuaEngine::getInstance()->handleEvent(ScriptHandlerMgr::HandlerType::TABLECELL_AT_INDEX, (void*)&data, 1, [&](lua_State* L, int numReturn){
CCASSERT(numReturn == 1, "tableCellAtIndex return count error");
viewCell = static_cast<TableViewCell*>(tolua_tousertype(L, -1, nullptr));
lua_pop(L, 1);
});
return viewCell;
}
@ -1085,17 +1077,15 @@ public:
int handler = ScriptHandlerMgr::getInstance()->getObjectHandler((void*)table, ScriptHandlerMgr::HandlerType::TABLEVIEW_NUMS_OF_CELLS);
if (0 != handler)
{
Array resultArray;
resultArray.initWithCapacity(1);
LuaTableViewEventData eventData(ScriptHandlerMgr::HandlerType::TABLEVIEW_NUMS_OF_CELLS);
LuaTableViewEventData eventData;
BasicScriptData data(table,&eventData);
ScriptEvent event(kTableViewEvent,(void*)&data);
LuaEngine::getInstance()->sendEventReturnArray(&event, 1, resultArray);
Double* numbers = dynamic_cast<Double*>(resultArray.getObjectAtIndex(0));
if (NULL != numbers)
{
return (long)numbers->getValue();
}
long counts = 0;
LuaEngine::getInstance()->handleEvent(ScriptHandlerMgr::HandlerType::TABLEVIEW_NUMS_OF_CELLS, (void*)&data,1, [&](lua_State* L, int numReturn){
CCASSERT(numReturn == 1, "numberOfCellsInTableView return count error");
counts = (long)tolua_tonumber(L, -1, 0);
lua_pop(L, 1);
});
return counts;
}
}
return 0;
@ -1444,10 +1434,9 @@ public:
int handler = ScriptHandlerMgr::getInstance()->getObjectHandler((void*)this, ScriptHandlerMgr::HandlerType::ASSETSMANAGER_PROGRESS);
if (0 != handler)
{
LuaAssetsManagerEventData eventData(ScriptHandlerMgr::HandlerType::ASSETSMANAGER_PROGRESS,percent);
LuaAssetsManagerEventData eventData(percent);
BasicScriptData data((void*)this,&eventData);
ScriptEvent event(kAssetsManagerEvent,(void*)&data);
LuaEngine::getInstance()->sendEvent(&event);
LuaEngine::getInstance()->handleEvent(ScriptHandlerMgr::HandlerType::ASSETSMANAGER_PROGRESS, (void*)&data);
}
}
@ -1456,10 +1445,9 @@ public:
int handler = ScriptHandlerMgr::getInstance()->getObjectHandler((void*)this, ScriptHandlerMgr::HandlerType::ASSETSMANAGER_SUCCESS);
if (0 != handler)
{
LuaAssetsManagerEventData eventData(ScriptHandlerMgr::HandlerType::ASSETSMANAGER_SUCCESS);
LuaAssetsManagerEventData eventData;
BasicScriptData data((void*)this,&eventData);
ScriptEvent event(kAssetsManagerEvent,(void*)&data);
LuaEngine::getInstance()->sendEvent(&event);
LuaEngine::getInstance()->handleEvent(ScriptHandlerMgr::HandlerType::ASSETSMANAGER_SUCCESS, (void*)&data);
}
}
@ -1468,10 +1456,9 @@ public:
int handler = ScriptHandlerMgr::getInstance()->getObjectHandler((void*)this, ScriptHandlerMgr::HandlerType::ASSETSMANAGER_ERROR);
if (0 != handler)
{
LuaAssetsManagerEventData eventData(ScriptHandlerMgr::HandlerType::ASSETSMANAGER_ERROR, (int)errorCode);
LuaAssetsManagerEventData eventData((int)errorCode);
BasicScriptData data((void*)this,&eventData);
ScriptEvent event(kAssetsManagerEvent,(void*)&data);
LuaEngine::getInstance()->sendEvent(&event);
LuaEngine::getInstance()->handleEvent(ScriptHandlerMgr::HandlerType::ASSETSMANAGER_ERROR, (void*)&data);
}
}
};

View File

@ -16,22 +16,20 @@ TOLUA_API int register_cocos2dx_extension_CCBProxy(lua_State* tolua_S);
struct LuaTableViewEventData
{
cocos2d::ScriptHandlerMgr::HandlerType handlerType;
void* value;
// Constructor
LuaTableViewEventData(cocos2d::ScriptHandlerMgr::HandlerType _handleType,void* _value = nullptr)
: handlerType(_handleType),value(_value)
LuaTableViewEventData(void* _value = nullptr)
:value(_value)
{
}
};
struct LuaAssetsManagerEventData
{
cocos2d::ScriptHandlerMgr::HandlerType handlerType;
int value;
LuaAssetsManagerEventData(cocos2d::ScriptHandlerMgr::HandlerType _handleType, int _value = 0):handlerType(_handleType),value(_value)
LuaAssetsManagerEventData(int _value = 0):value(_value)
{
}
};