examples/script/qstetrix/tetrixpiece.js
changeset 0 1918ee327afb
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/examples/script/qstetrix/tetrixpiece.js	Mon Jan 11 14:00:40 2010 +0000
@@ -0,0 +1,131 @@
+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;
+}