init
This commit is contained in:
186
cocos2d/cocos/scripting/js-bindings/script/jsb_loaders.js
Normal file
186
cocos2d/cocos/scripting/js-bindings/script/jsb_loaders.js
Normal file
@@ -0,0 +1,186 @@
|
||||
/*
|
||||
* Copyright (c) 2014 Chukong Technologies Inc.
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
//
|
||||
// cocos2d loader plugins.
|
||||
//
|
||||
// This helper file should be required after jsb_cocos2d.js
|
||||
//
|
||||
|
||||
cc._emptyLoader = {
|
||||
load : function(realUrl, url, res, cb){
|
||||
cb && cb(null, null);
|
||||
return null;
|
||||
}
|
||||
};
|
||||
|
||||
cc.loader.register([
|
||||
"mp3", "ogg", "wav", "mp4", "m4a",
|
||||
"font", "eot", "ttf", "woff", "svg", "gaf"
|
||||
],
|
||||
cc._emptyLoader);
|
||||
|
||||
cc._txtLoader = {
|
||||
load : function(realUrl, url, res, cb){
|
||||
var result = jsb.fileUtils.getStringFromFile(realUrl);
|
||||
cb && cb(null, result);
|
||||
return result;
|
||||
}
|
||||
};
|
||||
cc.loader.register(["txt", "xml", "vsh", "fsh", "tmx", "tsx"], cc._txtLoader);
|
||||
|
||||
cc._jsonLoader = {
|
||||
load : function(realUrl, url, res, cb){
|
||||
var data = jsb.fileUtils.getStringFromFile(realUrl), result;
|
||||
try{
|
||||
result = JSON.parse(data);
|
||||
}catch(e){
|
||||
cc.error(e);
|
||||
result = null;
|
||||
}
|
||||
cb && cb(null, result);
|
||||
return result;
|
||||
}
|
||||
};
|
||||
cc.loader.register(["json", "ExportJson"], cc._jsonLoader);
|
||||
|
||||
cc._imgLoader = {
|
||||
load : function(realUrl, url, res, cb){
|
||||
cc.loader.loadImg(realUrl, function(err, img){
|
||||
if(err) {
|
||||
cb && cb(err);
|
||||
return;
|
||||
}
|
||||
cc.loader.cache[url] = img;
|
||||
cb && cb(null, img);
|
||||
});
|
||||
}
|
||||
};
|
||||
cc.loader.register(["png", "jpg", "bmp","jpeg","gif", "webp"], cc._imgLoader);
|
||||
|
||||
cc._plistLoader = {
|
||||
load : function(realUrl, url, res, cb){
|
||||
var content = jsb.fileUtils.getStringFromFile(realUrl);
|
||||
var result = cc.plistParser.parse(content);
|
||||
cb && cb(null, result);
|
||||
return result;
|
||||
}
|
||||
};
|
||||
cc.loader.register(["plist"], cc._plistLoader);
|
||||
|
||||
cc._binaryLoader = {
|
||||
load : function(realUrl, url, res, cb){
|
||||
var result = cc.loader.loadBinarySync(realUrl);
|
||||
cb && cb(null, result);
|
||||
return result;
|
||||
}
|
||||
};
|
||||
cc.loader.register(["ccbi"], cc._binaryLoader);
|
||||
|
||||
|
||||
cc._fntLoader = {
|
||||
INFO_EXP : /info [^\n]*(\n|$)/gi,
|
||||
COMMON_EXP : /common [^\n]*(\n|$)/gi,
|
||||
PAGE_EXP : /page [^\n]*(\n|$)/gi,
|
||||
CHAR_EXP : /char [^\n]*(\n|$)/gi,
|
||||
KERNING_EXP : /kerning [^\n]*(\n|$)/gi,
|
||||
ITEM_EXP : /\w+=[^ \r\n]+/gi,
|
||||
INT_EXP : /^[\-]?\d+$/,
|
||||
|
||||
_parseStrToObj : function(str){
|
||||
var arr = str.match(this.ITEM_EXP);
|
||||
var obj = {};
|
||||
if(arr){
|
||||
for(var i = 0, li = arr.length; i < li; i++){
|
||||
var tempStr = arr[i];
|
||||
var index = tempStr.indexOf("=");
|
||||
var key = tempStr.substring(0, index);
|
||||
var value = tempStr.substring(index + 1);
|
||||
if(value.match(this.INT_EXP)) value = parseInt(value);
|
||||
else if(value[0] == '"') value = value.substring(1, value.length - 1);
|
||||
obj[key] = value;
|
||||
}
|
||||
}
|
||||
return obj;
|
||||
},
|
||||
parseFnt : function(fntStr, url){
|
||||
var self = this, fnt = {};
|
||||
//padding
|
||||
var infoObj = self._parseStrToObj(fntStr.match(self.INFO_EXP)[0]);
|
||||
var paddingArr = infoObj["padding"].split(",");
|
||||
var padding = {
|
||||
left : parseInt(paddingArr[0]),
|
||||
top : parseInt(paddingArr[1]),
|
||||
right : parseInt(paddingArr[2]),
|
||||
bottom : parseInt(paddingArr[3])
|
||||
};
|
||||
|
||||
//common
|
||||
var commonObj = self._parseStrToObj(fntStr.match(self.COMMON_EXP)[0]);
|
||||
fnt.commonHeight = commonObj["lineHeight"];
|
||||
if (cc._renderType === cc._RENDER_TYPE_WEBGL) {
|
||||
var texSize = cc.configuration.getMaxTextureSize();
|
||||
if(commonObj["scaleW"] > texSize.width || commonObj["scaleH"] > texSize.height)
|
||||
cc.log("cc.LabelBMFont._parseCommonArguments(): page can't be larger than supported");
|
||||
}
|
||||
if(commonObj["pages"] !== 1) cc.log("cc.LabelBMFont._parseCommonArguments(): only supports 1 page");
|
||||
|
||||
//page
|
||||
var pageObj = self._parseStrToObj(fntStr.match(self.PAGE_EXP)[0]);
|
||||
if(pageObj["id"] !== 0) cc.log("cc.LabelBMFont._parseImageFileName() : file could not be found");
|
||||
fnt.atlasName = cc.path.changeBasename(url, pageObj["file"]);
|
||||
|
||||
//char
|
||||
var charLines = fntStr.match(self.CHAR_EXP);
|
||||
var fontDefDictionary = fnt.fontDefDictionary = {};
|
||||
for(var i = 0, li = charLines.length; i < li; i++){
|
||||
var charObj = self._parseStrToObj(charLines[i]);
|
||||
var charId = charObj["id"];
|
||||
fontDefDictionary[charId] = {
|
||||
rect : {x : charObj["x"], y : charObj["y"], width : charObj["width"], height : charObj["height"]},
|
||||
xOffset : charObj["xoffset"],
|
||||
yOffset : charObj["yoffset"],
|
||||
xAdvance : charObj["xadvance"]
|
||||
};
|
||||
}
|
||||
|
||||
//kerning
|
||||
var kerningDict = fnt.kerningDict = {};
|
||||
var kerningLines = fntStr.match(self.KERNING_EXP);
|
||||
if(kerningLines){
|
||||
for(var i = 0, li = kerningLines.length; i < li; i++){
|
||||
var kerningObj = self._parseStrToObj(kerningLines[i]);
|
||||
kerningDict[(kerningObj["first"] << 16) | (kerningObj["second"] & 0xffff)] = kerningObj["amount"];
|
||||
}
|
||||
}
|
||||
return fnt;
|
||||
},
|
||||
|
||||
load : function(realUrl, url, res, cb){
|
||||
var data = jsb.fileUtils.getStringFromFile(realUrl), result = null;
|
||||
if (data)
|
||||
result = this.parseFnt(data, url);
|
||||
cb && cb(null, result);
|
||||
return result;
|
||||
}
|
||||
};
|
||||
cc.loader.register(["fnt"], cc._fntLoader);
|
||||
Reference in New Issue
Block a user