| TetrixShape = { |
| NoShape:0, |
| ZShape:1, |
| SShape:2, |
| LineShape:3, |
| TShape:4, |
| SquareShape:5, |
| LShape:6, |
| MirroredLShape:7 |
| } |
| |
| TetrixCoordsTable = [ |
| [ [ 0, 0 ], [ 0, 0 ], [ 0, 0 ], [ 0, 0 ] ], |
| [ [ 0, -1 ], [ 0, 0 ], [ -1, 0 ], [ -1, 1 ] ], |
| [ [ 0, -1 ], [ 0, 0 ], [ 1, 0 ], [ 1, 1 ] ], |
| [ [ 0, -1 ], [ 0, 0 ], [ 0, 1 ], [ 0, 2 ] ], |
| [ [ -1, 0 ], [ 0, 0 ], [ 1, 0 ], [ 0, 1 ] ], |
| [ [ 0, 0 ], [ 1, 0 ], [ 0, 1 ], [ 1, 1 ] ], |
| [ [ -1, -1 ], [ 0, -1 ], [ 0, 0 ], [ 0, 1 ] ], |
| [ [ 1, -1 ], [ 0, -1 ], [ 0, 0 ], [ 0, 1 ] ] |
| ] |
| |
| function TetrixPiece() |
| { |
| this.shape = TetrixShape.NoShape; |
| } |
| |
| TetrixPiece.prototype.__defineGetter__( |
| "shape", |
| function() { |
| return this._shape; |
| } |
| ); |
| |
| TetrixPiece.prototype.__defineSetter__( |
| "shape", |
| function(shape) { |
| this._shape = shape; |
| this._coords = new Array(4); |
| for (var i = 0; i < 4; ++i) |
| this._coords[i] = TetrixCoordsTable[shape][i].slice(); |
| } |
| ); |
| |
| TetrixPiece.prototype.setRandomShape = function() { |
| this.shape = Math.floor(((Math.random() * 100000) % 7) + 1); |
| } |
| |
| TetrixPiece.prototype.getX = function(index) { |
| return this._coords[index][0]; |
| } |
| |
| TetrixPiece.prototype.getY = function(index) { |
| return this._coords[index][1]; |
| } |
| |
| TetrixPiece.prototype._setX = function(index, x) { |
| this._coords[index][0] = x; |
| } |
| |
| TetrixPiece.prototype._setY = function(index, y) { |
| this._coords[index][1] = y; |
| } |
| |
| TetrixPiece.prototype.__defineGetter__( |
| "minX", |
| function() { |
| var min = this._coords[0][0]; |
| for (var i = 1; i < 4; ++i) |
| min = Math.min(min, this._coords[i][0]); |
| return min; |
| } |
| ); |
| |
| TetrixPiece.prototype.__defineGetter__( |
| "maxX", |
| function() { |
| var max = this._coords[0][0]; |
| for (var i = 1; i < 4; ++i) |
| max = Math.max(max, this._coords[i][0]); |
| return max; |
| } |
| ); |
| |
| TetrixPiece.prototype.__defineGetter__( |
| "minY", |
| function() { |
| var min = this._coords[0][1]; |
| for (var i = 1; i < 4; ++i) |
| min = Math.min(min, this._coords[i][1]); |
| return min; |
| } |
| ); |
| |
| TetrixPiece.prototype.__defineGetter__( |
| "maxY", |
| function() { |
| var max = this._coords[0][1]; |
| for (var i = 1; i < 4; ++i) |
| max = Math.max(max, this._coords[i][1]); |
| return max; |
| } |
| ); |
| |
| TetrixPiece.prototype.rotatedLeft = function() { |
| var result = new TetrixPiece(); |
| if (this._shape == TetrixShape.SquareShape) { |
| result.shape = this._shape; |
| return result; |
| } |
| result._shape = this._shape; |
| for (var i = 0; i < 4; ++i) { |
| result._setX(i, this.getY(i)); |
| result._setY(i, -this.getX(i)); |
| } |
| return result; |
| } |
| |
| TetrixPiece.prototype.rotatedRight = function() { |
| var result = new TetrixPiece(); |
| if (this._shape == TetrixShape.SquareShape) { |
| result.shape = this._shape; |
| return result; |
| } |
| result._shape = this._shape; |
| for (var i = 0; i < 4; ++i) { |
| result._setX(i, -this.getY(i)); |
| result._setY(i, this.getX(i)); |
| } |
| return result; |
| } |