class TransferFloor { float tileRes = 100; float ratio = .5; float x; float y; float slide_val = 0; float one_tile = 0; int w; Tile[] tiles; PImage[] textures; TransferFloor(float ix, float iy, int iw, float itr, float ir) { x = ix; y = iy; w = iw; setTileRes(itr); setRatio(ir); tiles = new Tile[w]; textures = new PImage[0]; } void setTileRes(float itr) { tileRes = itr; updateOT(); } void setRatio(float ir) { ratio = ir; updateOT(); } void updateOT() { one_tile = sqrt(pow(tileRes / 2,2) + pow(ratio * tileRes / 2, 2)); } void display() { noFill(); stroke(0, 250, 0); strokeWeight(.5); pushMatrix(); float slide_off = sign(slide_val) * sqrt((slide_val * slide_val) / (ratio * ratio + 1)); translate(x + slide_off, y + ratio * slide_off); for(int i = w - 1; i >= 0; i--) { pushMatrix(); translate((i * tileRes / 2), - (i * tileRes * ratio / 2)); PImage im = textures[0]; if(tiles[i].tile != -1) im = textures[tiles[i].tile]; tiles[i].display(im); popMatrix(); } popMatrix(); } int sign(float val) { if(val == 0) { return 1; } return round((val / (abs(val)))); } void addTexture(String newTex) { PImage[] tempArray = new PImage[(textures.length + 1)]; for(int i = 0; i < textures.length; i++) { tempArray[i] = textures[i]; } tempArray[tempArray.length - 1] = loadImage(newTex); textures = tempArray; } void addTextureWithMask(String newTex, String newMask) { PImage img = loadImage(newTex); img.mask(loadImage(newMask)); PImage[] tempArray = new PImage[(textures.length + 1)]; for(int i = 0; i < textures.length; i++) { tempArray[i] = textures[i]; } tempArray[tempArray.length - 1] = img; textures = tempArray; } void fillFloor(int tex) { while(plusTile(tex)) { // pretty neat, huh? } } float[] getTileLoc(int tx) { float i = sqrt((one_tile * tx * one_tile * tx) / (ratio * ratio + 1)); float u = sqrt((one_tile * one_tile) / (ratio * ratio + 1)); float[] retFloats = {i + u, ratio * (i - u)}; return retFloats; } float getTileX(int tx, int ty) { return sqrt((one_tile * tx * one_tile * tx) / (ratio * ratio + 1)) + sqrt((one_tile * one_tile) / (ratio * ratio + 1)); } float getTileY(int tx, int ty) { return ratio * (sqrt((one_tile * tx * one_tile * tx) / (ratio * ratio + 1)) - sqrt((one_tile * one_tile) / (ratio * ratio + 1))); } boolean plusTile(int tex) { for(int i = 0; i < w; i++) { if(tiles[i] == null) { tiles[i] = new Tile(1, 1, tex, tileRes, ratio); return true; } } return false; } void slide(float d) { slide_val += d; } Tile[] shift(Tile[] in) { Tile[] ret_row = tiles; tiles = in; return ret_row; } }