- cubes[cubeIndex++] = new Cube(200, 0, 10, 0, 0, 0);
- cubes[cubeIndex++] = new Cube(205, Cube.EDGE_HEIGHT, 0, 0, 20, 0);
- cubes[cubeIndex++] = new Cube(200, 2*Cube.EDGE_HEIGHT, 4, 0, 0, 0);
- cubes[cubeIndex++] = new Cube(195, 3*Cube.EDGE_HEIGHT, 8, 0, -20, 0);
-
- cubes[cubeIndex++] = new Cube(10, 0 , Cube.EDGE_HEIGHT + 10, 0, 40, 0);
- cubes[cubeIndex++] = new Cube(3, Cube.EDGE_HEIGHT, Cube.EDGE_HEIGHT + 8, 0, 20, 0);
- cubes[cubeIndex++] = new Cube(0, 2*Cube.EDGE_HEIGHT, Cube.EDGE_HEIGHT + 10, 0, 40, 0);
- cubes[cubeIndex++] = new Cube(0, 3*Cube.EDGE_HEIGHT, Cube.EDGE_HEIGHT + 10, 0, 60, 0);
- cubes[cubeIndex++] = new Cube(0, 4*Cube.EDGE_HEIGHT, Cube.EDGE_HEIGHT + 10, 0, 40, 0);
-
- cubes[cubeIndex++] = new Cube(20, 0, 2*Cube.EDGE_HEIGHT + 18, 0, 40, 0);
- cubes[cubeIndex++] = new Cube(30, Cube.EDGE_HEIGHT, 2*Cube.EDGE_HEIGHT + 18, 0, 20, 0);
- cubes[cubeIndex++] = new Cube(25, 2*Cube.EDGE_HEIGHT, 2*Cube.EDGE_HEIGHT + 18, 0, 40, 0);
- cubes[cubeIndex++] = new Cube(30, 3*Cube.EDGE_HEIGHT, 2*Cube.EDGE_HEIGHT + 18, 0, 60, 0);
- cubes[cubeIndex++] = new Cube(32, 4*Cube.EDGE_HEIGHT, 2*Cube.EDGE_HEIGHT + 18, 0, 40, 0);
-
- cubes[cubeIndex++] = new Cube(210, 0, Cube.EDGE_HEIGHT + 15, 0, 40, 0);
- cubes[cubeIndex++] = new Cube(215, Cube.EDGE_HEIGHT, Cube.EDGE_HEIGHT + 15, 0, 20, 0);
- cubes[cubeIndex++] = new Cube(218, 2*Cube.EDGE_HEIGHT, Cube.EDGE_HEIGHT + 15, 0, 40, 0);
- cubes[cubeIndex++] = new Cube(213, 3*Cube.EDGE_HEIGHT, Cube.EDGE_HEIGHT + 15, 0, 60, 0);
- cubes[cubeIndex++] = new Cube(210, 4*Cube.EDGE_HEIGHT, Cube.EDGE_HEIGHT + 15, 0, 40, 0);
-
- cubes[cubeIndex++] = new Cube(210, 0, 2*Cube.EDGE_HEIGHT + 25, 0, 40, 0);
- cubes[cubeIndex++] = new Cube(215, Cube.EDGE_HEIGHT, 2*Cube.EDGE_HEIGHT + 25, 0, 20, 0);
- cubes[cubeIndex++] = new Cube(212, 2*Cube.EDGE_HEIGHT, 2*Cube.EDGE_HEIGHT + 25, 0, 40, 0);
- cubes[cubeIndex++] = new Cube(215, 3*Cube.EDGE_HEIGHT, 2*Cube.EDGE_HEIGHT + 25, 0, 60, 0);
- cubes[cubeIndex++] = new Cube(210, 4*Cube.EDGE_HEIGHT, 2*Cube.EDGE_HEIGHT + 25, 0, 40, 0);
-
- return cubes;
+// new TowerMapping(200, 0, 0, new float[][] {
+// {STACKED_RELATIVE, 0, 10},
+// {STACKED_RELATIVE, 5, 0, 20},
+// {STACKED_RELATIVE, 0, 4},
+// {STACKED_RELATIVE, -5, 8, -20},
+// {STACKED_RELATIVE, 0, 3},
+// }),
+
+// new TowerMapping(0, 0, Cube.EDGE_HEIGHT + 10, new float[][] {
+// {STACKED_RELATIVE, 10, 0, 40},
+// {STACKED_RELATIVE, 3, -2, 20},
+// {STACKED_RELATIVE, 0, 0, 40},
+// {STACKED_RELATIVE, 0, 0, 60},
+// {STACKED_RELATIVE, 0, 0, 40},
+// }),
+
+ new TowerMapping(20, 0, 2*Cube.EDGE_HEIGHT + 18, new float[][] {
+ {STACKED_RELATIVE, 0, 0, 40},
+ {STACKED_RELATIVE, 10, 0, 20},
+ {STACKED_RELATIVE, 5, 0, 40},
+ {STACKED_RELATIVE, 10, 0, 60},
+ {STACKED_RELATIVE, 12, 0, 40},
+ }),
+
+// new TowerMapping(210, 0, Cube.EDGE_HEIGHT + 15, new float[][] {
+// {STACKED_RELATIVE, 0, 0, 40},
+// {STACKED_RELATIVE, 5, 0, 20},
+// {STACKED_RELATIVE, 8, 0, 40},
+// {STACKED_RELATIVE, 3, 0, 60},
+// {STACKED_RELATIVE, 0, 0, 40},
+// }),
+
+ new TowerMapping(210, 0, 2*Cube.EDGE_HEIGHT + 25, new float[][] {
+ {STACKED_RELATIVE, 0, 0, 40},
+ {STACKED_RELATIVE, 5, 0, 20},
+ {STACKED_RELATIVE, 2, 0, 40},
+ {STACKED_RELATIVE, 5, 0, 60},
+ {STACKED_RELATIVE, 0, 0, 40},
+ }),
+
+ };
+
+ ArrayList<Tower> towerList = new ArrayList<Tower>();
+ ArrayList<Cube> tower;
+ Cube[] cubes = new Cube[79];
+ int cubeIndex = 1;
+ float tx, ty, tz, px, pz, ny, dx, dz, ry;
+ for (TowerMapping tm : mapping) {
+ tower = new ArrayList<Cube>();
+ px = tx = tm.x;
+ ny = ty = tm.y;
+ pz = tz = tm.z;
+ int ti = 0;
+ for (float[] cp : tm.cubePositions) {
+ float mode = cp[0];
+ if (mode == STACKED_RELATIVE) {
+ dx = cp[1];
+ dz = cp[2];
+ ry = (cp.length >= 4) ? cp[3] : 0;
+ tower.add(cubes[cubeIndex++] = new Cube(px = tx + dx, ny, pz = tz + dz, 0, ry, 0));
+ ny += Cube.EDGE_HEIGHT;
+ } else if (mode == STACKED_REL_SPIN) {
+ // Same as above but the front left of this cube is actually its back right for wiring
+ // TODO(mcslee): implement this
+ }
+ }
+ towerList.add(new Tower(tower));