axmol/cocos/scripting/js-bindings/script/studio/parsers/timelineParser-2.x.js

1550 lines
51 KiB
JavaScript

/****************************************************************************
Copyright (c) 2013-2014 Chukong Technologies Inc.
http://www.cocos2d-x.org
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
****************************************************************************/
(function(load, baseParser){
var DEBUG = false;
var Parser = baseParser.extend({
parse: function(file, json, path){
var resourcePath;
if(path !== undefined)
resourcePath = path;
else
resourcePath = this._dirname(file);
this.pretreatment(json, resourcePath, file);
var node = this.parseNode(this.getNodeJson(json), resourcePath);
this.deferred(json, resourcePath, node, file);
return node;
},
getNodeJson: function(json){
return json["Content"]["Content"]["ObjectData"];
},
getClass: function(json){
return json["ctype"];
}
});
var parser = new Parser();
var getParam = function(value, dValue){
if(value === undefined)
return dValue;
else
return value;
};
//////////
// NODE //
//////////
parser.generalAttributes = function(node, json){
if(json["Name"] != null)
node.setName(json["Name"]);
var position = json["Position"];
if(position != null && (position["X"] != null || position["Y"] != null))
node.setPosition(cc.p(position["X"]||0, position["Y"]||0));
var scale = json["Scale"];
if(scale != null){
if(scale["ScaleX"] != null)
node.setScaleX(scale["ScaleX"]);
if(scale["ScaleY"] != null)
node.setScaleY(scale["ScaleY"]);
}
var rotationSkewX = json["RotationSkewX"];
if (rotationSkewX != null)
node.setRotationX(rotationSkewX);
var rotationSkewY = json["RotationSkewY"];
if (json["RotationSkewY"] != null)
node.setRotationY(rotationSkewY);
var anchor = json["AnchorPoint"];
if(anchor != null){
if(anchor["ScaleX"] == null)
anchor["ScaleX"] = 0;
if(anchor["ScaleY"] == null)
anchor["ScaleY"] = 0;
if(anchor["ScaleX"] != 0.5 || anchor["ScaleY"] != 0.5)
node.setAnchorPoint(cc.p(anchor["ScaleX"], anchor["ScaleY"]));
}
if (json["ZOrder"] != null)
node.setLocalZOrder(json["ZOrder"]);
var visible = getParam(json["VisibleForFrame"], true);
node.setVisible(visible);
setContentSize(node, json["Size"]);
if (json["Alpha"] != null)
node.setOpacity(json["Alpha"]);
node.setTag(json["Tag"] || 0);
var actionTag = json["ActionTag"] || 0;
var extensionData = new ccs.ObjectExtensionData();
var customProperty = json["UserData"];
if(customProperty !== undefined)
extensionData.setCustomProperty(customProperty);
extensionData.setActionTag(actionTag);
node.setUserObject(extensionData);
node.setCascadeColorEnabled(true);
node.setCascadeOpacityEnabled(true);
setLayoutComponent(node, json);
};
parser.parseChild = function(node, children, resourcePath){
if(!node || !children) return;
for (var i = 0; i < children.length; i++) {
var child = this.parseNode(children[i], resourcePath);
if(child){
if(node instanceof ccui.PageView){
if(child instanceof ccui.Layout)
node.addPage(child);
} else {
if(node instanceof ccui.ListView){
if(child instanceof ccui.Widget)
node.pushBackCustomItem(child);
} else {
if(!(node instanceof ccui.Layout) && child instanceof ccui.Widget) {
if(child.getPositionType() === ccui.Widget.POSITION_PERCENT) {
var position = child.getPositionPercent();
var anchor = node.getAnchorPoint();
child.setPositionPercent(cc.p(position.x + anchor.x, position.y + anchor.y));
}
}
node.addChild(child);
}
}
}
}
};
/**
* SingleNode
* @param json
* @returns {cc.Node}
*/
parser.initSingleNode = function(json){
var node = new cc.Node();
this.generalAttributes(node, json);
var color = json["CColor"];
if(color != null)
node.setColor(getColor(color));
return node;
};
/**
* Sprite
* @param json
* @param resourcePath
* @returns {cc.Sprite}
*/
parser.initSprite = function(json, resourcePath){
var node = new cc.Sprite();
loadTexture(json["FileData"], resourcePath, function(path, type){
if(type === 0)
node.setTexture(path);
else if(type === 1){
var spriteFrame = cc.spriteFrameCache.getSpriteFrame(path);
if(spriteFrame)
node.setSpriteFrame(spriteFrame);
}
});
var blendData = json["BlendFunc"];
if(json["BlendFunc"]) {
var blendFunc = cc.BlendFunc.ALPHA_PREMULTIPLIED;
if (blendData["Src"] !== undefined)
blendFunc.src = blendData["Src"];
if (blendData["Dst"] !== undefined)
blendFunc.dst = blendData["Dst"];
node.setBlendFunc(blendFunc);
}
if(json["FlipX"])
node.setFlippedX(true);
if(json["FlipY"])
node.setFlippedY(true);
this.generalAttributes(node, json);
var color = json["CColor"];
if(color != null)
node.setColor(getColor(color));
return node;
};
/**
* Particle
* @param json
* @param resourcePath
* @returns {*}
*/
parser.initParticle = function(json, resourcePath){
var node,
self = this;
loadTexture(json["FileData"], resourcePath, function(path, type){
node = new cc.ParticleSystem(path);
self.generalAttributes(node, json);
node.setPositionType(cc.ParticleSystem.TYPE_GROUPED);
!cc.sys.isNative && node.setDrawMode(cc.ParticleSystem.TEXTURE_MODE);
var blendData = json["BlendFunc"];
if(json["BlendFunc"]){
var blendFunc = cc.BlendFunc.ALPHA_PREMULTIPLIED;
if(blendData["Src"] !== undefined)
blendFunc.src = blendData["Src"];
if(blendData["Dst"] !== undefined)
blendFunc.dst = blendData["Dst"];
node.setBlendFunc(blendFunc);
}
});
return node;
};
////////////
// WIDGET //
////////////
parser.widgetAttributes = function (widget, json, enableContent) {
widget.setCascadeColorEnabled(true);
widget.setCascadeOpacityEnabled(true);
widget.setUnifySizeEnabled(false);
//widget.setLayoutComponentEnabled(true);
widget.ignoreContentAdaptWithSize(false);
!enableContent && setContentSize(widget, json["Size"]);
var name = json["Name"];
if (name)
widget.setName(name);
var actionTag = json["ActionTag"] || 0;
widget.setActionTag(actionTag);
var extensionData = new ccs.ObjectExtensionData();
var customProperty = json["UserData"];
if(customProperty !== undefined)
extensionData.setCustomProperty(customProperty);
extensionData.setActionTag(actionTag);
widget.setUserObject(extensionData);
var rotationSkewX = json["RotationSkewX"];
if (rotationSkewX)
widget.setRotationX(rotationSkewX);
var rotationSkewY = json["RotationSkewY"];
if (rotationSkewY)
widget.setRotationY(rotationSkewY);
//var rotation = json["Rotation"];
var flipX = json["FlipX"];
if (flipX)
widget.setFlippedX(true);
var flipY = json["FlipY"];
if (flipY)
widget.setFlippedY(true);
var zOrder = json["zOrder"];
if (zOrder != null)
widget.setLocalZOrder(zOrder);
//var visible = json["Visible"];
var visible = getParam(json["VisibleForFrame"], true);
widget.setVisible(visible);
var alpha = json["Alpha"];
if (alpha != null)
widget.setOpacity(alpha);
widget.setTag(json["Tag"] || 0);
var touchEnabled = json["TouchEnable"] || false;
widget.setTouchEnabled(touchEnabled);
// -- var frameEvent = json["FrameEvent"];
var callBackType = json["CallBackType"];
if (callBackType != null)
widget.setCallbackType(callBackType);
var callBackName = json["CallBackName"];
if (callBackName)
widget.setCallbackName(callBackName);
var position = json["Position"];
if (position != null)
widget.setPosition(position["X"] || 0, position["Y"] || 0);
var scale = json["Scale"];
if (scale != null) {
var scaleX = getParam(scale["ScaleX"], 1);
var scaleY = getParam(scale["ScaleY"], 1);
widget.setScaleX(scaleX);
widget.setScaleY(scaleY);
}
var anchorPoint = json["AnchorPoint"];
if (anchorPoint != null)
widget.setAnchorPoint(anchorPoint["ScaleX"] || 0, anchorPoint["ScaleY"] || 0);
var color = json["CColor"];
if (color != null)
widget.setColor(getColor(color));
setLayoutComponent(widget, json);
bindCallback(widget, json);
};
var bindCallback = function(widget, json){
var callBackType = json["CallBackType"];
var callBackName = json["CallBackName"];
var callBack = function(e){
if(typeof widget[callBackName] === "function")
widget[callBackName](e);
};
if(callBackType === "Click"){
widget.addClickEventListener(callBack);
}else if(callBackType === "Touch"){
widget.addTouchEventListener(callBack);
}else if(callBackType === "Event"){
widget.addCCSEventListener(callBack);
}
};
var setLayoutComponent = function(widget, json){
var layoutComponent = ccui.LayoutComponent.bindLayoutComponent(widget);
if(!layoutComponent)
return;
var positionXPercentEnabled = json["PositionPercentXEnable"] || json["PositionPercentXEnabled"] || false;
var positionYPercentEnabled = json["PositionPercentYEnable"] || json["PositionPercentYEnabled"] || false;
var positionXPercent = 0,
positionYPercent = 0,
PrePosition = json["PrePosition"];
if (PrePosition != null) {
positionXPercent = PrePosition["X"] || 0;
positionYPercent = PrePosition["Y"] || 0;
}
var sizeXPercentEnable = json["PercentWidthEnable"] || json["PercentWidthEnabled"] || false;
var sizeYPercentEnable = json["PercentHeightEnable"]|| json["PercentHeightEnabled"] || false;
var sizeXPercent = 0,
sizeYPercent = 0,
PreSize = json["PreSize"];
if (PrePosition != null) {
sizeXPercent = PreSize["X"] || 0;
sizeYPercent = PreSize["Y"] || 0;
}
var stretchHorizontalEnabled = json["StretchWidthEnable"] || false;
var stretchVerticalEnabled = json["StretchHeightEnable"] || false;
var horizontalEdge = json["HorizontalEdge"];// = ccui.LayoutComponent.horizontalEdge.LEFT;
var verticalEdge = json["VerticalEdge"]; // = ccui.LayoutComponent.verticalEdge.TOP;
var leftMargin = json["LeftMargin"] || 0;
var rightMargin = json["RightMargin"] || 0;
var topMargin = json["TopMargin"] || 0;
var bottomMargin = json["BottomMargin"] || 0;
layoutComponent.setPositionPercentXEnabled(positionXPercentEnabled);
layoutComponent.setPositionPercentYEnabled(positionYPercentEnabled);
layoutComponent.setPositionPercentX(positionXPercent);
layoutComponent.setPositionPercentY(positionYPercent);
layoutComponent.setPercentWidthEnabled(sizeXPercentEnable);
layoutComponent.setPercentHeightEnabled(sizeYPercentEnable);
layoutComponent.setPercentWidth(sizeXPercent);
layoutComponent.setPercentHeight(sizeYPercent);
layoutComponent.setPercentWidthEnabled(sizeXPercentEnable || sizeYPercentEnable);
layoutComponent.setStretchWidthEnabled(stretchHorizontalEnabled);
layoutComponent.setStretchHeightEnabled(stretchVerticalEnabled);
var horizontalEdgeType = ccui.LayoutComponent.horizontalEdge.NONE;
if (horizontalEdge === "LeftEdge") {
horizontalEdgeType = ccui.LayoutComponent.horizontalEdge.LEFT;
} else if (horizontalEdge === "RightEdge") {
horizontalEdgeType = ccui.LayoutComponent.horizontalEdge.RIGHT;
} else if (horizontalEdge === "BothEdge") {
horizontalEdgeType = ccui.LayoutComponent.horizontalEdge.CENTER;
}
layoutComponent.setHorizontalEdge(horizontalEdgeType);
var verticalEdgeType = ccui.LayoutComponent.verticalEdge.NONE;
if (verticalEdge === "TopEdge") {
verticalEdgeType = ccui.LayoutComponent.verticalEdge.TOP;
} else if (verticalEdge === "BottomEdge") {
verticalEdgeType = ccui.LayoutComponent.verticalEdge.BOTTOM;
} else if (verticalEdge === "BothEdge") {
verticalEdgeType = ccui.LayoutComponent.verticalEdge.CENTER;
}
layoutComponent.setVerticalEdge(verticalEdgeType);
layoutComponent.setTopMargin(topMargin);
layoutComponent.setBottomMargin(bottomMargin);
layoutComponent.setLeftMargin(leftMargin);
layoutComponent.setRightMargin(rightMargin);
layoutComponent.setVerticalEdge(verticalEdgeType);
layoutComponent.setTopMargin(topMargin);
layoutComponent.setBottomMargin(bottomMargin);
layoutComponent.setLeftMargin(leftMargin);
layoutComponent.setRightMargin(rightMargin);
};
var setLayoutBackground = function(layout, single, first, end){
if( layout.getBackGroundColorType() === 2 ){
first = first || {};
end = end || {};
layout.setBackGroundColor(getColor(first), getColor(end));
}else{
single = single || {};
layout.setBackGroundColor(getColor(single));
}
};
var setLayoutBackgroundVector = function(widget, vector){
var x = vector["ScaleX"] || 0;
var y = vector["ScaleY"] || 0;
widget.setBackGroundColorVector(cc.p(x, y));
};
/**
* Layout
* @param json
* @param resourcePath
* @returns {ccui.Layout}
*/
parser.initPanel = function(json, resourcePath){
var widget = new ccui.Layout();
this.widgetAttributes(widget, json);
var clipEnabled = json["ClipAble"];
if(clipEnabled != null)
widget.setClippingEnabled(clipEnabled);
var colorType = getParam(json["ComboBoxIndex"], 0);
widget.setBackGroundColorType(colorType);
var bgColorOpacity = getParam(json["BackColorAlpha"], 255);
if(bgColorOpacity != null)
widget.setBackGroundColorOpacity(bgColorOpacity);
var backGroundScale9Enabled = json["Scale9Enable"];
if(backGroundScale9Enabled != null)
widget.setBackGroundImageScale9Enabled(backGroundScale9Enabled);
var opacity = getParam(json["Alpha"], 255);
widget.setOpacity(opacity);
loadTexture(json["FileData"], resourcePath, function(path, type){
widget.setBackGroundImage(path, type);
});
if(backGroundScale9Enabled){
var scale9OriginX = json["Scale9OriginX"] || 0;
var scale9OriginY = json["Scale9OriginY"] || 0;
var scale9Width = json["Scale9Width"] || 0;
var scale9Height = json["Scale9Height"] || 0;
widget.setBackGroundImageCapInsets(cc.rect(
scale9OriginX, scale9OriginY, scale9Width, scale9Height
));
setContentSize(widget, json["Size"]);
}else{
if (!widget.isIgnoreContentAdaptWithSize()){
setContentSize(widget, json["Size"]);
}
}
setLayoutBackground(widget, json["SingleColor"], json["FirstColor"], json["EndColor"]);
setLayoutBackgroundVector(widget, json["ColorVector"]);
return widget;
};
/**
* Text
* @param json
* @param resourcePath
*/
parser.initText = function(json, resourcePath){
var widget = new ccui.Text();
var touchScaleEnabled = json["TouchScaleChangeAble"];
if(touchScaleEnabled != null)
widget.setTouchScaleChangeEnabled(touchScaleEnabled);
var text = json["LabelText"];
if(text != null)
widget.setString(text);
var fontSize = json["FontSize"];
if(fontSize != null)
widget.setFontSize(fontSize);
var fontName = json["FontName"];
if(fontName != null)
widget.setFontName(fontName);
var areaWidth = json["AreaWidth"];
var areaHeight = json["areaHeight"];
if(areaWidth && areaHeight)
widget.setTextAreaSize(cc.size(areaWidth, areaHeight));
var h_alignment = json["HorizontalAlignmentType"] || "HT_Left";
switch(h_alignment){
case "HT_Right":
h_alignment = 2; break;
case "HT_Center":
h_alignment = 1; break;
case "HT_Left":
default:
h_alignment = 0;
}
widget.setTextHorizontalAlignment(h_alignment);
var v_alignment = json["VerticalAlignmentType"] || "VT_Top";
switch(v_alignment){
case "VT_Bottom":
v_alignment = 2; break;
case "VT_Center":
v_alignment = 1; break;
case "VT_Top":
default:
v_alignment = 0;
}
widget.setTextVerticalAlignment(v_alignment);
var fontResource = json["FontResource"];
if(fontResource != null){
var path = fontResource["Path"];
//resoutceType = fontResource["Type"];
if(path != null){
if (cc.sys.isNative) {
fontName = cc.path.join(cc.loader.resPath, resourcePath, path);
} else {
fontName = path.match(/([^\/]+)\.(\S+)/);
fontName = fontName ? fontName[1] : "";
}
widget.setFontName(fontName);
}
}
if(json["OutlineEnabled"] && json["OutlineColor"] && widget.enableOutline)
widget.enableOutline(getColor(json["OutlineColor"]), getParam(json["OutlineSize"], 1));
if(json["ShadowEnabled"] && json["ShadowColor"] && widget.enableShadow)
widget.enableShadow(
getColor(json["ShadowColor"]),
cc.size(getParam(json["ShadowOffsetX"], 2), getParam(json["ShadowOffsetY"], -2)),
json["ShadowBlurRadius"] || 0
);
var isCustomSize = json["IsCustomSize"];
if(isCustomSize != null)
widget.ignoreContentAdaptWithSize(!isCustomSize);
widget.setUnifySizeEnabled(false);
var color = json["CColor"];
json["CColor"] = null;
widget.setTextColor(getColor(color));
this.widgetAttributes(widget, json, widget.isIgnoreContentAdaptWithSize());
json["CColor"] = color;
return widget;
};
/**
* Button
* @param json
* @param resourcePath
*/
parser.initButton = function(json, resourcePath){
var widget = new ccui.Button();
loadTexture(json["NormalFileData"], resourcePath, function(path, type){
widget.loadTextureNormal(path, type);
});
loadTexture(json["PressedFileData"], resourcePath, function(path, type){
widget.loadTexturePressed(path, type);
});
loadTexture(json["DisabledFileData"], resourcePath, function(path, type){
widget.loadTextureDisabled(path, type);
});
var scale9Enabled = getParam(json["Scale9Enable"], false);
if(scale9Enabled) {
widget.setScale9Enabled(scale9Enabled);
}
var text = json["ButtonText"];
if(text != null)
widget.setTitleText(text);
var fontSize = json["FontSize"];
if(fontSize != null)
widget.setTitleFontSize(fontSize);
var fontName = json["FontName"];
if(fontName != null)
widget.setTitleFontName(fontName);
var textColor = json["TextColor"];
if(textColor != null)
widget.setTitleColor(getColor(textColor));
var displaystate = getParam(json["DisplayState"], true);
widget.setBright(displaystate);
widget.setEnabled(displaystate);
var fontResource = json["FontResource"];
if(fontResource != null){
var path = fontResource["Path"];
//resoutceType = fontResource["Type"];
if(path != null){
if (cc.sys.isNative) {
fontName = cc.path.join(cc.loader.resPath, resourcePath, path);
} else {
fontName = path.match(/([^\/]+)\.(\S+)/);
fontName = fontName ? fontName[1] : "";
}
widget.setTitleFontName(fontName);
}
}
var label = widget.getTitleRenderer();
if(label && json["ShadowEnabled"] && json["ShadowColor"] && label.enableShadow){
label.enableShadow(
getColor(json["ShadowColor"]),
cc.size(getParam(json["ShadowOffsetX"], 2), getParam(json["ShadowOffsetY"], -2)),
json["ShadowBlurRadius"] || 0
);
}
if(label && json["OutlineEnabled"] && json["OutlineColor"] && label.enableStroke)
label.enableStroke(getColor(json["OutlineColor"]), getParam(json["OutlineSize"], 1));
this.widgetAttributes(widget, json);
if(scale9Enabled) {
widget.setUnifySizeEnabled(false);
widget.ignoreContentAdaptWithSize(false);
var capInsets = cc.rect(
json["Scale9OriginX"] || 0,
json["Scale9OriginY"] || 0,
json["Scale9Width"] || 0,
json["Scale9Height"] || 0
);
widget.setCapInsets(capInsets);
}
setContentSize(widget, json["Size"]);
return widget;
};
/**
* CheckBox
* @param json
* @param resourcePath
*/
parser.initCheckBox = function(json, resourcePath){
var widget = new ccui.CheckBox();
this.widgetAttributes(widget, json);
var dataList = [
{name: "NormalBackFileData", handle: widget.loadTextureBackGround},
{name: "PressedBackFileData", handle: widget.loadTextureBackGroundSelected},
{name: "NodeNormalFileData", handle: widget.loadTextureFrontCross},
{name: "DisableBackFileData", handle: widget.loadTextureBackGroundDisabled},
{name: "NodeDisableFileData", handle: widget.loadTextureFrontCrossDisabled}
];
dataList.forEach(function(item){
loadTexture(json[item.name], resourcePath, function(path, type){
item.handle.call(widget, path, type);
});
});
var selectedState = getParam(json["CheckedState"], false);
widget.setSelected(selectedState);
var displaystate = getParam(json["DisplayState"], true);
widget.setBright(displaystate);
widget.setEnabled(displaystate);
return widget;
};
/**
* ScrollView
* @param json
* @param resourcePath
*/
parser.initScrollView = function(json, resourcePath){
var widget = new ccui.ScrollView();
this.widgetAttributes(widget, json);
loadTexture(json["FileData"], resourcePath, function(path, type){
widget.setBackGroundImage(path, type);
});
var clipEnabled = json["ClipAble"];
widget.setClippingEnabled(clipEnabled);
var colorType = getParam(json["ComboBoxIndex"], 0);
widget.setBackGroundColorType(colorType);
var bgColorOpacity = json["BackColorAlpha"];
if(bgColorOpacity != null)
widget.setBackGroundColorOpacity(bgColorOpacity);
var backGroundScale9Enabled = json["Scale9Enable"];
if(backGroundScale9Enabled){
widget.setBackGroundImageScale9Enabled(true);
var scale9OriginX = json["Scale9OriginX"] || 0;
var scale9OriginY = json["Scale9OriginY"] || 0;
var scale9Width = json["Scale9Width"] || 0;
var scale9Height = json["Scale9Height"] || 0;
widget.setBackGroundImageCapInsets(cc.rect(
scale9OriginX, scale9OriginY, scale9Width, scale9Height
));
setContentSize(widget, json["Size"]);
}else if(!widget.isIgnoreContentAdaptWithSize()){
setContentSize(widget, json["Size"]);
}
setLayoutBackground(widget, json["SingleColor"], json["FirstColor"], json["EndColor"]);
setLayoutBackgroundVector(widget, json["ColorVector"]);
var innerNodeSize = json["InnerNodeSize"];
var innerSize = cc.size(
innerNodeSize["Width"] || 0,
innerNodeSize["Height"] || 0
);
widget.setInnerContainerSize(innerSize);
var direction = 0;
if(json["ScrollDirectionType"] === "Vertical") direction = 1;
if(json["ScrollDirectionType"] === "Horizontal") direction = 2;
if(json["ScrollDirectionType"] === "Vertical_Horizontal") direction = 3;
widget.setDirection(direction);
var bounceEnabled = getParam(json["IsBounceEnabled"], false);
widget.setBounceEnabled(bounceEnabled);
return widget;
};
/**
* ImageView
* @param json
* @param resourcePath
*/
parser.initImageView = function(json, resourcePath){
var widget = new ccui.ImageView();
loadTexture(json["FileData"], resourcePath, function(path, type){
widget.loadTexture(path, type);
});
loadTexture(json["ImageFileData"], resourcePath, function(path, type){
widget.loadTexture(path, type);
});
var scale9Enabled = json["Scale9Enable"];
if(scale9Enabled){
widget.setScale9Enabled(true);
widget.setUnifySizeEnabled(false);
widget.ignoreContentAdaptWithSize(false);
var scale9OriginX = json["Scale9OriginX"] || 0;
var scale9OriginY = json["Scale9OriginY"] || 0;
var scale9Width = json["Scale9Width"] || 0;
var scale9Height = json["Scale9Height"] || 0;
widget.setCapInsets(cc.rect(
scale9OriginX ,
scale9OriginY,
scale9Width,
scale9Height
));
} else
setContentSize(widget, json["Size"]);
this.widgetAttributes(widget, json);
return widget;
};
/**
* LoadingBar
* @param json
* @param resourcePath
* @returns {ccui.LoadingBar}
*/
parser.initLoadingBar = function(json, resourcePath){
var widget = new ccui.LoadingBar();
this.widgetAttributes(widget, json);
loadTexture(json["ImageFileData"], resourcePath, function(path, type){
widget.loadTexture(path, type);
});
var direction = json["ProgressType"] === "Right_To_Left" ? 1 : 0;
widget.setDirection(direction);
var percent = getParam(json["ProgressInfo"], 80);
if(percent != null)
widget.setPercent(percent);
return widget;
};
/**
* Slider
* @param json
* @param resourcePath
*/
parser.initSlider = function(json, resourcePath){
var widget = new ccui.Slider();
var loader = cc.loader;
this.widgetAttributes(widget, json);
var textureList = [
{name: "BackGroundData", handle: widget.loadBarTexture},
{name: "BallNormalData", handle: widget.loadSlidBallTextureNormal},
{name: "BallPressedData", handle: widget.loadSlidBallTexturePressed},
{name: "BallDisabledData", handle: widget.loadSlidBallTextureDisabled},
{name: "ProgressBarData", handle: widget.loadProgressBarTexture}
];
textureList.forEach(function(item){
loadTexture(json[item.name], resourcePath, function(path, type){
item.handle.call(widget, path, type);
});
});
var percent = json["PercentInfo"] || 0;
widget.setPercent(percent);
var displaystate = getParam(json["DisplayState"], true);
widget.setBright(displaystate);
widget.setEnabled(displaystate);
return widget;
};
/**
* PageView
* @param json
* @param resourcePath
*/
parser.initPageView = function(json, resourcePath){
var widget = new ccui.PageView();
this.widgetAttributes(widget, json);
loadTexture(json["FileData"], resourcePath, function(path, type){
widget.setBackGroundImage(path, type);
});
var clipEnabled = json["ClipAble"] || false;
widget.setClippingEnabled(clipEnabled);
var backGroundScale9Enabled = json["Scale9Enable"];
if(backGroundScale9Enabled){
widget.setBackGroundImageScale9Enabled(true);
var scale9OriginX = json["Scale9OriginX"] || 0;
var scale9OriginY = json["Scale9OriginY"] || 0;
var scale9Width = json["Scale9Width"] || 0;
var scale9Height = json["Scale9Height"] || 0;
widget.setBackGroundImageCapInsets(cc.rect(
scale9OriginX,
scale9OriginY,
scale9Width,
scale9Height
));
}
var colorType = getParam(json["ComboBoxIndex"], 0);
widget.setBackGroundColorType(colorType);
setLayoutBackground(widget, json["SingleColor"], json["FirstColor"], json["EndColor"]);
setLayoutBackgroundVector(widget, json["ColorVector"]);
var bgColorOpacity = json["BackColorAlpha"];
if(bgColorOpacity != null)
widget.setBackGroundColorOpacity(bgColorOpacity);
setContentSize(widget, json["Size"]);
return widget;
};
/**
* ListView
* @param json
* @param resourcePath
* @returns {ccui.ListView}
*/
parser.initListView = function(json, resourcePath){
var widget = new ccui.ListView();
this.widgetAttributes(widget, json);
loadTexture(json["FileData"], resourcePath, function(path, type){
widget.setBackGroundImage(path, type);
});
var clipEnabled = json["ClipAble"] || false;
widget.setClippingEnabled(clipEnabled);
var colorType = getParam(json["ComboBoxIndex"], 0);
widget.setBackGroundColorType(colorType);
var bgColorOpacity = getParam(json["BackColorAlpha"], 255);
var backGroundScale9Enabled = json["Scale9Enable"];
if(backGroundScale9Enabled){
widget.setBackGroundImageScale9Enabled(true);
var scale9OriginX = json["Scale9OriginX"] || 0;
var scale9OriginY = json["Scale9OriginY"] || 0;
var scale9Width = json["Scale9Width"] || 0;
var scale9Height = json["Scale9Height"] || 0;
widget.setBackGroundImageCapInsets(cc.rect(
scale9OriginX,
scale9OriginY,
scale9Width,
scale9Height
));
}
var directionType = getParam(json["DirectionType"], ccui.ListView.DIR_HORIZONTAL);
var verticalType = getParam(json["VerticalType"], "Align_Left");
var horizontalType = getParam(json["HorizontalType"], "Align_Top");
if(!directionType){
widget.setDirection(ccui.ScrollView.DIR_HORIZONTAL);
if(verticalType === "Align_Bottom")
widget.setGravity(ccui.ListView.GRAVITY_BOTTOM);
else if(verticalType === "Align_VerticalCenter")
widget.setGravity(ccui.ListView.GRAVITY_CENTER_VERTICAL);
else
widget.setGravity(ccui.ListView.GRAVITY_TOP);
}else if(directionType === "Vertical"){
widget.setDirection(ccui.ScrollView.DIR_VERTICAL);
if (horizontalType === "")
widget.setGravity(ccui.ListView.GRAVITY_LEFT);
else if (horizontalType === "Align_Right")
widget.setGravity(ccui.ListView.GRAVITY_RIGHT);
else if (horizontalType === "Align_HorizontalCenter")
widget.setGravity(ccui.ListView.GRAVITY_CENTER_HORIZONTAL);
}
var bounceEnabled = getParam(json["IsBounceEnabled"], false);
widget.setBounceEnabled(bounceEnabled);
var itemMargin = json["ItemMargin"] || 0;
widget.setItemsMargin(itemMargin);
var innerSize = json["InnerNodeSize"];
//Width
if(innerSize != null)
widget.setInnerContainerSize(cc.size(innerSize["Widget"]||0, innerSize["Height"]||0));
setLayoutBackground(widget, json["SingleColor"], json["FirstColor"], json["EndColor"]);
setLayoutBackgroundVector(widget, json["ColorVector"]);
if(bgColorOpacity != null)
widget.setBackGroundColorOpacity(bgColorOpacity);
setContentSize(widget, json["Size"]);
return widget;
};
/**
* TextAtlas
* @param json
* @param resourcePath
* @returns {ccui.TextAtlas}
*/
parser.initTextAtlas = function(json, resourcePath){
var widget = new ccui.TextAtlas();
var stringValue = json["LabelText"];
var itemWidth = json["CharWidth"];
var itemHeight = json["CharHeight"];
var startCharMap = json["StartChar"];
loadTexture(json["LabelAtlasFileImage_CNB"], resourcePath, function(path, type){
if(type === 0){
widget.setProperty(stringValue, path, itemWidth, itemHeight, startCharMap);
}
});
this.widgetAttributes(widget, json);
return widget;
};
/**
* TextBMFont
* @param json
* @param resourcePath
* @returns {ccui.TextBMFont}
*/
parser.initTextBMFont = function(json, resourcePath){
var widget = new ccui.TextBMFont();
this.widgetAttributes(widget, json);
var text = json["LabelText"];
widget.setString(text);
loadTexture(json["LabelBMFontFile_CNB"], resourcePath, function(path, type){
widget.setFntFile(path);
});
widget.ignoreContentAdaptWithSize(true);
return widget;
};
/**
* TextField
* @param json
* @param resourcePath
* @returns {ccui.TextField}
*/
parser.initTextField = function(json, resourcePath){
var widget = new ccui.TextField();
var passwordEnabled = json["PasswordEnable"];
if(passwordEnabled){
widget.setPasswordEnabled(true);
var passwordStyleText = json["PasswordStyleText"] || "*";
widget.setPasswordStyleText(passwordStyleText);
}
var placeHolder = json["PlaceHolderText"];
if(placeHolder != null)
widget.setPlaceHolder(placeHolder);
var fontSize = json["FontSize"];
if(fontSize != null)
widget.setFontSize(fontSize);
var fontName = json["FontName"];
if(fontName != null)
widget.setFontName(fontName);
var maxLengthEnabled = json["MaxLengthEnable"];
if(maxLengthEnabled){
widget.setMaxLengthEnabled(true);
var maxLength = json["MaxLengthText"] || 0;
widget.setMaxLength(maxLength);
}
//var isCustomSize = json["IsCustomSize"];
this.widgetAttributes(widget, json);
var text = json["LabelText"];
if(text != null)
widget.setString(text);
var fontResource = json["FontResource"];
if(fontResource != null){
var path = fontResource["Path"];
//resoutceType = fontResource["Type"];
if(path != null){
if (cc.sys.isNative) {
fontName = cc.path.join(cc.loader.resPath, resourcePath, path);
} else {
fontName = path.match(/([^\/]+)\.(\S+)/);
fontName = fontName ? fontName[1] : "";
}
widget.setFontName(fontName);
}
}
widget.setUnifySizeEnabled(false);
widget.ignoreContentAdaptWithSize(false);
var color = json["CColor"];
if(color != null)
widget.setTextColor(getColor(color));
if (!widget.isIgnoreContentAdaptWithSize()){
setContentSize(widget, json["Size"]);
if (cc.sys.isNative)
widget.getVirtualRenderer().setLineBreakWithoutSpace(true);
}
return widget;
};
/**
* SimpleAudio
* @param json
* @param resourcePath
*/
parser.initSimpleAudio = function(json, resourcePath){
var loop = json["Loop"] || false;
var volume = json["Volume"] || 0;
cc.audioEngine.setMusicVolume(volume);
//var name = json["Name"];
loadTexture(json["FileData"], resourcePath, function(path, type){
cc.loader.load(path, function(){
cc.audioEngine.playMusic(path, loop);
});
});
};
/**
* GameMap
* @param json
* @param resourcePath
* @returns {*}
*/
parser.initGameMap = function(json, resourcePath){
var node = null;
loadTexture(json["FileData"], resourcePath, function(path, type){
if(type === 0)
node = new cc.TMXTiledMap(path);
parser.generalAttributes(node, json);
});
return node;
};
/**
* ProjectNode
* @param json
* @param resourcePath
* @returns {*}
*/
parser.initProjectNode = function(json, resourcePath){
var projectFile = json["FileData"];
if(projectFile != null && projectFile["Path"]){
var file = resourcePath + projectFile["Path"];
if(cc.loader.getRes(file)){
var obj = ccs.load(file, resourcePath);
parser.generalAttributes(obj.node, json);
if(obj.action && obj.node){
obj.action.tag = obj.node.tag;
var InnerActionSpeed = json["InnerActionSpeed"];
if(InnerActionSpeed !== undefined)
obj.action.setTimeSpeed(InnerActionSpeed);
obj.node.runAction(obj.action);
obj.action.gotoFrameAndPause(0);
}
return obj.node;
} else
cc.log("%s need to be preloaded", file);
}
};
var getFileName = function(name){
if(!name) return "";
var arr = name.match(/([^\/]+)\.[^\/]+$/);
if(arr && arr[1])
return arr[1];
else
return "";
};
/**
* Armature
* @param json
* @param resourcePath
*/
parser.initArmature = function(json, resourcePath){
var node = new ccs.Armature();
var isLoop = json["IsLoop"];
var isAutoPlay = json["IsAutoPlay"];
var currentAnimationName = json["CurrentAnimationName"];
loadTexture(json["FileData"], resourcePath, function(path, type){
var plists, pngs;
var armJson = cc.loader.getRes(path);
if(!armJson)
cc.log("%s need to be preloaded", path);
else{
plists = armJson["config_file_path"];
pngs = armJson["config_png_path"];
plists.forEach(function(plist, index){
if(pngs[index])
cc.spriteFrameCache.addSpriteFrames(plist, pngs[index]);
});
}
ccs.armatureDataManager.addArmatureFileInfo(path);
node.init(getFileName(path));
if(isAutoPlay)
node.getAnimation().play(currentAnimationName, -1, isLoop);
else{
node.getAnimation().play(currentAnimationName);
node.getAnimation().gotoAndPause(0);
}
});
parser.generalAttributes(node, json);
node.setColor(getColor(json["CColor"]));
return node;
};
var loadedPlist = {};
var loadTexture = function(json, resourcePath, cb){
if(json != null){
var path = json["Path"];
var type;
if(json["Type"] === "Default" || json["Type"] === "Normal")
type = 0;
else
type = 1;
var plist = json["Plist"];
if(plist){
if(cc.loader.getRes(resourcePath + plist)){
loadedPlist[resourcePath + plist] = true;
cc.spriteFrameCache.addSpriteFrames(resourcePath + plist);
}else{
if(!loadedPlist[resourcePath + plist] && !cc.spriteFrameCache.getSpriteFrame(path))
cc.log("%s need to be preloaded", resourcePath + plist);
}
}
if(type !== 0){
if(cc.spriteFrameCache.getSpriteFrame(path))
cb(path, type);
else
cc.log("failed to get spriteFrame: %s", path);
}else
cb(resourcePath + path, type);
}
};
var getColor = function(json){
if(!json) return;
var r = json["R"] != null ? json["R"] : 255;
var g = json["G"] != null ? json["G"] : 255;
var b = json["B"] != null ? json["B"] : 255;
var a = json["A"] != null ? json["A"] : 255;
return cc.color(r, g, b, a);
};
var setContentSize = function(node, size){
var x = size["X"] || 0;
var y = size["Y"] || 0;
if(size)
node.setContentSize(cc.size(x, y));
};
var get3DVector = function(json, name, defValue){
var x = defValue, y = defValue, z = defValue;
if(json && name && json[name]){
if(undefined !== json[name]["ValueX"]) {
x = json[name]["ValueX"];
} else if(undefined !== json[name]["X"]) {
x = json[name]["X"]
}
if(null === x || isNaN(x))
x = defValue;
if(undefined !== json[name]["ValueY"]) {
y = json[name]["ValueY"];
} else if(undefined !== json[name]["Y"]) {
y = json[name]["Y"]
}
if(null === y || isNaN(y))
y = defValue;
if(undefined !== json[name]["ValueZ"]) {
z = json[name]["ValueZ"];
} else if(undefined !== json[name]["Z"]) {
z = json[name]["Z"]
}
if(null === z || isNaN(z))
z = defValue;
}
var vec3 = cc.math.vec3(x, y, z);
return vec3;
};
parser.general3DAttributes = function(node, json){
var pos = get3DVector(json, "Position3D", 0);
node.setPosition3D(pos);
var rotation = get3DVector(json, "Rotation3D", 0);
node.setRotation3D(rotation);
var scale = get3DVector(json, "Scale3D", 1.0);
node.setScaleX(scale.x);
node.setScaleY(scale.y);
node.setScaleZ(scale.z);
var camMask =json["CameraFlagMode"];
if(undefined !== camMask && null !== camMask)
node.setCameraMask(camMask);
this.generalAttributes(node, json);
};
/**
* Node3D
* @param json
* @returns {*}
*/
parser.initNode3D = function(json){
var node = cc.Node.create();
if(node)
this.general3DAttributes(node, json);
return node;
};
/**
* Camera
* @param json
* @returns {*}
*/
parser.initCamera = function(json){
var s = cc.winSize;
var fov = json["Fov"] ? json["Fov"] : 60;
var nearClip = 1;
var farClip = 500;
if(json["ClipPlane"]){
if(undefined !== json["ClipPlane"]["ValueX"]) {
nearClip = json["ClipPlane"]["ValueX"];
} else if(undefined !== json["ClipPlane"]["X"]) {
nearClip = json["ClipPlane"]["X"];
}
if(undefined !== json["ClipPlane"]["ValueY"]) {
farClip = json["ClipPlane"]["ValueY"];
} else if(undefined !== json["ClipPlane"]["Y"]) {
farClip = json["ClipPlane"]["Y"];
}
if(null === nearClip || isNaN(nearClip))
nearClip = 1;
if(null === farClip || isNaN(farClip))
farClip = 500;
}
var node = cc.Camera.createPerspective(fov, s.width/s.height, nearClip, farClip);
if(node){
this.general3DAttributes(node, json);
var camMode = json["UserCameraFlagMode"];
switch(camMode){
case "USER1":
node.setCameraFlag(cc.CameraFlag.USER1); break;
case "USER2":
node.setCameraFlag(cc.CameraFlag.USER2); break;
case "USER3":
node.setCameraFlag(cc.CameraFlag.USER3); break;
case "USER4":
node.setCameraFlag(cc.CameraFlag.USER4); break;
case "USER5":
node.setCameraFlag(cc.CameraFlag.USER5); break;
case "USER6":
node.setCameraFlag(cc.CameraFlag.USER6); break;
case "USER7":
node.setCameraFlag(cc.CameraFlag.USER7); break;
case "USER8":
node.setCameraFlag(cc.CameraFlag.USER8); break;
case "DEFAULT":
node.setCameraFlag(cc.CameraFlag.DEFAULT); break;
default:
node.setCameraFlag(cc.CameraFlag.USER1);
}
}
return node;
};
/**
* Sprite3D
* @param json
* @param resourcePath
* @returns {*}
*/
parser.initSprite3D = function(json, resourcePath){
var resFile = null;
if(json["FileData"] && json["FileData"]["Path"])
resFile = resourcePath + json["FileData"]["Path"];
var node;
if(resFile)
node = jsb.Sprite3D.create(resFile);
else
node = jsb.Sprite3D.create();
if(node) {
this.general3DAttributes(node, json);
if(json["CColor"]) {
var col = getColor(json["CColor"]);
if(col && col.r !== 255 || col.g !== 255 || col.b !== 255)
node.setColor(col);
}
var autoAction = getParam(json["RunAction3D"], false);
if(autoAction && resFile){
var animation = jsb.Animation3D.create(resFile, "");
if(animation){
var animate = jsb.Animate3D.create(animation);
var action = cc.RepeatForever.create(animate);
node.runAction(action);
}
}
}
return node;
};
/**
* Particle3D
* @param json
* @param resourcePath
* @returns {*}
*/
parser.initParticle3D = function(json, resourcePath){
var node = null;
var resFile = null;
if(json["FileData"] && json["FileData"]["Path"])
resFile = resourcePath+json["FileData"]["Path"];
if(resFile)
node = jsb.PUParticleSystem3D.create(resFile);
else
node = jsb.PUParticleSystem3D.create();
if(node){
this.general3DAttributes(node, json);
node.startParticleSystem();
}
return node;
};
var register = [
{name: "SingleNodeObjectData", handle: parser.initSingleNode},
{name: "NodeObjectData", handle: parser.initSingleNode},
{name: "LayerObjectData", handle: parser.initSingleNode},
{name: "GameNodeObjectData", handle: parser.initSingleNode},
{name: "GameLayerObjectData", handle: parser.initSingleNode},
{name: "SpriteObjectData", handle: parser.initSprite},
{name: "ParticleObjectData", handle: parser.initParticle},
{name: "PanelObjectData", handle: parser.initPanel},
{name: "TextObjectData", handle: parser.initText},
{name: "ButtonObjectData", handle: parser.initButton},
{name: "CheckBoxObjectData", handle: parser.initCheckBox},
{name: "ScrollViewObjectData", handle: parser.initScrollView},
{name: "ImageViewObjectData", handle: parser.initImageView},
{name: "LoadingBarObjectData", handle: parser.initLoadingBar},
{name: "SliderObjectData", handle: parser.initSlider},
{name: "PageViewObjectData", handle: parser.initPageView},
{name: "ListViewObjectData", handle: parser.initListView},
{name: "TextAtlasObjectData", handle: parser.initTextAtlas},
{name: "TextBMFontObjectData", handle: parser.initTextBMFont},
{name: "TextFieldObjectData", handle: parser.initTextField},
{name: "SimpleAudioObjectData", handle: parser.initSimpleAudio},
{name: "GameMapObjectData", handle: parser.initGameMap},
{name: "ProjectNodeObjectData", handle: parser.initProjectNode},
{name: "ArmatureNodeObjectData", handle: parser.initArmature},
{name: "Sprite3DObjectData", handle: parser.initSprite3D},
{name: "Particle3DObjectData", handle: parser.initParticle3D},
{name: "UserCameraObjectData", handle: parser.initCamera},
{name: "Node3DObjectData", handle: parser.initNode3D}
];
register.forEach(function(item){
parser.registerParser(item.name, function(options, resourcePath){
var node = item.handle.call(this, options, resourcePath);
this.parseChild(node, options["Children"], resourcePath);
DEBUG && node && (node.__parserName = item.name);
return node;
});
});
load.registerParser("timeline", "2.*", parser);
})(ccs._load, ccs._parser);