Merge pull request #7215 from samuele3hu/v3_SceneReader

Add Lua binding for ActionTimeline related,related test cases and update bindings-generator submodule
This commit is contained in:
minggo 2014-06-26 11:06:53 +08:00
commit ff04528df1
6 changed files with 618 additions and 3 deletions

View File

@ -58,6 +58,7 @@
1503FAC418DA8B6C00F6518C /* tp.lua in Resources */ = {isa = PBXBuildFile; fileRef = 1503FAB118DA8B6C00F6518C /* tp.lua */; };
1503FAC518DA8B6C00F6518C /* url.lua in Resources */ = {isa = PBXBuildFile; fileRef = 1503FAB218DA8B6C00F6518C /* url.lua */; };
1503FAC618DA8B6C00F6518C /* url.lua in Resources */ = {isa = PBXBuildFile; fileRef = 1503FAB218DA8B6C00F6518C /* url.lua */; };
15B0870D195AD52000D6F62B /* ActionTimeline in Resources */ = {isa = PBXBuildFile; fileRef = 38FA2E75194AECF800FF2BE4 /* ActionTimeline */; };
15C64825165F3934007D4F18 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 15C64824165F3934007D4F18 /* OpenGL.framework */; };
15C64827165F394E007D4F18 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 15C64826165F394E007D4F18 /* QuartzCore.framework */; };
15C64829165F396B007D4F18 /* OpenAL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 15C64828165F396B007D4F18 /* OpenAL.framework */; };
@ -4321,6 +4322,7 @@
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
15B0870D195AD52000D6F62B /* ActionTimeline in Resources */,
15E66FC8192D957100C20A52 /* Sprite3DTest in Resources */,
15C90B4418E66C1800D69802 /* mime.lua in Resources */,
15C90B4C18E66C3100D69802 /* url.lua in Resources */,

View File

