mirror of
https://github.com/photonstorm/phaser
synced 2024-11-30 16:39:34 +00:00
275 lines
No EOL
6.9 KiB
TypeScript
275 lines
No EOL
6.9 KiB
TypeScript
/// <reference path="../_definitions.ts" />
|
|
|
|
/**
|
|
* Phaser - Mat3
|
|
*
|
|
* A 3x3 Matrix
|
|
*/
|
|
|
|
module Phaser {
|
|
|
|
export class Mat3 {
|
|
|
|
/**
|
|
* Creates a new Mat3 object.
|
|
* @class Mat3
|
|
* @constructor
|
|
* @return {Mat3} This object
|
|
**/
|
|
constructor() {
|
|
this.data = [1, 0, 0, 0, 1, 0, 0, 0, 1];
|
|
}
|
|
|
|
// Temporary vars used for internal calculations
|
|
private _a00: number;
|
|
private _a01: number;
|
|
private _a02: number;
|
|
private _a10: number;
|
|
private _a11: number;
|
|
private _a12: number;
|
|
private _a20: number;
|
|
private _a21: number;
|
|
private _a22: number;
|
|
|
|
public data: number[];
|
|
|
|
public get a00(): number {
|
|
return this.data[0];
|
|
}
|
|
|
|
public set a00(value: number) {
|
|
this.data[0] = value;
|
|
}
|
|
|
|
public get a01(): number {
|
|
return this.data[1];
|
|
}
|
|
|
|
public set a01(value: number) {
|
|
this.data[1] = value;
|
|
}
|
|
|
|
public get a02(): number {
|
|
return this.data[2];
|
|
}
|
|
|
|
public set a02(value: number) {
|
|
this.data[2] = value;
|
|
}
|
|
|
|
public get a10(): number {
|
|
return this.data[3];
|
|
}
|
|
|
|
public set a10(value: number) {
|
|
this.data[3] = value;
|
|
}
|
|
|
|
public get a11(): number {
|
|
return this.data[4];
|
|
}
|
|
|
|
public set a11(value: number) {
|
|
this.data[4] = value;
|
|
}
|
|
|
|
public get a12(): number {
|
|
return this.data[5];
|
|
}
|
|
|
|
public set a12(value: number) {
|
|
this.data[5] = value;
|
|
}
|
|
|
|
public get a20(): number {
|
|
return this.data[6];
|
|
}
|
|
|
|
public set a20(value: number) {
|
|
this.data[6] = value;
|
|
}
|
|
|
|
public get a21(): number {
|
|
return this.data[7];
|
|
}
|
|
|
|
public set a21(value: number) {
|
|
this.data[7] = value;
|
|
}
|
|
|
|
public get a22(): number {
|
|
return this.data[8];
|
|
}
|
|
|
|
public set a22(value: number) {
|
|
this.data[8] = value;
|
|
}
|
|
|
|
/**
|
|
* Copies the values from one Mat3 into this Mat3.
|
|
* @method copyFromMat3
|
|
* @param {any} source - The object to copy from.
|
|
* @return {Mat3} This Mat3 object.
|
|
**/
|
|
public copyFromMat3(source: Mat3): Mat3 {
|
|
|
|
this.data[0] = source.data[0];
|
|
this.data[1] = source.data[1];
|
|
this.data[2] = source.data[2];
|
|
this.data[3] = source.data[3];
|
|
this.data[4] = source.data[4];
|
|
this.data[5] = source.data[5];
|
|
this.data[6] = source.data[6];
|
|
this.data[7] = source.data[7];
|
|
this.data[8] = source.data[8];
|
|
|
|
return this;
|
|
}
|
|
|
|
/**
|
|
* Copies the upper-left 3x3 values into this Mat3.
|
|
* @method copyFromMat4
|
|
* @param {any} source - The object to copy from.
|
|
* @return {Mat3} This Mat3 object.
|
|
**/
|
|
public copyFromMat4(source: any): Mat3 {
|
|
|
|
this.data[0] = source[0];
|
|
this.data[1] = source[1];
|
|
this.data[2] = source[2];
|
|
this.data[3] = source[4];
|
|
this.data[4] = source[5];
|
|
this.data[5] = source[6];
|
|
this.data[6] = source[8];
|
|
this.data[7] = source[9];
|
|
this.data[8] = source[10];
|
|
|
|
return this;
|
|
}
|
|
|
|
/**
|
|
* Clones this Mat3 into a new Mat3
|
|
* @param {Mat3} out The output Mat3, if none is given a new Mat3 object will be created.
|
|
* @return {Mat3} The new Mat3
|
|
**/
|
|
public clone(out:Mat3 = new Phaser.Mat3): Mat3 {
|
|
|
|
out[0] = this.data[0];
|
|
out[1] = this.data[1];
|
|
out[2] = this.data[2];
|
|
out[3] = this.data[3];
|
|
out[4] = this.data[4];
|
|
out[5] = this.data[5];
|
|
out[6] = this.data[6];
|
|
out[7] = this.data[7];
|
|
out[8] = this.data[8];
|
|
|
|
return out;
|
|
|
|
}
|
|
|
|
/**
|
|
* Sets this Mat3 to the identity matrix.
|
|
* @method identity
|
|
* @param {any} source - The object to copy from.
|
|
* @return {Mat3} This Mat3 object.
|
|
**/
|
|
public identity(): Mat3 {
|
|
return this.setTo(1, 0, 0, 0, 1, 0, 0, 0, 1);
|
|
}
|
|
|
|
/**
|
|
* Translates this Mat3 by the given vector
|
|
**/
|
|
public translate(v:Phaser.Vec2): Mat3 {
|
|
|
|
this.a20 = v.x * this.a00 + v.y * this.a10 + this.a20;
|
|
this.a21 = v.x * this.a01 + v.y * this.a11 + this.a21;
|
|
this.a22 = v.x * this.a02 + v.y * this.a12 + this.a22;
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
private setTemps() {
|
|
|
|
this._a00 = this.data[0];
|
|
this._a01 = this.data[1];
|
|
this._a02 = this.data[2];
|
|
this._a10 = this.data[3];
|
|
this._a11 = this.data[4];
|
|
this._a12 = this.data[5];
|
|
this._a20 = this.data[6];
|
|
this._a21 = this.data[7];
|
|
this._a22 = this.data[8];
|
|
|
|
}
|
|
|
|
/**
|
|
* Rotates this Mat3 by the given angle (given in radians)
|
|
**/
|
|
public rotate(rad:number): Mat3 {
|
|
|
|
this.setTemps();
|
|
|
|
var s = GameMath.sinA[rad];
|
|
var c = GameMath.cosA[rad];
|
|
|
|
this.data[0] = c * this._a00 + s * this._a10;
|
|
this.data[1] = c * this._a01 + s * this._a10;
|
|
this.data[2] = c * this._a02 + s * this._a12;
|
|
|
|
this.data[3] = c * this._a10 - s * this._a00;
|
|
this.data[4] = c * this._a11 - s * this._a01;
|
|
this.data[5] = c * this._a12 - s * this._a02;
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
/**
|
|
* Scales this Mat3 by the given vector
|
|
**/
|
|
public scale(v: Vec2): Mat3 {
|
|
|
|
this.data[0] = v.x * this.data[0];
|
|
this.data[1] = v.x * this.data[1];
|
|
this.data[2] = v.x * this.data[2];
|
|
|
|
this.data[3] = v.y * this.data[3];
|
|
this.data[4] = v.y * this.data[4];
|
|
this.data[5] = v.y * this.data[5];
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
public setTo(a00: number, a01: number, a02: number, a10: number, a11: number, a12: number, a20: number, a21: number, a22: number): Mat3 {
|
|
|
|
this.data[0] = a00;
|
|
this.data[1] = a01;
|
|
this.data[2] = a02;
|
|
this.data[3] = a10;
|
|
this.data[4] = a11;
|
|
this.data[5] = a12;
|
|
this.data[6] = a20;
|
|
this.data[7] = a21;
|
|
this.data[8] = a22;
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
/**
|
|
* Returns a string representation of this object.
|
|
* @method toString
|
|
* @return {string} a string representation of the object.
|
|
**/
|
|
public toString(): string {
|
|
return '';
|
|
//return "[{Vec2 (x=" + this.x + " y=" + this.y + ")}]";
|
|
}
|
|
|
|
}
|
|
|
|
} |