class Room { public static final int FRONT_WALL_NORMAL = 0; public static final int FRONT_WALL_IGNORE = 1; public static final int FRONT_WALL_HAS_HOLE = 2; private int FRONT_WALL = FRONT_WALL_NORMAL; public static final int BACK_WALL_NORMAL = 0; public static final int BACK_WALL_IGNORE = 1; public static final int BACK_WALL_HAS_HOLE = 2; private int BACK_WALL = FRONT_WALL_NORMAL; private Sequence controlSequence; private float x1, y1, x2, y2, z1, z2; private float hx1, hy1, hz1, hx2, hy2, hz2; private color outsideColor = color(64,64,64); private color c, floorColor; private float bright = 1.0; Room() { } public void setFrontWall(int fw) { FRONT_WALL = fw; } public void setBackWall(int bw) { BACK_WALL = bw; } public void setScreenRectangle(float _x1, float _y1, float _x2, float _y2, float _z1, float _z2) { x1 = _x1; y1 = _y1; z1 = -_z1; x2 = _x2; y2 = _y2; z2 = -_z2; } public void setHoleRectangle(float _hx1, float _hx2, float _hz1, float _hz2) { hx1 = _hx1; hx2 = _hx2; //hy1 = _hy1; //hy2 = _hy2; hz1 = -_hz1; hz2 = -_hz2; } public void setColor(color _c) { c = _c; floorColor = _c; } public void setFloorColor(color _c) { floorColor = _c; } public void updateBrightness(float p) { bright = p; } public void draw() { // DRAW FLOOR LINES: noStroke(); fill(0,0,0); pushMatrix(); translate(x1+(x2-x1)/2.0,z1-1,y1); box(x2-x1,2,2); popMatrix(); pushMatrix(); translate(x1+1,z1-1,y1+(y2-y1)/2.0); box(2,2,y2-y1); popMatrix(); pushMatrix(); translate(x2-1,z1-1,y1+(y2-y1)/2.0); box(2,2,y2-y1); popMatrix(); // draw back lines: pushMatrix(); translate(x1+1,z1+(z2-z1)/2.0,y1+1); box(2,z1-z2,2); popMatrix(); pushMatrix(); translate(x2-1,z1+(z2-z1)/2.0,y1+1); box(2,z1-z2,2); popMatrix(); noStroke(); fill(red(floorColor)*bright,green(floorColor)*bright,blue(floorColor)*bright); beginShape(QUADS); // FLOOR: vertex(x1,z1-0.5,y1); vertex(x2,z1-0.5,y1); vertex(x2,z1-0.5,y2); vertex(x1,z1-0.5,y2); fill(red(c)*bright,green(c)*bright,blue(c)*bright); // RIGHT WALL: vertex(x2-0.5,z1,y1); vertex(x2-0.5,z1,y2); vertex(x2-0.5,z2,y2); vertex(x2-0.5,z2,y1); // LEFT WALL: vertex(x1+0.5,z1,y1); vertex(x1+0.5,z1,y2); vertex(x1+0.5,z2,y2); vertex(x1+0.5,z2,y1); // BACK WALL: if (BACK_WALL == BACK_WALL_NORMAL) { vertex(x1,z1,y1+0.5); vertex(x1,z2,y1+0.5); vertex(x2,z2,y1+0.5); vertex(x2,z1,y1+0.5); } else if (BACK_WALL == BACK_WALL_HAS_HOLE) { vertex(x1,z1,y1+0.5); vertex(x1,z2,y1+0.5); vertex(hx1,z2,y1+0.5); vertex(hx1,z1,y1+0.5); vertex(hx2,z1,y1+0.5); vertex(hx2,z2,y1+0.5); vertex(x2,z2,y1+0.5); vertex(x2,z1,y1+0.5); vertex(hx1,z1,y1+0.5); vertex(hx2,z1,y1+0.5); vertex(hx2,hz1,y1+0.5); vertex(hx1,hz1,y1+0.5); vertex(hx1,z2,y1+0.5); vertex(hx2,z2,y1+0.5); vertex(hx2,hz2,y1+0.5); vertex(hx1,hz2,y1+0.5); } // FRONT WALL: if (FRONT_WALL == FRONT_WALL_NORMAL) { vertex(x1,z1,y2-0.5); vertex(x1,z2,y2-0.5); vertex(x2,z2,y2-0.5); vertex(x2,z1,y2-0.5); } else if (FRONT_WALL == FRONT_WALL_HAS_HOLE) { vertex(x1,z1,y2-0.5); vertex(x1,z2,y2-0.5); vertex(hx1,z2,y2-0.5); vertex(hx1,z1,y2-0.5); vertex(hx2,z1,y2-0.5); vertex(hx2,z2,y2-0.5); vertex(x2,z2,y2-0.5); vertex(x2,z1,y2-0.5); vertex(hx1,z1,y2-0.5); vertex(hx2,z1,y2-0.5); vertex(hx2,hz1,y2-0.5); vertex(hx1,hz1,y2-0.5); vertex(hx1,z2,y2-0.5); vertex(hx2,z2,y2-0.5); vertex(hx2,hz2,y2-0.5); vertex(hx1,hz2,y2-0.5); } endShape(); stroke(0,0,0); fill(outsideColor); // DRAW OUTSIDE: beginShape(QUADS); // FLOOR: vertex(x1,z1,y1); vertex(x2,z1,y1); vertex(x2,z1,y2); vertex(x1,z1,y2); // RIGHT WALL: vertex(x2,z1,y1); vertex(x2,z1,y2); vertex(x2,z2,y2); vertex(x2,z2,y1); // LEFT WALL: vertex(x1,z1,y1); vertex(x1,z1,y2); vertex(x1,z2,y2); vertex(x1,z2,y1); // BACK WALL: if (BACK_WALL == BACK_WALL_NORMAL) { vertex(x1,z1,y1); vertex(x1,z2,y1); vertex(x2,z2,y1); vertex(x2,z1,y1); } else if (BACK_WALL == BACK_WALL_HAS_HOLE) { vertex(x1,z1,y1); vertex(x1,z2,y1); vertex(hx1,z2,y1); vertex(hx1,z1,y1); vertex(hx2,z1,y1); vertex(hx2,z2,y1); vertex(x2,z2,y1); vertex(x2,z1,y1); vertex(hx1,z1,y1); vertex(hx2,z1,y1); vertex(hx2,hz1,y1); vertex(hx1,hz1,y1); vertex(hx1,z2,y1); vertex(hx2,z2,y1); vertex(hx2,hz2,y1); vertex(hx1,hz2,y1); } // FRONT WALL: if (FRONT_WALL == FRONT_WALL_NORMAL) { vertex(x1,z1,y2); vertex(x1,z2,y2); vertex(x2,z2,y2); vertex(x2,z1,y2); } else if (FRONT_WALL == FRONT_WALL_HAS_HOLE) { vertex(x1,z1,y2); vertex(x1,z2,y2); vertex(hx1,z2,y2); vertex(hx1,z1,y2); vertex(hx2,z1,y2); vertex(hx2,z2,y2); vertex(x2,z2,y2); vertex(x2,z1,y2); vertex(hx1,z1,y2); vertex(hx2,z1,y2); vertex(hx2,hz1,y2); vertex(hx1,hz1,y2); vertex(hx1,z2,y2); vertex(hx2,z2,y2); vertex(hx2,hz2,y2); vertex(hx1,hz2,y2); } endShape(); } }