CCBReaderLoad.lua 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. if nil == cc.CCBReader then
  2. return
  3. end
  4. ccb = ccb or {}
  5. function CCBReaderLoad(strFilePath,proxy,owner)
  6. if nil == proxy then
  7. return nil
  8. end
  9. local ccbReader = proxy:createCCBReader()
  10. local node = ccbReader:load(strFilePath)
  11. local rootName = ""
  12. --owner set in readCCBFromFile is proxy
  13. if nil ~= owner then
  14. --Callbacks
  15. local ownerCallbackNames = ccbReader:getOwnerCallbackNames()
  16. local ownerCallbackNodes = ccbReader:getOwnerCallbackNodes()
  17. local ownerCallbackControlEvents = ccbReader:getOwnerCallbackControlEvents()
  18. local i = 1
  19. for i = 1,table.getn(ownerCallbackNames) do
  20. local callbackName = ownerCallbackNames[i]
  21. local callbackNode = tolua.cast(ownerCallbackNodes[i],"cc.Node")
  22. if "function" == type(owner[callbackName]) then
  23. proxy:setCallback(callbackNode, owner[callbackName], ownerCallbackControlEvents[i])
  24. else
  25. print("Warning: Cannot find owner's lua function:" .. ":" .. callbackName .. " for ownerVar selector")
  26. end
  27. end
  28. --Variables
  29. local ownerOutletNames = ccbReader:getOwnerOutletNames()
  30. local ownerOutletNodes = ccbReader:getOwnerOutletNodes()
  31. for i = 1, table.getn(ownerOutletNames) do
  32. local outletName = ownerOutletNames[i]
  33. local outletNode = tolua.cast(ownerOutletNodes[i],"cc.Node")
  34. owner[outletName] = outletNode
  35. end
  36. end
  37. local nodesWithAnimationManagers = ccbReader:getNodesWithAnimationManagers()
  38. local animationManagersForNodes = ccbReader:getAnimationManagersForNodes()
  39. for i = 1 , table.getn(nodesWithAnimationManagers) do
  40. local innerNode = tolua.cast(nodesWithAnimationManagers[i], "cc.Node")
  41. local animationManager = tolua.cast(animationManagersForNodes[i], "cc.CCBAnimationManager")
  42. local documentControllerName = animationManager:getDocumentControllerName()
  43. if "" == documentControllerName then
  44. end
  45. if nil ~= ccb[documentControllerName] then
  46. ccb[documentControllerName]["mAnimationManager"] = animationManager
  47. end
  48. --Callbacks
  49. local documentCallbackNames = animationManager:getDocumentCallbackNames()
  50. local documentCallbackNodes = animationManager:getDocumentCallbackNodes()
  51. local documentCallbackControlEvents = animationManager:getDocumentCallbackControlEvents()
  52. for i = 1,table.getn(documentCallbackNames) do
  53. local callbackName = documentCallbackNames[i]
  54. local callbackNode = tolua.cast(documentCallbackNodes[i],"cc.Node")
  55. if "" ~= documentControllerName and nil ~= ccb[documentControllerName] then
  56. if "function" == type(ccb[documentControllerName][callbackName]) then
  57. proxy:setCallback(callbackNode, ccb[documentControllerName][callbackName], documentCallbackControlEvents[i])
  58. else
  59. print("Warning: Cannot found lua function [" .. documentControllerName .. ":" .. callbackName .. "] for docRoot selector")
  60. end
  61. end
  62. end
  63. --Variables
  64. local documentOutletNames = animationManager:getDocumentOutletNames()
  65. local documentOutletNodes = animationManager:getDocumentOutletNodes()
  66. for i = 1, table.getn(documentOutletNames) do
  67. local outletName = documentOutletNames[i]
  68. local outletNode = tolua.cast(documentOutletNodes[i],"cc.Node")
  69. if nil ~= ccb[documentControllerName] then
  70. ccb[documentControllerName][outletName] = tolua.cast(outletNode, proxy:getNodeTypeName(outletNode))
  71. end
  72. end
  73. --[[
  74. if (typeof(controller.onDidLoadFromCCB) == "function")
  75. controller.onDidLoadFromCCB();
  76. ]]--
  77. --Setup timeline callbacks
  78. local keyframeCallbacks = animationManager:getKeyframeCallbacks()
  79. for i = 1 , table.getn(keyframeCallbacks) do
  80. local callbackCombine = keyframeCallbacks[i]
  81. local beignIndex,endIndex = string.find(callbackCombine,":")
  82. local callbackType = tonumber(string.sub(callbackCombine,1,beignIndex - 1))
  83. local callbackName = string.sub(callbackCombine,endIndex + 1, -1)
  84. --Document callback
  85. if 1 == callbackType and nil ~= ccb[documentControllerName] then
  86. local callfunc = cc.CallFunc:create(ccb[documentControllerName][callbackName])
  87. animationManager:setCallFuncForLuaCallbackNamed(callfunc, callbackCombine);
  88. elseif 2 == callbackType and nil ~= owner then --Owner callback
  89. local callfunc = cc.CallFunc:create(owner[callbackName])--need check
  90. animationManager:setCallFuncForLuaCallbackNamed(callfunc, callbackCombine)
  91. end
  92. end
  93. --start animation
  94. local autoPlaySeqId = animationManager:getAutoPlaySequenceId()
  95. if -1 ~= autoPlaySeqId then
  96. animationManager:runAnimationsForSequenceIdTweenDuration(autoPlaySeqId, 0)
  97. end
  98. end
  99. return node
  100. end
  101. local function CCBuilderReaderLoad(strFilePath,proxy,owner)
  102. print("\n********** \n".."CCBuilderReaderLoad(strFilePath,proxy,owner)".." was deprecated please use ".. "CCBReaderLoad(strFilePath,proxy,owner)" .. " instead.\n**********")
  103. return CCBReaderLoad(strFilePath,proxy,owner)
  104. end
  105. rawset(_G,"CCBuilderReaderLoad",CCBuilderReaderLoad)