@ -405,6 +405,155 @@ static void extendBone(lua_State* L)
lua_pop(L, 1);
}
int lua_cocos2dx_studio_NodeReader_getInstance(lua_State* L)
{
int argc = 0;
bool ok = true;
#if COCOS2D_DEBUG >= 1
tolua_Error tolua_err;
#endif
#if COCOS2D_DEBUG >= 1
if (!tolua_isusertable(L,1,"ccs.NodeReader",0,&tolua_err)) goto tolua_lerror;
#endif
argc = lua_gettop(L) - 1;
if (argc == 0)
{
if(!ok)
return 0;
cocostudio::timeline::NodeReader* ret = cocostudio::timeline::NodeReader::getInstance();
tolua_pushusertype(L,(void*)ret, "ccs.NodeReader");
return 1;
}
CCLOG("%s has wrong number of arguments: %d, was expecting %d\n ", "getInstance",argc, 0);
return 0;
#if COCOS2D_DEBUG >= 1
tolua_lerror:
tolua_error(L,"#ferror in function 'lua_cocos2dx_studio_NodeReader_getInstance'.",&tolua_err);
#endif
return 0;
}
static void extendNodeReader(lua_State* L)
{
lua_pushstring(L, "ccs.NodeReader");
lua_rawget(L, LUA_REGISTRYINDEX);
if (lua_istable(L,-1))
{
tolua_function(L, "getInstance", lua_cocos2dx_studio_NodeReader_getInstance);
}
lua_pop(L, 1);
}
int lua_cocos2dx_studio_ActionTimelineCache_getInstance(lua_State* L)
{
int argc = 0;
bool ok = true;
#if COCOS2D_DEBUG >= 1
tolua_Error tolua_err;
#endif
#if COCOS2D_DEBUG >= 1
if (!tolua_isusertable(L,1,"ccs.ActionTimelineCache",0,&tolua_err)) goto tolua_lerror;
#endif
argc = lua_gettop(L) - 1;
if (argc == 0)
{
if(!ok)
return 0;
cocostudio::timeline::ActionTimelineCache* ret = cocostudio::timeline::ActionTimelineCache::getInstance();
tolua_pushusertype(L,(void*)ret, "ccs.ActionTimelineCache");
return 1;
}
CCLOG("%s has wrong number of arguments: %d, was expecting %d\n ", "getInstance",argc, 0);
return 0;
#if COCOS2D_DEBUG >= 1
tolua_lerror:
tolua_error(L,"#ferror in function 'lua_cocos2dx_studio_ActionTimelineCache_getInstance'.",&tolua_err);
#endif
return 0;
}
static void extendActionTimelineCache(lua_State* L)
{
lua_pushstring(L, "ccs.ActionTimelineCache");
lua_rawget(L, LUA_REGISTRYINDEX);
if (lua_istable(L,-1))
{
tolua_function(L, "getInstance", lua_cocos2dx_studio_ActionTimelineCache_getInstance);
}
lua_pop(L, 1);
}
static int lua_cocos2dx_ActionTimeline_setFrameEventCallFunc(lua_State* L)
{
if (nullptr == L)
return 0;
int argc = 0;
cocostudio::timeline::ActionTimeline* self = nullptr;
#if COCOS2D_DEBUG >= 1
tolua_Error tolua_err;
if (!tolua_isusertype(L,1,"ccs.ActionTimeline",0,&tolua_err)) goto tolua_lerror;
#endif
self = static_cast<cocostudio::timeline::ActionTimeline*>(tolua_tousertype(L,1,0));
#if COCOS2D_DEBUG >= 1
if (nullptr == self) {
tolua_error(L,"invalid 'self' in function 'lua_cocos2dx_ActionTimeline_setFrameEventCallFunc'\n", NULL);
return 0;
}
#endif
argc = lua_gettop(L) - 1;
if (1 == argc)
{
#if COCOS2D_DEBUG >= 1
if (!toluafix_isfunction(L,2,"LUA_FUNCTION",0,&tolua_err) )
{
goto tolua_lerror;
}
#endif
LUA_FUNCTION handler = ( toluafix_ref_function(L,2,0));
self->setFrameEventCallFunc([=](cocostudio::timeline::Frame* frame){
toluafix_pushusertype_ccobject(L, frame->_ID, &frame->_luaID, (void*)frame, getLuaTypeName(frame, "ccs.Frame"));
LuaEngine::getInstance()->getLuaStack()->executeFunctionByHandler(handler, 1);
});
return 0;
}
CCLOG("'setFrameEventCallFunc' function of ActionTimeline has wrong number of arguments: %d, was expecting %d\n", argc, 1);
#if COCOS2D_DEBUG >= 1
tolua_lerror:
tolua_error(L,"#ferror in function 'setFrameEventCallFunc'.",&tolua_err);
return 0;
#endif
}
static void extendActionTimeline(lua_State* L)
{
lua_pushstring(L, "ccs.ActionTimeline");
lua_rawget(L, LUA_REGISTRYINDEX);
if (lua_istable(L,-1))
{
tolua_function(L, "setFrameEventCallFunc", lua_cocos2dx_ActionTimeline_setFrameEventCallFunc);
}
lua_pop(L, 1);
}
int register_all_cocos2dx_coco_studio_manual(lua_State* L)
{
if (nullptr == L)
@ -412,6 +561,9 @@ int register_all_cocos2dx_coco_studio_manual(lua_State* L)
extendArmatureAnimation(L);
extendArmatureDataManager(L);
extendBone(L);
extendActionTimelineCache(L);
extendNodeReader(L);
extendActionTimeline(L);
return 0;
}

View File

