var MATH_CONST = require('../../math/const'); var WrapAngle = require('../../math/angle/Wrap'); var WrapAngleDegrees = require('../../math/angle/WrapDegrees'); var _FLAG = 4; var Transform = { _scaleX: 1, _scaleY: 1, _rotation: 0, _depth: 0, _dirty: false , _world: { a: 1, b: 0, c: 0, d: 1, tx: 0, ty: 0, sr: 0, cr: 0} , _x: 0, _y: 0, _z: 0, _w: 0, x: { get: function (){ return this._x; } , set: function (value){ this._x = value; this._dirty = true ; } } , y: { get: function (){ return this._y; } , set: function (value){ this._y = value; this._dirty = true ; } } , z: { get: function (){ return this._z; } , set: function (value){ this._z = value; this._dirty = true ; } } , w: { get: function (){ return this._w; } , set: function (value){ this._w = value; this._dirty = true ; } } , scaleX: { get: function (){ return this._scaleX; } , set: function (value){ this._scaleX = value; this._dirty = true ; if (this._scaleX === 0) { this.renderFlags &= ~_FLAG; } else { this.renderFlags |= _FLAG; } } } , scaleY: { get: function (){ return this._scaleY; } , set: function (value){ this._scaleY = value; this._dirty = true ; if (this._scaleY === 0) { this.renderFlags &= ~_FLAG; } else { this.renderFlags |= _FLAG; } } } , angle: { get: function (){ return WrapAngleDegrees(this._rotation * MATH_CONST.RAD_TO_DEG); } , set: function (value){ this.rotation = WrapAngleDegrees(value) * MATH_CONST.DEG_TO_RAD; } } , rotation: { get: function (){ return this._rotation; } , set: function (value){ this._rotation = WrapAngle(value); this._world.sr = Math.sin(this._rotation); this._world.cr = Math.cos(this._rotation); this._dirty = true ; } } , depth: { get: function (){ return this._depth; } , set: function (value){ this.scene.sys.queueDepthSort(); this._depth = value; } } , setPosition: function (x, y, z, w){ if (x === undefined) { x = 0; } if (y === undefined) { y = x; } if (z === undefined) { z = 0; } if (w === undefined) { w = 0; } this._x = x; this._y = y; this._z = z; this._w = w; this._dirty = true ; return this; } , setRotation: function (radians){ if (radians === undefined) { radians = 0; } this.rotation = radians; return this; } , setAngle: function (degrees){ if (degrees === undefined) { degrees = 0; } this.angle = degrees; return this; } , setScale: function (x, y){ if (x === undefined) { x = 1; } if (y === undefined) { y = x; } this.scaleX = x; this.scaleY = y; return this; } , setZ: function (value){ if (value === undefined) { value = 0; } this.z = value; return this; } , setW: function (value){ if (value === undefined) { value = 0; } this.w = value; return this; } , setDepth: function (value){ if (value === undefined) { value = 0; } this.depth = value; return this; } , updateTransform: function (){ if (!this.parent || !this._dirty) { return ; } var tx = this._x; var ty = this._y; var world = this._world; var parent = this.parent.world; var a = world.cr * this._scaleX; var b = world.sr * this._scaleX; var c = - world.sr * this._scaleY; var d = world.cr * this._scaleY; world.a = (a * parent.a) + (b * parent.c); world.b = (a * parent.b) + (b * parent.d); world.c = (c * parent.a) + (d * parent.c); world.d = (c * parent.b) + (d * parent.d); world.tx = (tx * parent.a) + (ty * parent.c) + parent.tx; world.ty = (tx * parent.b) + (ty * parent.d) + parent.ty; } } ; module.exports = Transform;