void calculateViewport() {
  //fokkin mahjick viewport calculateion scale translate tath bitch back and map to mouse
  viewportX = map(-translateX/scaleFactor, 0, width, 0, renderer.width);
  viewportW = map((-translateX+width)/scaleFactor - (-translateX/scaleFactor), 0, width, 0, renderer.width);
  viewportR = map((-translateX+width)/scaleFactor, 0, width, 0, renderer.width);
  viewportY = map(-translateY/scaleFactor, 0, height, 0, renderer.height);
  viewportH = map((-translateY+height)/scaleFactor - (-translateY/scaleFactor), 0, height, 0, renderer.height);
  viewportB = map((-translateY+height)/scaleFactor, 0, height, 0, renderer.height);
  viewX = map(mouseX, 0, width, viewportX, viewportR);
  viewY = map(mouseY, 0, height, viewportY, viewportB);
}
float viewyfyX(float x) {
  return map(x, 0, width, viewportX, viewportR);
}
float viewyfyY(float y) {
  return map(y, 0, height, viewportY, viewportB);
}

void zoom(float delta) {
  translateX -= mouseX;
  translateY -= mouseY;
  scaleFactor *= delta;
  translateX *= delta;
  translateY *= delta;
  translateX += mouseX;
  translateY += mouseY;
  collisionDetection();
}

void collisionDetection() {
  while (translateX*scaleFactor > 0.0) translateX--;
  while (translateY*scaleFactor > 0.0) translateY--;
  while (translateX+width*scaleFactor < width) translateX++;
  while (translateY+height*scaleFactor < height) translateY++;
}

void reset() {
  scaleFactor = 1;
  translateX = 0.0;
  translateY = 0.0;
}