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; }