{"version":3,"file":"Transform.mjs","sources":["../src/Transform.ts"],"sourcesContent":["import { Matrix } from './Matrix';\nimport { ObservablePoint } from './ObservablePoint';\n\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface Transform extends GlobalMixins.Transform {}\n\n/**\n * Transform that takes care about its versions.\n * @memberof PIXI\n */\nexport class Transform\n{\n /**\n * A default (identity) transform.\n * @static\n * @type {PIXI.Transform}\n */\n public static readonly IDENTITY = new Transform();\n\n /** The world transformation matrix. */\n public worldTransform: Matrix;\n\n /** The local transformation matrix. */\n public localTransform: Matrix;\n\n /** The coordinate of the object relative to the local coordinates of the parent. */\n public position: ObservablePoint;\n\n /** The scale factor of the object. */\n public scale: ObservablePoint;\n\n /** The pivot point of the displayObject that it rotates around. */\n public pivot: ObservablePoint;\n\n /** The skew amount, on the x and y axis. */\n public skew: ObservablePoint;\n\n /** The locally unique ID of the parent's world transform used to calculate the current world transformation matrix. */\n public _parentID: number;\n\n /** The locally unique ID of the world transform. */\n _worldID: number;\n\n /** The rotation amount. */\n protected _rotation: number;\n\n /**\n * The X-coordinate value of the normalized local X axis,\n * the first column of the local transformation matrix without a scale.\n */\n protected _cx: number;\n\n /**\n * The Y-coordinate value of the normalized local X axis,\n * the first column of the local transformation matrix without a scale.\n */\n protected _sx: number;\n\n /**\n * The X-coordinate value of the normalized local Y axis,\n * the second column of the local transformation matrix without a scale.\n */\n protected _cy: number;\n\n /**\n * The Y-coordinate value of the normalized local Y axis,\n * the second column of the local transformation matrix without a scale.\n */\n protected _sy: number;\n\n /** The locally unique ID of the local transform. */\n protected _localID: number;\n\n /** The locally unique ID of the local transform used to calculate the current local transformation matrix. */\n protected _currentLocalID: number;\n\n constructor()\n {\n this.worldTransform = new Matrix();\n this.localTransform = new Matrix();\n this.position = new ObservablePoint(this.onChange, this, 0, 0);\n this.scale = new ObservablePoint(this.onChange, this, 1, 1);\n this.pivot = new ObservablePoint(this.onChange, this, 0, 0);\n this.skew = new ObservablePoint(this.updateSkew, this, 0, 0);\n\n this._rotation = 0;\n this._cx = 1;\n this._sx = 0;\n this._cy = 0;\n this._sy = 1;\n this._localID = 0;\n this._currentLocalID = 0;\n\n this._worldID = 0;\n this._parentID = 0;\n }\n\n /** Called when a value changes. */\n protected onChange(): void\n {\n this._localID++;\n }\n\n /** Called when the skew or the rotation changes. */\n protected updateSkew(): void\n {\n this._cx = Math.cos(this._rotation + this.skew.y);\n this._sx = Math.sin(this._rotation + this.skew.y);\n this._cy = -Math.sin(this._rotation - this.skew.x); // cos, added PI/2\n this._sy = Math.cos(this._rotation - this.skew.x); // sin, added PI/2\n\n this._localID++;\n }\n\n /** Updates the local transformation matrix. */\n updateLocalTransform(): void\n {\n const lt = this.localTransform;\n\n if (this._localID !== this._currentLocalID)\n {\n // get the matrix values of the displayobject based on its transform properties..\n lt.a = this._cx * this.scale.x;\n lt.b = this._sx * this.scale.x;\n lt.c = this._cy * this.scale.y;\n lt.d = this._sy * this.scale.y;\n\n lt.tx = this.position.x - ((this.pivot.x * lt.a) + (this.pivot.y * lt.c));\n lt.ty = this.position.y - ((this.pivot.x * lt.b) + (this.pivot.y * lt.d));\n this._currentLocalID = this._localID;\n\n // force an update..\n this._parentID = -1;\n }\n }\n\n /**\n * Updates the local and the world transformation matrices.\n * @param parentTransform - The parent transform\n */\n updateTransform(parentTransform: Transform): void\n {\n const lt = this.localTransform;\n\n if (this._localID !== this._currentLocalID)\n {\n // get the matrix values of the displayobject based on its transform properties..\n lt.a = this._cx * this.scale.x;\n lt.b = this._sx * this.scale.x;\n lt.c = this._cy * this.scale.y;\n lt.d = this._sy * this.scale.y;\n\n lt.tx = this.position.x - ((this.pivot.x * lt.a) + (this.pivot.y * lt.c));\n lt.ty = this.position.y - ((this.pivot.x * lt.b) + (this.pivot.y * lt.d));\n this._currentLocalID = this._localID;\n\n // force an update..\n this._parentID = -1;\n }\n\n if (this._parentID !== parentTransform._worldID)\n {\n // concat the parent matrix with the objects transform.\n const pt = parentTransform.worldTransform;\n const wt = this.worldTransform;\n\n wt.a = (lt.a * pt.a) + (lt.b * pt.c);\n wt.b = (lt.a * pt.b) + (lt.b * pt.d);\n wt.c = (lt.c * pt.a) + (lt.d * pt.c);\n wt.d = (lt.c * pt.b) + (lt.d * pt.d);\n wt.tx = (lt.tx * pt.a) + (lt.ty * pt.c) + pt.tx;\n wt.ty = (lt.tx * pt.b) + (lt.ty * pt.d) + pt.ty;\n\n this._parentID = parentTransform._worldID;\n\n // update the id of the transform..\n this._worldID++;\n }\n }\n\n /**\n * Decomposes a matrix and sets the transforms properties based on it.\n * @param matrix - The matrix to decompose\n */\n setFromMatrix(matrix: Matrix): void\n {\n matrix.decompose(this);\n this._localID++;\n }\n\n /** The rotation of the object in radians. */\n get rotation(): number\n {\n return this._rotation;\n }\n\n set rotation(value: number)\n {\n if (this._rotation !== value)\n {\n this._rotation = value;\n this.updateSkew();\n }\n }\n}\n\nif (process.env.DEBUG)\n{\n Transform.prototype.toString = function toString(): string\n {\n return `[@pixi/math:Transform `\n + `position=(${this.position.x}, ${this.position.y}) `\n + `rotation=${this.rotation} `\n + `scale=(${this.scale.x}, ${this.scale.y}) `\n + `skew=(${this.skew.x}, ${this.skew.y}) `\n + `]`;\n };\n}\n"],"names":[],"mappings":"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"}