UNPKG

starling-framework

Version:

A fast, productive library for 2D cross-platform development.

260 lines (245 loc) 8.9 kB
// 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;