starling-framework
Version:
A fast, productive library for 2D cross-platform development.
237 lines (221 loc) • 7.89 kB
JavaScript
// 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;