@ -0,0 +1,451 @@
local itemTagBasic = 1000
local winSize = cc.Director:getInstance():getWinSize()
local scheduler = cc.Director:getInstance():getScheduler()
local TimelineTestIndex =
{
TEST_ACTION_TIMELINE = 1,
TEST_CHANGE_PLAY_SECTION = 2,
TEST_TIMELINE_FRAME_EVENT = 3,
TEST_TIMELINE_PERFORMACE = 4,
}
local timelineSceneIdx = TimelineTestIndex.TEST_ACTION_TIMELINE
local TimelineTestScene = class("TimelineTestScene")
TimelineTestScene.__index = TimelineTestScene
function TimelineTestScene.extend(target)
local t = tolua.getpeer(target)
if not t then
t = {}
tolua.setpeer(target, t)
end
setmetatable(t, TimelineTestScene)
return target
end
function TimelineTestScene:runThisTest()
timelineSceneIdx = TimelineTestIndex.TEST_ACTION_TIMELINE
self:addChild(restartTimelineTest())
end
function TimelineTestScene.create()
local scene = TimelineTestScene.extend(cc.Scene:create())
local bg = cc.Sprite:create("armature/bg.jpg")
bg:setPosition(VisibleRect:center())
local scaleX = VisibleRect:getVisibleRect().width / bg:getContentSize().width
local scaleY = VisibleRect:getVisibleRect().height / bg:getContentSize().height
bg:setScaleX(scaleX)
bg:setScaleY(scaleY)
scene:addChild(bg)
return scene
end
function TimelineTestScene.toMainMenuCallback()
end
local TimelineTestLayer = class("TimelineTestLayer")
TimelineTestLayer.__index = TimelineTestLayer
TimelineTestLayer._backItem = nil
TimelineTestLayer._restarItem = nil
TimelineTestLayer._nextItem = nil
function TimelineTestLayer:onEnter()
end
function TimelineTestLayer.title(idx)
if TimelineTestIndex.TEST_ACTION_TIMELINE == idx then
return "CSArmature Test Bed"
elseif TimelineTestIndex.TEST_CHANGE_PLAY_SECTION == idx then
return "Test Change Play Section"
elseif TimelineTestIndex.TEST_TIMELINE_FRAME_EVENT == idx then
return "Test Frame Event"
elseif TimelineTestIndex.TEST_TIMELINE_PERFORMACE == idx then
return "Test ActionTimeline performance"
end
end
function TimelineTestLayer.subTitle(idx)
if TimelineTestIndex.TEST_ACTION_TIMELINE == idx then
return ""
else
return ""
end
end
function TimelineTestLayer.create()
local layer = TimelineTestLayer.extend(cc.Layer:create())
if nil ~= layer then
layer:createMenu()
layer:createToExtensionMenu()
layer:creatTitleAndSubTitle(timelineSceneIdx)
local function onNodeEvent(event)
if "enter" == event then
layer:onEnter()
end
end
layer:registerScriptHandler(onNodeEvent)
end
return layer
end
function TimelineTestLayer.backCallback()
local newScene = TimelineTestScene.create()
newScene:addChild(backimelineTest())
cc.Director:getInstance():replaceScene(newScene)
end
function TimelineTestLayer.restartCallback()
local newScene = TimelineTestScene.create()
newScene:addChild(restartTimelineTest())
cc.Director:getInstance():replaceScene(newScene)
end
function TimelineTestLayer.nextCallback()
local newScene = TimelineTestScene.create()
newScene:addChild(nextTimelineTest())
cc.Director:getInstance():replaceScene(newScene)
end
function TimelineTestLayer:createMenu()
local menu = cc.Menu:create()
self._backItem = cc.MenuItemImage:create(s_pPathB1, s_pPathB2)
self._backItem:registerScriptTapHandler(self.backCallback)
menu:addChild(self._backItem,itemTagBasic)
self._restarItem = cc.MenuItemImage:create(s_pPathR1, s_pPathR2)
self._restarItem:registerScriptTapHandler(self.restartCallback)
menu:addChild(self._restarItem,itemTagBasic)
self._nextItem = cc.MenuItemImage:create(s_pPathF1, s_pPathF2)
menu:addChild(self._nextItem,itemTagBasic)
self._nextItem:registerScriptTapHandler(self.nextCallback)
local size = cc.Director:getInstance():getWinSize()
self._backItem:setPosition(cc.p(size.width / 2 - self._restarItem:getContentSize().width * 2, self._restarItem:getContentSize().height / 2))
self._restarItem:setPosition(cc.p(size.width / 2, self._restarItem:getContentSize().height / 2))
self._nextItem:setPosition(cc.p(size.width / 2 + self._restarItem:getContentSize().width * 2, self._restarItem:getContentSize().height / 2))
menu:setPosition(cc.p(0, 0))
self:addChild(menu)
end
function TimelineTestLayer.toExtensionMenu()
ccs.ArmatureDataManager:destroyInstance()
local scene = CocoStudioTestMain()
if scene ~= nil then
cc.Director:getInstance():replaceScene(scene)
end
end
function TimelineTestLayer:createToExtensionMenu()
cc.MenuItemFont:setFontName("Arial")
cc.MenuItemFont:setFontSize(24)
local menuItemFont = cc.MenuItemFont:create("Back")
menuItemFont:setPosition(cc.p(VisibleRect:rightBottom().x - 50, VisibleRect:rightBottom().y + 25))
menuItemFont:registerScriptTapHandler(TimelineTestLayer.toExtensionMenu)
local backMenu = cc.Menu:create()
backMenu:addChild(menuItemFont)
backMenu:setPosition(cc.p(0, 0))
self:addChild(backMenu,10)
end
function TimelineTestLayer:creatTitleAndSubTitle(idx)
print("set title")
local title = cc.Label:createWithTTF(TimelineTestLayer.title(idx), "fonts/Thonburi.ttf", 18)
title:setColor(cc.c3b(255,0,0))
self:addChild(title, 1, 10000)
title:setPosition( cc.p(VisibleRect:center().x, VisibleRect:top().y - 30))
local subTitle = nil
if "" ~= TimelineTestLayer.subTitle(idx) then
local subTitle = cc.Label:createWithTTF(TimelineTestLayer.subTitle(idx), "fonts/Thonburi.ttf", 18)
subTitle:setColor(cc.c3b(0,0,0))
self:addChild(subTitle, 1, 10001)
subTitle:setPosition( cc.p(VisibleRect:center().x, VisibleRect:top().y - 60) )
end
end
local TestActionTimeline = class("TestActionTimeline",TimelineTestLayer)
TestActionTimeline.__index = TestActionTimeline
function TestActionTimeline.extend(target)
local t = tolua.getpeer(target)
if not t then
t = {}
tolua.setpeer(target, t)
end
setmetatable(t, TestActionTimeline)
return target
end
function TestActionTimeline:onEnter()
cc.SpriteFrameCache:getInstance():addSpriteFramesWithFile("armature/Cowboy0.plist", "armature/Cowboy0.png")
local node = ccs.NodeReader:getInstance():createNode("ActionTimeline/boy_1.ExportJson")
local action = ccs.ActionTimelineCache:getInstance():createAction("ActionTimeline/boy_1.ExportJson")
node:runAction(action)
action:gotoFrameAndPlay(0, 60, true)
node:setScale(0.4)
node:setPosition(0, 0)
self:addChild(node)
end
function TestActionTimeline.restartCallback()
ccs.ArmatureDataManager:destroyInstance()
local newScene = TimelineTestScene.create()
newScene:addChild(restartTimelineTest())
cc.Director:getInstance():replaceScene(newScene)
end
function TestActionTimeline.create()
local layer = TestActionTimeline.extend(cc.Layer:create())
if nil ~= layer then
layer:createMenu()
layer:createToExtensionMenu()
layer:creatTitleAndSubTitle(timelineSceneIdx)
local function onNodeEvent(event)
if "enter" == event then
layer:onEnter()
end
end
layer:registerScriptHandler(onNodeEvent)
end
return layer
end
local TestChangePlaySection = class("TestChangePlaySection",TimelineTestLayer)
TestChangePlaySection.__index = TestChangePlaySection
function TestChangePlaySection.extend(target)
local t = tolua.getpeer(target)
if not t then
t = {}
tolua.setpeer(target, t)
end
setmetatable(t, TestChangePlaySection)
return target
end
function TestChangePlaySection:onEnter()
cc.SpriteFrameCache:getInstance():addSpriteFramesWithFile("armature/Cowboy0.plist", "armature/Cowboy0.png")
local node = ccs.NodeReader:getInstance():createNode("ActionTimeline/boy_1.ExportJson")
local action = ccs.ActionTimelineCache:getInstance():createAction("ActionTimeline/boy_1.ExportJson")
node:runAction(action)
action:gotoFrameAndPlay(70, action:getDuration(), true)
node:setScale(0.2)
node:setPosition(150, 100)
local function onTouchesEnded(touches, event)
if action:getStartFrame() == 0 then
action:gotoFrameAndPlay(70, action:getDuration(), true)
else
action:gotoFrameAndPlay(0, 60, true)
end
end
local listener = cc.EventListenerTouchAllAtOnce:create()
listener:registerScriptHandler(onTouchesEnded,cc.Handler.EVENT_TOUCHES_ENDED )
local eventDispatcher = self:getEventDispatcher()
eventDispatcher:addEventListenerWithSceneGraphPriority(listener, self)
self:addChild(node)
end
function TestChangePlaySection.restartCallback()
ccs.ArmatureDataManager:destroyInstance()
local newScene = TimelineTestScene.create()
newScene:addChild(restartTimelineTest())
cc.Director:getInstance():replaceScene(newScene)
end
function TestChangePlaySection.create()
local layer = TestChangePlaySection.extend(cc.Layer:create())
if nil ~= layer then
layer:createMenu()
layer:createToExtensionMenu()
layer:creatTitleAndSubTitle(timelineSceneIdx)
local function onNodeEvent(event)
if "enter" == event then
layer:onEnter()
end
end
layer:registerScriptHandler(onNodeEvent)
end
return layer
end
local TestTimelineFrameEvent = class("TestTimelineFrameEvent",TimelineTestLayer)
TestTimelineFrameEvent.__index = TestTimelineFrameEvent
function TestTimelineFrameEvent.extend(target)
local t = tolua.getpeer(target)
if not t then
t = {}
tolua.setpeer(target, t)
end
setmetatable(t, TestTimelineFrameEvent)
return target
end
function TestTimelineFrameEvent:onEnter()
cc.SpriteFrameCache:getInstance():addSpriteFramesWithFile("armature/Cowboy0.plist", "armature/Cowboy0.png")
local node = ccs.NodeReader:getInstance():createNode("ActionTimeline/boy_1.ExportJson")
local action = ccs.ActionTimelineCache:getInstance():createAction("ActionTimeline/boy_1.ExportJson")
node:runAction(action)
action:gotoFrameAndPlay(0, 60, true)
node:setScale(0.2)
node:setPosition(150, 100)
self:addChild(node)
local function onFrameEvent(frame)
if nil == frame then
return
end
local str = frame:getEvent()
if str == "changeColor" then
frame:getNode():setColor(cc.c3b(0, 0, 0))
elseif(str == "endChangeColor") then
frame:getNode():setColor(cc.c3b(255,255,255))
end
end
action:setFrameEventCallFunc(onFrameEvent)
end
function TestTimelineFrameEvent.restartCallback()
ccs.ArmatureDataManager:destroyInstance()
local newScene = TimelineTestScene.create()
newScene:addChild(restartTimelineTest())
cc.Director:getInstance():replaceScene(newScene)
end
function TestTimelineFrameEvent.create()
local layer = TestTimelineFrameEvent.extend(cc.Layer:create())
if nil ~= layer then
layer:createMenu()
layer:createToExtensionMenu()
layer:creatTitleAndSubTitle(timelineSceneIdx)
local function onNodeEvent(event)
if "enter" == event then
layer:onEnter()
end
end
layer:registerScriptHandler(onNodeEvent)
end
return layer
end
local TestTimelinePerformance = class("TestTimelinePerformance",TimelineTestLayer)
TestTimelinePerformance.__index = TestTimelinePerformance
function TestTimelinePerformance.extend(target)
local t = tolua.getpeer(target)
if not t then
t = {}
tolua.setpeer(target, t)
end
setmetatable(t, TestTimelinePerformance)
return target
end
function TestTimelinePerformance:onEnter()
cc.SpriteFrameCache:getInstance():addSpriteFramesWithFile("armature/Cowboy0.plist", "armature/Cowboy0.png")
for i = 1,100 do
local node = ccs.NodeReader:getInstance():createNode("ActionTimeline/boy_1.ExportJson")
local action = ccs.ActionTimelineCache:getInstance():createAction("ActionTimeline/boy_1.ExportJson")
node:runAction(action)
action:gotoFrameAndPlay(70, action:getDuration(), true)
node:setScale(0.1)
node:setPosition((i - 1) * 2, 100)
self:addChild(node)
end
end
function TestTimelinePerformance.restartCallback()
ccs.ArmatureDataManager:destroyInstance()
local newScene = TimelineTestScene.create()
newScene:addChild(restartTimelineTest())
cc.Director:getInstance():replaceScene(newScene)
end
function TestTimelinePerformance.create()
local layer = TestTimelinePerformance.extend(cc.Layer:create())
if nil ~= layer then
layer:createMenu()
layer:createToExtensionMenu()
layer:creatTitleAndSubTitle(timelineSceneIdx)
local function onNodeEvent(event)
if "enter" == event then
layer:onEnter()
end
end
layer:registerScriptHandler(onNodeEvent)
end
return layer
end
local actionlineSceneArr =
{
TestActionTimeline.create,
TestChangePlaySection.create,
TestTimelineFrameEvent.create,
TestTimelinePerformance.create,
}
function nextTimelineTest()
timelineSceneIdx = timelineSceneIdx + 1
timelineSceneIdx = timelineSceneIdx % table.getn(actionlineSceneArr)
if 0 == timelineSceneIdx then
timelineSceneIdx = table.getn(actionlineSceneArr)
end
return actionlineSceneArr[timelineSceneIdx]()
end
function backTimelineTest()
timelineSceneIdx = timelineSceneIdx - 1
if timelineSceneIdx <= 0 then
timelineSceneIdx = timelineSceneIdx + table.getn(actionlineSceneArr)
end
return actionlineSceneArr[timelineSceneIdx]()
end
function restartTimelineTest()
return actionlineSceneArr[timelineSceneIdx]()
end
function runCocoStudioActionTimelineTestScene()
local scene = TimelineTestScene.create()
scene:runThisTest()
cc.Director:getInstance():replaceScene(scene)
end

