class Game { Floor main_floor; TransferFloor in_floor; TransferFloor out_floor; Crap[] surplus = new Crap[0]; float maxPop = .5; int crapPerRow = 3; float[] weights = {10, 3, 1}; float total; int main_w = 5; int main_l = 10; float main_x = 8; float main_y = 250; int stage_X = 1200; int stage_Y = 700; float tileRes = 150; float ratio = .5; float travel = 700; float drift_speed = 1; float travel_speed; float inX; float inY; float outX; float outY; int cur_dir = -1; PFont visitor; boolean paused = false; int NORTH = 0; int EAST = 1; int SOUTH = 2; int WEST = 3; Game() { visitor = loadFont("VisitorTT2BRK-72.vlw"); main_floor = new Floor(main_x, main_y, main_w, main_l, tileRes, ratio); in_floor = new TransferFloor(0, 0, main_w, tileRes, ratio); out_floor = new TransferFloor(0, 0, main_w, tileRes, ratio); float back_l = sqrt(pow(main_floor.one_tile * (main_l), 2) / (pow(ratio, 2) + 1)); outX = main_x + back_l; outY = main_y + back_l * ratio; inX = main_x; inY = main_y + travel; in_floor.x = inX; in_floor.y = inY; out_floor.x = outX; out_floor.y = outY; travel_speed = travel / (main_floor.one_tile / drift_speed); String t_image = "32_diag.gif"; String t_mask = "32_diag_mask.gif"; String t_image_b = "16_square.gif"; for(int i = 0; i < weights.length; i++) { total += weights[i]; } //main_floor.addTextureWithMask(t_image, t_mask); //in_floor.addTextureWithMask(t_image, t_mask); //out_floor.addTextureWithMask(t_image, t_mask); main_floor.addTexture(t_image_b); in_floor.addTexture(t_image_b); out_floor.addTexture(t_image_b); main_floor.fillFloor(0); in_floor.fillFloor(0); out_floor.fillFloor(0); } boolean display() { if(paused) { background(0); textAlign(CENTER); fill(255); textFont(visitor, 72); text("PAUSED", width / 2, height / 2); textFont(visitor, 24); text("(press 'p' to continue)", width / 2, 20 + height / 2); }else{ background(0); pushMatrix(); switch(cur_dir) { case 0: main_floor.movePlayer(NORTH); break; case 1: main_floor.movePlayer(EAST); break; case 2: main_floor.movePlayer(SOUTH); break; case 3: main_floor.movePlayer(WEST); break; } main_floor.slide(drift_speed); out_floor.y += travel_speed; in_floor.y -= travel_speed; if(abs(main_floor.slide_val) >= main_floor.one_tile) { main_floor.slide_val = 0; in_floor.y = inY; out_floor.y = outY; Tile[] new_row = new Tile[main_w]; for(int i = 0; i < main_w; i++) { new_row[i] = new Tile(1, 1, 0, tileRes, ratio); } for(int i = 0; i < crapPerRow; i++) { new_row[round(random(main_w - 1))].pushCrap(newCrap()); } boolean row_avail = true; for(int i = 0; row_avail && i <= surplus.length / 2 && surplus.length > 0; i++) { row_avail = new_row[round(random(main_w - 1))].pushCrap(openPopSurplus()); } loadSurplus(out_floor.shift(main_floor.shift(in_floor.shift(new_row)))); if(main_floor.player.x_index >= main_floor.h) { return true; } } in_floor.display(); main_floor.display(); out_floor.display(); popMatrix(); } return false; } void showCoords(float ix, float iy) { textFont(visitor, 24); fill(200, 0, 0); stroke(200, 0, 0); strokeWeight(2); point(ix, iy); text("(" + ix + "," + iy + ")", ix + 5, iy); } void keyPressedRec() { switch(keyCode) { case UP: cur_dir = 0; break; case RIGHT: cur_dir = 1; break; case DOWN: cur_dir = 2; break; case LEFT: cur_dir = 3; break; case 80: if(paused) { paused = false; }else{ paused = true; } break; case 32: main_floor.eatItem(); default: cur_dir = -1; break; } } void keyReleasedRec() { cur_dir = -1; } void pushSurplus(Crap in) { Crap tSurp[] = new Crap[surplus.length + 1]; for(int i = 0; i < surplus.length; i++) { tSurp[i] = surplus[i]; } tSurp[surplus.length] = in; surplus = tSurp; } Crap openPopSurplus() { if(surplus.length > 0) { Crap tSurp[] = new Crap[surplus.length - 1]; Crap retCrap = surplus[0]; for(int i = 1; i < surplus.length; i++) { tSurp[i - 1] = surplus[i]; } surplus = tSurp; return retCrap; } return null; } Crap newCrap() { float pickNum = random(total); int i = 0; float accum = weights[0]; if(pickNum <= accum) { return createRecyclable(); }else{ i++; accum += weights[i]; if(pickNum <= accum) { return createPlate(); }else{ i++; accum += weights[i]; if(pickNum <= accum) { return createLaundry(); } } } return createPlate(); } void loadSurplus(Tile[] stuff) { if(stuff != null) { for(int i = 0; i < stuff.length; i++) { for(int u = 0; u < stuff[i].mess.length; u++) { pushSurplus(stuff[i].mess[u]); } } } } Crap createRecyclable() { Crap retCrap = new Crap(tileRes, ratio); retCrap.c = color(31, 240, 47); retCrap.prep_time = 60; return retCrap; } Crap createPlate() { Crap retCrap = new Crap(tileRes, ratio); retCrap.c = color(213, 240, 235); retCrap.prep_time = 120; return retCrap; } Crap createLaundry() { Crap retCrap = new Crap(tileRes, ratio); retCrap.c = color(242, 231, 105); retCrap.prep_time = 300; return retCrap; } }