UNPKG

starling-framework

Version:

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

237 lines (221 loc) 7.89 kB
// Class: starling.styles.MultiTextureStyle 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 $extend = require("./../../extend_stub").default; function starling_styles_MeshStyle() {return require("./../../starling/styles/MeshStyle");} function openfl__$Vector_Vector_$Impl_$() {return require("./../../openfl/_Vector/Vector_Impl_");} function starling_styles_MultiTextureEffect() {return require("./../../starling/styles/MultiTextureEffect");} function js_Boot() {return require("./../../js/Boot");} function starling_core_Starling() {return require("./../../starling/core/Starling");} // Constructor var MultiTextureStyle = function() { this.__textures = (openfl__$Vector_Vector_$Impl_$().default)._new(); this.__dirty = true; (starling_styles_MeshStyle().default).call(this); if(!MultiTextureStyle.__initDone) { MultiTextureStyle.init(); } } // Meta MultiTextureStyle.__name__ = "starling.styles.MultiTextureStyle"; MultiTextureStyle.__isInterface__ = false; MultiTextureStyle.__super__ = (starling_styles_MeshStyle().default); MultiTextureStyle.prototype = $extend((starling_styles_MeshStyle().default).prototype, { copyFrom: function(meshStyle) { var otherStyle = ((meshStyle) instanceof MultiTextureStyle) ? meshStyle : null; if(otherStyle != null) { var length = otherStyle.__textures.length; var _g = 0; var _g1 = length; while(_g < _g1) { var i = _g++; (openfl__$Vector_Vector_$Impl_$().default).set(this.__textures,i,otherStyle.__textures[i]); } this.__textures.length = length; } (starling_styles_MeshStyle().default).prototype.copyFrom.call(this,meshStyle); }, createEffect: function() { return new (starling_styles_MultiTextureEffect().default)(); }, updateEffect: function(effect,state) { ((js_Boot().default).__cast(effect , (starling_styles_MultiTextureEffect().default))).textures = this.__textures; (starling_styles_MeshStyle().default).prototype.updateEffect.call(this,effect,state); }, canBatchWith: function(meshStyle) { var mtStyle = ((meshStyle) instanceof MultiTextureStyle) ? meshStyle : null; if(mtStyle != null) { var numTexturesToAdd = this.get_numTextures(); var numTexturesHere = mtStyle.get_numTextures(); if(numTexturesToAdd > 0 && numTexturesHere > 0) { if(this.get_textureSmoothing() == mtStyle.get_textureSmoothing() && this.get_textureRepeat() == mtStyle.get_textureRepeat()) { if(numTexturesHere + numTexturesToAdd > MultiTextureStyle.sMaxTextures) { var numSharedTextures = 0; var _g = 0; var _g1 = numTexturesToAdd; while(_g < _g1) { var i = _g++; if(mtStyle.getTextureIndex(this.getTexture(i)) != -1) { ++numSharedTextures; } } return numTexturesHere + numTexturesToAdd - numSharedTextures <= MultiTextureStyle.sMaxTextures; } return true; } } else if(0 == numTexturesToAdd) { return 0 == numTexturesHere; } else { return false; } } return false; }, batchVertexData: function(targetStyle,targetVertexID,matrix,vertexID,numVertices) { if(numVertices == null) { numVertices = -1; } if(vertexID == null) { vertexID = 0; } if(targetVertexID == null) { targetVertexID = 0; } var count; if(matrix != null && this.__dirty) { count = this.get_vertexData().get_numVertices(); var _g = 0; var _g1 = count; while(_g < _g1) { var i = _g++; this.get_vertexData().setFloat(i,"texture",0); } this.__dirty = false; } (starling_styles_MeshStyle().default).prototype.batchVertexData.call(this,targetStyle,targetVertexID,matrix,vertexID,numVertices); var mtTarget = targetStyle; if(mtTarget != null) { var dirty = false; count = this.get_numTextures(); var _g2 = 0; var _g11 = count; while(_g2 < _g11) { var i1 = _g2++; var texture = this.getTexture(i1); var textureIndexOnTarget = mtTarget.getTextureIndex(texture); if(-1 == textureIndexOnTarget) { textureIndexOnTarget = mtTarget.get_numTextures(); if(0 == textureIndexOnTarget) { mtTarget.set_texture(texture); } else { (openfl__$Vector_Vector_$Impl_$().default).set(mtTarget.__textures,mtTarget.__textures.length,texture); } } MultiTextureStyle.sTextureIndexMap[i1] = textureIndexOnTarget; dirty = dirty || i1 != textureIndexOnTarget; } if(dirty) { var targetVertexData = mtTarget.get_vertexData(); if(numVertices < 0) { numVertices = targetVertexData.get_numVertices() - targetVertexID; } var _g21 = 0; var _g3 = numVertices; while(_g21 < _g3) { var i2 = _g21++; var sourceTexID = Math.round(targetVertexData.getFloat(targetVertexID + i2,"texture") * MultiTextureStyle.__TEXTURE_INDEX_FACTOR); var targetTexID = MultiTextureStyle.sTextureIndexMap[sourceTexID]; if(sourceTexID != targetTexID) { targetVertexData.setFloat(targetVertexID + i2,"texture",targetTexID / MultiTextureStyle.__TEXTURE_INDEX_FACTOR); } } } } }, onTargetAssigned: function(target) { this.__dirty = true; }, get_vertexFormat: function() { return MultiTextureStyle.VERTEX_FORMAT; }, getTextureIndex: function(texture) { if(this._textureRoot == texture) { return 0; } var length = this.__textures.length; var _g = 0; var _g1 = length; while(_g < _g1) { var i = _g++; if(this.__textures[i] == texture) { return i + 1; } } return -1; }, getTexture: function(index) { if(index > 0) { return this.__textures[index - 1]; } else { return this._textureRoot; } }, get_numTextures: function() { if(this._texture != null) { return this.__textures.length + 1; } else { return this.__textures.length; } } }); MultiTextureStyle.prototype.__class__ = MultiTextureStyle.prototype.constructor = $hxClasses["starling.styles.MultiTextureStyle"] = MultiTextureStyle; // Init // Statics MultiTextureStyle.get_MAX_NUM_TEXTURES = function() { return MultiTextureStyle.__MAX_NUM_TEXTURES; } MultiTextureStyle.get_maxTextures = function() { return MultiTextureStyle.sMaxTextures; } MultiTextureStyle.set_maxTextures = function(value) { if(!MultiTextureStyle.__initDone) { MultiTextureStyle.init(); } if(!MultiTextureStyle.__initDone) { value = value < 1 ? 1 : value > 16 ? 16 : value; MultiTextureStyle.sMaxTextures = value; } else { value = value < 1 ? 1 : value; MultiTextureStyle.sMaxTextures = value > MultiTextureStyle.__MAX_NUM_TEXTURES ? MultiTextureStyle.__MAX_NUM_TEXTURES : value; } return value; } MultiTextureStyle.init = function() { if(MultiTextureStyle.__initDone) { return; } if((starling_core_Starling().default).get_current() == null) { return; } var isBaseline = (starling_core_Starling().default).get_current().get_profile() == "baseline" || (starling_core_Starling().default).get_current().get_profile() == "baselineConstrained" || (starling_core_Starling().default).get_current().get_profile() == "baselineExtended"; if(isBaseline) { MultiTextureStyle.__MAX_NUM_TEXTURES = 5; MultiTextureStyle.__TEXTURE_INDEX_FACTOR = 4.0; } else { MultiTextureStyle.__MAX_NUM_TEXTURES = 16; MultiTextureStyle.__TEXTURE_INDEX_FACTOR = 1.0; } MultiTextureStyle.__initDone = true; } MultiTextureStyle.VERTEX_FORMAT = (starling_styles_MeshStyle().default).VERTEX_FORMAT.extend("texture:float1") MultiTextureStyle.__MAX_NUM_TEXTURES = 5 MultiTextureStyle.sMaxTextures = 2 MultiTextureStyle.sTextureIndexMap = [] MultiTextureStyle.__initDone = false // Export exports.default = MultiTextureStyle;