mirror of https://github.com/axmolengine/axmol.git
179 lines
5.8 KiB
JavaScript
179 lines
5.8 KiB
JavaScript
//
|
|
// CocosBuilder definitions
|
|
//
|
|
|
|
cc.BuilderReader = cc.BuilderReader || {};
|
|
cc.BuilderReader._resourcePath = "";
|
|
|
|
var _ccbGlobalContext = this;
|
|
|
|
cc.BuilderReader.setResourcePath = function (rootPath) {
|
|
cc.BuilderReader._resourcePath = rootPath;
|
|
};
|
|
|
|
cc.BuilderReader.load = function(file, owner, parentSize)
|
|
{
|
|
// Load the node graph using the correct function
|
|
var reader = cc._Reader.create();
|
|
reader.setCCBRootPath(cc.BuilderReader._resourcePath);
|
|
|
|
var node;
|
|
|
|
if (parentSize)
|
|
{
|
|
node = reader.load(file, null, parentSize);
|
|
}
|
|
else
|
|
{
|
|
node = reader.load(file);
|
|
}
|
|
|
|
// Assign owner callbacks & member variables
|
|
if (owner)
|
|
{
|
|
// Callbacks
|
|
var ownerCallbackNames = reader.getOwnerCallbackNames();
|
|
var ownerCallbackNodes = reader.getOwnerCallbackNodes();
|
|
|
|
for (var i = 0; i < ownerCallbackNames.length; i++)
|
|
{
|
|
var callbackName = ownerCallbackNames[i];
|
|
var callbackNode = ownerCallbackNodes[i];
|
|
|
|
if (owner[callbackName] === undefined)
|
|
{
|
|
cc.log("Warning: " + "owner." + callbackName + " is undefined.");
|
|
}
|
|
else
|
|
{
|
|
if(callbackNode instanceof cc.ControlButton)
|
|
{
|
|
var ownerCallbackControlEvents = reader.getOwnerCallbackControlEvents();
|
|
callbackNode.addTargetWithActionForControlEvents(owner, owner[callbackName], ownerCallbackControlEvents[i]);
|
|
}
|
|
else
|
|
{
|
|
callbackNode.setCallback(owner[callbackName], owner);
|
|
}
|
|
}
|
|
}
|
|
|
|
// Variables
|
|
var ownerOutletNames = reader.getOwnerOutletNames();
|
|
var ownerOutletNodes = reader.getOwnerOutletNodes();
|
|
|
|
for (var i = 0; i < ownerOutletNames.length; i++)
|
|
{
|
|
var outletName = ownerOutletNames[i];
|
|
var outletNode = ownerOutletNodes[i];
|
|
|
|
owner[outletName] = outletNode;
|
|
}
|
|
}
|
|
|
|
var nodesWithAnimationManagers = reader.getNodesWithAnimationManagers();
|
|
var animationManagersForNodes = reader.getAnimationManagersForNodes();
|
|
|
|
// Attach animation managers to nodes and assign root node callbacks and member variables
|
|
for (var i = 0; i < nodesWithAnimationManagers.length; i++)
|
|
{
|
|
var innerNode = nodesWithAnimationManagers[i];
|
|
var animationManager = animationManagersForNodes[i];
|
|
|
|
innerNode.animationManager = animationManager;
|
|
|
|
var documentControllerName = animationManager.getDocumentControllerName();
|
|
if (!documentControllerName) continue;
|
|
|
|
// Create a document controller
|
|
var controller = new _ccbGlobalContext[documentControllerName]();
|
|
controller.controllerName = documentControllerName;
|
|
|
|
innerNode.controller = controller;
|
|
controller.rootNode = innerNode;
|
|
|
|
// Callbacks
|
|
var documentCallbackNames = animationManager.getDocumentCallbackNames();
|
|
var documentCallbackNodes = animationManager.getDocumentCallbackNodes();
|
|
|
|
for (var j = 0; j < documentCallbackNames.length; j++)
|
|
{
|
|
var callbackName = documentCallbackNames[j];
|
|
var callbackNode = documentCallbackNodes[j];
|
|
|
|
if (controller[callbackName] === undefined)
|
|
{
|
|
cc.log("Warning: " + documentControllerName + "." + callbackName + " is undefined.");
|
|
}
|
|
else
|
|
{
|
|
if(callbackNode instanceof cc.ControlButton)
|
|
{
|
|
var documentCallbackControlEvents = animationManager.getDocumentCallbackControlEvents();
|
|
callbackNode.addTargetWithActionForControlEvents(controller, controller[callbackName], documentCallbackControlEvents[j]);
|
|
}
|
|
else
|
|
{
|
|
callbackNode.setCallback(controller[callbackName], controller);
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
// Variables
|
|
var documentOutletNames = animationManager.getDocumentOutletNames();
|
|
var documentOutletNodes = animationManager.getDocumentOutletNodes();
|
|
|
|
for (var j = 0; j < documentOutletNames.length; j++)
|
|
{
|
|
var outletName = documentOutletNames[j];
|
|
var outletNode = documentOutletNodes[j];
|
|
|
|
controller[outletName] = outletNode;
|
|
}
|
|
|
|
if (typeof(controller.onDidLoadFromCCB) == "function")
|
|
{
|
|
controller.onDidLoadFromCCB();
|
|
}
|
|
|
|
// Setup timeline callbacks
|
|
var keyframeCallbacks = animationManager.getKeyframeCallbacks();
|
|
for (var j = 0; j < keyframeCallbacks.length; j++)
|
|
{
|
|
var callbackSplit = keyframeCallbacks[j].split(":");
|
|
var callbackType = callbackSplit[0];
|
|
var callbackName = callbackSplit[1];
|
|
|
|
if (callbackType == 1) // Document callback
|
|
{
|
|
var callfunc = cc.CallFunc.create(controller[callbackName], controller);
|
|
animationManager.setCallFunc(callfunc, keyframeCallbacks[j]);
|
|
}
|
|
else if (callbackType == 2 && owner) // Owner callback
|
|
{
|
|
var callfunc = cc.CallFunc.create(owner[callbackName], owner);
|
|
animationManager.setCallFunc(callfunc, keyframeCallbacks[j]);
|
|
}
|
|
}
|
|
|
|
// Start animation
|
|
var autoPlaySeqId = animationManager.getAutoPlaySequenceId();
|
|
if (autoPlaySeqId != -1)
|
|
{
|
|
animationManager.runAnimationsForSequenceIdTweenDuration(autoPlaySeqId, 0);
|
|
}
|
|
}
|
|
|
|
return node;
|
|
};
|
|
|
|
cc.BuilderReader.loadAsScene = function(file, owner, parentSize)
|
|
{
|
|
var node = cc.BuilderReader.load(file, owner, parentSize);
|
|
var scene = cc.Scene.create();
|
|
scene.addChild( node );
|
|
|
|
return scene;
|
|
};
|