View File

@ -2,6 +2,7 @@ require "src/CocoStudioTest/CocoStudioGUITest/CocoStudioGUITest"
require "src/CocoStudioTest/CocoStudioSceneTest/CocoStudioSceneTest"
require "src/CocoStudioTest/CocoStudioArmatureTest/CocoStudioArmatureTest"
require "src/CocoStudioTest/CocoStudioUIEditorTest/CocoStudioUIEditorTest"
require "src/CocoStudioTest/CocoStudioActionTimelineTest/CocoStudioActionTimelineTest"
local LINE_SPACE = 40
local ITEM_TAG_BASIC = 1000
@ -35,6 +36,13 @@ local cocoStudioTestItemNames =
runCocoStudioUIEditorTestScene()
end
},
{
itemTitle = "CocoStudioActionTimelineTest",
testScene = function()
runCocoStudioActionTimelineTestScene()
end
},
}
local CocoStudioTestScene = class("CocoStudioTestScene")

@ -1 +1 @@
Subproject commit 82b174ad1c0f7a8af5af28e4ac6b8a61af2f1987
Subproject commit fb64d96c51450878a20e8ade9d36cc34c341c44f

View File

@ -30,7 +30,7 @@ headers = %(cocosdir)s/cocos/editor-support/cocostudio/CocoStudio.h
# what classes to produce code for. You can use regular expressions here. When testing the regular
# expression, it will be enclosed in "^$", like this: "^Menu*$".
classes = Armature ArmatureAnimation Skin Bone ArmatureDataManager \w+Data$ ActionManagerEx ComAudio ComController ComAttribute ComRender BatchNode SceneReader GUIReader ActionObject Tween DisplayManager
classes = Armature ArmatureAnimation Skin Bone ArmatureDataManager \w+Data$ ActionManagerEx ComAudio ComController ComAttribute ComRender BatchNode SceneReader GUIReader ActionObject Tween DisplayManager NodeReader ActionTimeline.* .*Frame$ Timeline
# what should we skip? in the format ClassName::[function function]
# ClassName is a regular expression, but will be used like this: "^ClassName$" functions are also
@ -52,7 +52,9 @@ skip = *::[^visit$ copyWith.* onEnter.* onExit.* ^description$ getObjectType .*
GUIReader::[storeFileDesignSize getFileDesignSize getParseCallBackMap getParseObjectMap],
ActionNode::[initWithDictionary],
ActionObject::[initWithDictionary],
BaseData::[copy subtract]
BaseData::[copy subtract],
NodeReader::[getInstance],
ActionTimelineCache::[getInstance]
rename_functions = GUIReader::[shareReader=getInstance purgeGUIReader=destroyInstance],
ActionManagerEx::[shareManager=getInstance purgeActionManager=destroyInstance],