starling-framework
Version:
A fast, productive library for 2D cross-platform development.
207 lines (191 loc) • 8.77 kB
JavaScript
// Class: starling.display.Sprite3D
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;
var $extend = require("./../../extend_stub").default;
function starling_display_DisplayObjectContainer() {return require("./../../starling/display/DisplayObjectContainer");}
function starling_utils_MatrixUtil() {return require("./../../starling/utils/MatrixUtil");}
function starling_utils_MathUtil() {return require("./../../starling/utils/MathUtil");}
function js_Boot() {return require("./../../js/Boot");}
function starling_display_DisplayObject() {return require("./../../starling/display/DisplayObject");}
function openfl_geom_Vector3D() {return $import(require("openfl/geom/Vector3D"));}
function js__$Boot_HaxeError() {return require("./../../js/_Boot/HaxeError");}
function openfl_errors_Error() {return $import(require("openfl/errors/Error"));}
function openfl_geom_Matrix3D() {return $import(require("openfl/geom/Matrix3D"));}
// Constructor
var Sprite3D = function() {
(starling_display_DisplayObjectContainer().default).call(this);
this.__scaleZ = 1.0;
this.__rotationX = this.__rotationY = this.__pivotZ = this.__z = 0.0;
this.__setIs3D(true);
this.addEventListener("added",$bind(this,this.__onAddedChild));
this.addEventListener("removed",$bind(this,this.__onRemovedChild));
}
// Meta
Sprite3D.__name__ = "starling.display.Sprite3D";
Sprite3D.__isInterface__ = false;
Sprite3D.__super__ = (starling_display_DisplayObjectContainer().default);
Sprite3D.prototype = $extend((starling_display_DisplayObjectContainer().default).prototype, {
render: function(painter) {
if(this.get_isFlat()) {
(starling_display_DisplayObjectContainer().default).prototype.render.call(this,painter);
} else {
painter.finishMeshBatch();
painter.pushState();
painter.get_state().transformModelviewMatrix3D(this.get_transformationMatrix3D());
(starling_display_DisplayObjectContainer().default).prototype.render.call(this,painter);
painter.finishMeshBatch();
painter.excludeFromCache(this);
painter.popState();
}
},
hitTest: function(localPoint) {
if(this.get_isFlat()) {
return (starling_display_DisplayObjectContainer().default).prototype.hitTest.call(this,localPoint);
} else {
if(!this.get_visible() || !this.get_touchable()) {
return null;
}
Sprite3D.sHelperMatrix.copyFrom(this.get_transformationMatrix3D());
Sprite3D.sHelperMatrix.invert();
this.get_stage().getCameraPosition(this,Sprite3D.sHelperPoint);
(starling_utils_MatrixUtil().default).transformCoords3D(Sprite3D.sHelperMatrix,localPoint.x,localPoint.y,0,Sprite3D.sHelperPointAlt);
(starling_utils_MathUtil().default).intersectLineWithXYPlane(Sprite3D.sHelperPoint,Sprite3D.sHelperPointAlt,localPoint);
return (starling_display_DisplayObjectContainer().default).prototype.hitTest.call(this,localPoint);
}
},
__onAddedChild: function(event) {
this.__recursivelySetIs3D((js_Boot().default).__cast(event.target , (starling_display_DisplayObject().default)),true);
},
__onRemovedChild: function(event) {
this.__recursivelySetIs3D((js_Boot().default).__cast(event.target , (starling_display_DisplayObject().default)),false);
},
__recursivelySetIs3D: function(object,value) {
if(((object) instanceof Sprite3D)) {
return;
}
if(((object) instanceof (starling_display_DisplayObjectContainer().default))) {
var container = object;
var numChildren = container.get_numChildren();
var _g = 0;
var _g1 = numChildren;
while(_g < _g1) {
var i = _g++;
this.__recursivelySetIs3D(container.getChildAt(i),value);
}
}
object.__setIs3D(value);
},
__updateTransformationMatrices: function(x,y,pivotX,pivotY,scaleX,scaleY,skewX,skewY,rotation,out,out3D) {
if(this.get_isFlat()) {
(starling_display_DisplayObjectContainer().default).prototype.__updateTransformationMatrices.call(this,x,y,pivotX,pivotY,scaleX,scaleY,skewX,skewY,rotation,out,out3D);
} else {
this.__updateTransformationMatrices3D(x,y,this.__z,pivotX,pivotY,this.__pivotZ,scaleX,scaleY,this.__scaleZ,this.__rotationX,this.__rotationY,rotation,out,out3D);
}
},
__updateTransformationMatrices3D: function(x,y,z,pivotX,pivotY,pivotZ,scaleX,scaleY,scaleZ,rotationX,rotationY,rotationZ,out,out3D) {
out.identity();
out3D.identity();
if(scaleX != 1.0 || scaleY != 1.0 || scaleZ != 1.0) {
out3D.appendScale(scaleX != 0 ? scaleX : 0.00001,scaleY != 0 ? scaleY : 0.00001,scaleZ != 0 ? scaleZ : 0.00001);
}
if(rotationX != 0.0) {
out3D.appendRotation((starling_utils_MathUtil().default).rad2deg(rotationX),(openfl_geom_Vector3D().default).get_X_AXIS());
}
if(rotationY != 0.0) {
out3D.appendRotation((starling_utils_MathUtil().default).rad2deg(rotationY),(openfl_geom_Vector3D().default).get_Y_AXIS());
}
if(rotationZ != 0.0) {
out3D.appendRotation((starling_utils_MathUtil().default).rad2deg(rotationZ),(openfl_geom_Vector3D().default).get_Z_AXIS());
}
if(x != 0.0 || y != 0.0 || z != 0.0) {
out3D.appendTranslation(x,y,z);
}
if(pivotX != 0.0 || pivotY != 0.0 || pivotZ != 0.0) {
out3D.prependTranslation(-pivotX,-pivotY,-pivotZ);
}
},
set_transformationMatrix: function(value) {
(starling_display_DisplayObjectContainer().default).prototype.set_transformationMatrix.call(this,value);
this.__rotationX = this.__rotationY = this.__pivotZ = this.__z = 0;
this.__setTransformationChanged();
return value;
},
get_z: function() {
return this.__z;
},
set_z: function(value) {
this.__z = value;
this.__setTransformationChanged();
return value;
},
get_pivotZ: function() {
return this.__pivotZ;
},
set_pivotZ: function(value) {
this.__pivotZ = value;
this.__setTransformationChanged();
return value;
},
get_scaleZ: function() {
return this.__scaleZ;
},
set_scaleZ: function(value) {
this.__scaleZ = value;
this.__setTransformationChanged();
return value;
},
set_scale: function(value) {
return this.set_scaleX(this.set_scaleY(this.set_scaleZ(value)));
},
set_skewX: function(value) {
throw new (js__$Boot_HaxeError().default)(new (openfl_errors_Error().default)("3D objects do not support skewing"));
},
set_skewY: function(value) {
throw new (js__$Boot_HaxeError().default)(new (openfl_errors_Error().default)("3D objects do not support skewing"));
},
get_rotationX: function() {
return this.__rotationX;
},
set_rotationX: function(value) {
this.__rotationX = (starling_utils_MathUtil().default).normalizeAngle(value);
this.__setTransformationChanged();
return value;
},
get_rotationY: function() {
return this.__rotationY;
},
set_rotationY: function(value) {
this.__rotationY = (starling_utils_MathUtil().default).normalizeAngle(value);
this.__setTransformationChanged();
return value;
},
get_rotationZ: function() {
return this.get_rotation();
},
set_rotationZ: function(value) {
return this.set_rotation(value);
},
get_isFlat: function() {
if(this.__z > -1e-05 && this.__z < 0.00001 && this.__rotationX > -1e-05 && this.__rotationX < 0.00001 && this.__rotationY > -1e-05 && this.__rotationY < 0.00001 && this.__pivotZ > -1e-05) {
return this.__pivotZ < 0.00001;
} else {
return false;
}
}
});
Sprite3D.prototype.__class__ = Sprite3D.prototype.constructor = $hxClasses["starling.display.Sprite3D"] = Sprite3D;
// Init
Object.defineProperties(Sprite3D.prototype,{ z : { get : function () { return this.get_z (); }, set : function (v) { return this.set_z (v); }}, pivotZ : { get : function () { return this.get_pivotZ (); }, set : function (v) { return this.set_pivotZ (v); }}, scaleZ : { get : function () { return this.get_scaleZ (); }, set : function (v) { return this.set_scaleZ (v); }}, rotationX : { get : function () { return this.get_rotationX (); }, set : function (v) { return this.set_rotationX (v); }}, rotationY : { get : function () { return this.get_rotationY (); }, set : function (v) { return this.set_rotationY (v); }}, rotationZ : { get : function () { return this.get_rotationZ (); }, set : function (v) { return this.set_rotationZ (v); }}, isFlat : { get : function () { return this.get_isFlat (); }}});
// Statics
Sprite3D.E = 0.00001
Sprite3D.sHelperPoint = new (openfl_geom_Vector3D().default)()
Sprite3D.sHelperPointAlt = new (openfl_geom_Vector3D().default)()
Sprite3D.sHelperMatrix = new (openfl_geom_Matrix3D().default)()
// Export
exports.default = Sprite3D;