starling-framework
Version:
A fast, productive library for 2D cross-platform development.
260 lines (245 loc) • 8.9 kB
JavaScript
// Class: starling.textures.TextureAtlas
var $global = typeof window != "undefined" ? window : typeof global != "undefined" ? global : typeof self != "undefined" ? self : this
$global.Object.defineProperty(exports, "__esModule", {value: true});
var __map_reserved = {};
// Imports
var $hxClasses = require("./../../hxClasses_stub").default;
var $hxEnums = require("./../../hxEnums_stub").default;
var $import = require("./../../import_stub").default;
var $bind = require("./../../bind_stub").default;
function Xml() {return require("./../../Xml");}
function js__$Boot_HaxeError() {return require("./../../js/_Boot/HaxeError");}
function openfl_errors_ArgumentError() {return $import(require("openfl/errors/ArgumentError"));}
function openfl_geom_Rectangle() {return $import(require("openfl/geom/Rectangle"));}
function haxe_ds_StringMap() {return require("./../../haxe/ds/StringMap");}
function starling_display_Image() {return require("./../../starling/display/Image");}
function openfl_geom_Point() {return $import(require("openfl/geom/Point"));}
function openfl__$Vector_Vector_$Impl_$() {return require("./../../openfl/_Vector/Vector_Impl_");}
function openfl__$Vector_VectorIterator() {return require("./../../openfl/_Vector/VectorIterator");}
function starling_textures_SubTexture() {return require("./../../starling/textures/SubTexture");}
function Std() {return require("./../../Std");}
function EReg() {return require("./../../EReg");}
// Constructor
var TextureAtlas = function(texture,data,xmlScale) {
if(xmlScale == null) {
xmlScale = 1;
}
this.xmlScale = 1.0;
this.__subTextures = new (haxe_ds_StringMap().default)();
this.__atlasTexture = texture;
this.xmlScale = xmlScale;
if(data != null) {
this.parseAtlasData(data);
}
}
// Meta
TextureAtlas.__name__ = "starling.textures.TextureAtlas";
TextureAtlas.__isInterface__ = false;
TextureAtlas.prototype = {
dispose: function() {
this.__atlasTexture.dispose();
},
parseAtlasData: function(data) {
try {
var atlasXml = null;
if(typeof(data) == "string") {
atlasXml = (Xml().default).parse(data).firstElement();
} else if(((data) instanceof (Xml().default))) {
atlasXml = data;
}
this.parseAtlasXml(atlasXml);
} catch( error ) {
var error1 = ((error) instanceof (js__$Boot_HaxeError().default)) ? error.val : error;
throw new (js__$Boot_HaxeError().default)(new (openfl_errors_ArgumentError().default)("TextureAtlas only supports XML data"));
}
},
parseAtlasXml: function(atlasXml) {
var scale = this.__atlasTexture.get_scale();
var region = new (openfl_geom_Rectangle().default)();
var frame = new (openfl_geom_Rectangle().default)();
var pivotPoints = new (haxe_ds_StringMap().default)();
if(atlasXml.firstElement().get_nodeName() == "TextureAtlas") {
atlasXml = atlasXml.firstElement();
}
var subTexture = atlasXml.elementsNamed("SubTexture");
while(subTexture.hasNext()) {
var subTexture1 = subTexture.next();
var name = subTexture1.get("name");
var x = scale > 0 ? this.getXmlFloat(subTexture1,"x") / scale : 0.0;
var y = scale > 0 ? this.getXmlFloat(subTexture1,"y") / scale : 0.0;
var width = scale > 0 ? this.getXmlFloat(subTexture1,"width") / scale : 0.0;
var height = scale > 0 ? this.getXmlFloat(subTexture1,"height") / scale : 0.0;
var frameX = scale > 0 ? this.getXmlFloat(subTexture1,"frameX") / scale : 0.0;
var frameY = scale > 0 ? this.getXmlFloat(subTexture1,"frameY") / scale : 0.0;
var frameWidth = scale > 0 ? this.getXmlFloat(subTexture1,"frameWidth") / scale : 0.0;
var frameHeight = scale > 0 ? this.getXmlFloat(subTexture1,"frameHeight") / scale : 0.0;
var pivotX = scale > 0 ? this.getXmlFloat(subTexture1,"pivotX") / scale : 0.0;
var pivotY = scale > 0 ? this.getXmlFloat(subTexture1,"pivotY") / scale : 0.0;
var rotated = TextureAtlas.parseBool(subTexture1.get("rotated"));
region.setTo(x,y,width,height);
frame.setTo(frameX,frameY,frameWidth,frameHeight);
if(frameWidth > 0 && frameHeight > 0) {
this.addRegion(name,region,frame,rotated);
} else {
this.addRegion(name,region,null,rotated);
}
if(pivotX != 0 || pivotY != 0) {
(starling_display_Image().default).bindPivotPointToTexture(this.getTexture(name),pivotX,pivotY);
var v = new (openfl_geom_Point().default)(pivotX,pivotY);
pivotPoints.set(name,v);
}
}
var pivotName = pivotPoints.keys();
while(pivotName.hasNext()) {
var pivotName1 = pivotName.next();
if(TextureAtlas.NAME_REGEX.match(pivotName1)) {
var baseName = TextureAtlas.NAME_REGEX.matched(1);
var pivot = pivotPoints.get(pivotName1);
var name1 = this.__subTextures.keys();
while(name1.hasNext()) {
var name2 = name1.next();
if(name2.indexOf(baseName) == 0 && !pivotPoints.exists(name2)) {
(starling_display_Image().default).bindPivotPointToTexture(this.__subTextures.get(name2),pivot.x,pivot.y);
}
}
}
}
},
getTexture: function(name) {
return this.__subTextures.get(name);
},
getTextures: function(prefix,result) {
if(prefix == null) {
prefix = "";
}
if(result == null) {
result = (openfl__$Vector_Vector_$Impl_$().default)._new();
}
var name = new (openfl__$Vector_VectorIterator().default)(this.getNames(prefix,TextureAtlas.sNames));
while(name.hasNext()) {
var name1 = name.next();
(openfl__$Vector_Vector_$Impl_$().default).set(result,result.length,this.getTexture(name1));
}
TextureAtlas.sNames.length = 0;
return result;
},
getNames: function(prefix,result) {
if(prefix == null) {
prefix = "";
}
var name;
if(result == null) {
result = (openfl__$Vector_Vector_$Impl_$().default)._new();
}
if(this.__subTextureNames == null) {
this.__subTextureNames = (openfl__$Vector_Vector_$Impl_$().default)._new();
var name1 = this.__subTextures.keys();
while(name1.hasNext()) {
var name2 = name1.next();
(openfl__$Vector_Vector_$Impl_$().default).set(this.__subTextureNames,this.__subTextureNames.length,name2);
}
var this1 = this.__subTextureNames;
(Array.prototype.sort.call)(this1,$bind(this,this.compare));
}
var name3 = new (openfl__$Vector_VectorIterator().default)(this.__subTextureNames);
while(name3.hasNext()) {
var name4 = name3.next();
if(name4.indexOf(prefix) == 0) {
(openfl__$Vector_Vector_$Impl_$().default).set(result,result.length,name4);
}
}
return result;
},
getRegion: function(name) {
var subTexture = this.__subTextures.get(name);
if(subTexture != null) {
return subTexture.get_region();
} else {
return null;
}
},
getFrame: function(name) {
var subTexture = this.__subTextures.get(name);
if(subTexture != null) {
return subTexture.get_frame();
} else {
return null;
}
},
getRotation: function(name) {
var subTexture = this.__subTextures.get(name);
if(subTexture != null) {
return subTexture.get_rotated();
} else {
return false;
}
},
addRegion: function(name,region,frame,rotated) {
if(rotated == null) {
rotated = false;
}
this.addSubTexture(name,new (starling_textures_SubTexture().default)(this.__atlasTexture,region,false,frame,rotated));
},
addSubTexture: function(name,subTexture) {
if(subTexture.get_root() != this.__atlasTexture.get_root()) {
throw new (js__$Boot_HaxeError().default)(new (openfl_errors_ArgumentError().default)("SubTexture's root must be atlas texture."));
}
this.__subTextures.set(name,subTexture);
this.__subTextureNames = null;
},
removeRegion: function(name) {
var subTexture = this.__subTextures.get(name);
if(subTexture != null) {
subTexture.dispose();
}
this.__subTextures.remove(name);
this.__subTextureNames = null;
},
removeRegions: function(prefix) {
if(prefix == null) {
prefix = "";
}
var name = this.__subTextures.keys();
while(name.hasNext()) {
var name1 = name.next();
if(prefix == "" || name1.indexOf(prefix) == 0) {
this.removeRegion(name1);
}
}
},
get_texture: function() {
return this.__atlasTexture;
},
getXmlFloat: function(xml,attributeName) {
var value = xml.get(attributeName);
if(value != null) {
return (Std().default).parseFloat(value);
} else {
return 0;
}
},
compare: function(a,b) {
if(a < b) {
return -1;
} else if(a > b) {
return 1;
} else {
return 0;
}
}
};
TextureAtlas.prototype.__class__ = TextureAtlas.prototype.constructor = $hxClasses["starling.textures.TextureAtlas"] = TextureAtlas;
// Init
Object.defineProperties(TextureAtlas.prototype,{ texture : { get : function () { return this.get_texture (); }}});
// Statics
TextureAtlas.parseBool = function(value) {
if(value != null) {
return value.toLowerCase() == "true";
} else {
return false;
}
}
TextureAtlas.NAME_REGEX = new (EReg().default)("(.+?)\\d+$","")
TextureAtlas.sNames = (openfl__$Vector_Vector_$Impl_$().default)._new()
// Export
exports.default = TextureAtlas;