// Path: core/src/com/galvarez/ttw/utils/FloatPair.java
// public final class FloatPair {
// 
//   public final float x, y;
// 
//   public FloatPair(float x, float y) {
//     this.x = x;
//     this.y = y;
//   }
// 
//   @Override
//   public boolean equals(Object obj) {
//     if (obj instanceof FloatPair)
//       return equals((FloatPair) obj);
//     return false;
//   }
// 
//   public boolean equals(FloatPair p) {
//     return x == p.x && y == p.y;
//   }
// 
//   @Override
//   public String toString() {
//     return "(" + x + "," + y + ")";
//   }
// }
// 
// Path: core/src/com/galvarez/ttw/utils/MyMath.java
// public class MyMath {
// 	public static int min(int a, int b) {
// 		if (a < b) return a;
// 		return b;
// 	}
// 	
// 	public static int min(int a, int b, int c) {
// 		if (min(a,b) < c) return min(a,b);
// 		return c;
// 	}
// 	
// 	public static int max(int a, int b) {
// 		if (a > b) return a;
// 		return b;
// 	}
// 	
// 	public static int pow(int a, int b) {
// 		if (b > 1) return a*pow(a,b-1);
// 		else return a;
// 	}
// }


import com.badlogic.gdx.graphics.OrthographicCamera;
import com.badlogic.gdx.math.Vector3;
import com.galvarez.ttw.utils.FloatPair;
import com.galvarez.ttw.utils.MyMath;
    if ((dx) % 2 == 0) {
      // distance from even->even or odd->odd column
      // important to know since evens and odds are offset
      return MyMath.max(dx, dx / 2 + dy);
    }

    // Otherwise the distance must be even->odd
    else if (((x0 % 2 == 0) && (y0 > y1)) || ((x1 % 2 == 0) && (y1 > y0))) {
      // even on top
      return MyMath.max(dx, (dx - 1) / 2 + dy);
    }
    // otherwise odd must be on top
    return MyMath.max(dx, (dx + 1) / 2 + dy);
  }

  public static MapPosition window2world(float x, float y, OrthographicCamera camera) {
    Vector3 pos = new Vector3(x, y, 0);
    camera.unproject(pos);
    int posx = (int) ((pos.x - 6f) / col_multiple);
    int posy = (int) ((pos.y - (float) row_multiple * (posx % 2) / 2) / row_multiple);
    return new MapPosition(posx, posy);
  }

  public static MapPosition libgdx2world(float x, float y) {
    Vector3 pos = new Vector3(x, y, 0);
    int posx = (int) ((pos.x - 6f) / col_multiple);
    int posy = (int) ((pos.y - (float) row_multiple * (posx % 2) / 2) / row_multiple);
    return new MapPosition(posx, posy);
  }

// Path: core/src/com/galvarez/ttw/utils/FloatPair.java
// public final class FloatPair {
// 
//   public final float x, y;
// 
//   public FloatPair(float x, float y) {
//     this.x = x;
//     this.y = y;
//   }
// 
//   @Override
//   public boolean equals(Object obj) {
//     if (obj instanceof FloatPair)
//       return equals((FloatPair) obj);
//     return false;
//   }
// 
//   public boolean equals(FloatPair p) {
//     return x == p.x && y == p.y;
//   }
// 
//   @Override
//   public String toString() {
//     return "(" + x + "," + y + ")";
//   }
// }
// 
// Path: core/src/com/galvarez/ttw/utils/MyMath.java
// public class MyMath {
// 	public static int min(int a, int b) {
// 		if (a < b) return a;
// 		return b;
// 	}
// 	
// 	public static int min(int a, int b, int c) {
// 		if (min(a,b) < c) return min(a,b);
// 		return c;
// 	}
// 	
// 	public static int max(int a, int b) {
// 		if (a > b) return a;
// 		return b;
// 	}
// 	
// 	public static int pow(int a, int b) {
// 		if (b > 1) return a*pow(a,b-1);
// 		else return a;
// 	}
// }


// Path: core/src/com/galvarez/ttw/model/map/MapTools.java
import com.badlogic.gdx.graphics.OrthographicCamera;
import com.badlogic.gdx.math.Vector3;
import com.galvarez.ttw.utils.FloatPair;
import com.galvarez.ttw.utils.MyMath;

    if ((dx) % 2 == 0) {
      // distance from even->even or odd->odd column
      // important to know since evens and odds are offset
      return MyMath.max(dx, dx / 2 + dy);
    }

    // Otherwise the distance must be even->odd
    else if (((x0 % 2 == 0) && (y0 > y1)) || ((x1 % 2 == 0) && (y1 > y0))) {
      // even on top
      return MyMath.max(dx, (dx - 1) / 2 + dy);
    }
    // otherwise odd must be on top
    return MyMath.max(dx, (dx + 1) / 2 + dy);
  }

  public static MapPosition window2world(float x, float y, OrthographicCamera camera) {
    Vector3 pos = new Vector3(x, y, 0);
    camera.unproject(pos);
    int posx = (int) ((pos.x - 6f) / col_multiple);
    int posy = (int) ((pos.y - (float) row_multiple * (posx % 2) / 2) / row_multiple);
    return new MapPosition(posx, posy);
  }

  public static MapPosition libgdx2world(float x, float y) {
    Vector3 pos = new Vector3(x, y, 0);
    int posx = (int) ((pos.x - 6f) / col_multiple);
    int posy = (int) ((pos.y - (float) row_multiple * (posx % 2) / 2) / row_multiple);
    return new MapPosition(posx, posy);
  }

  public static FloatPair world2window(float x, float y) {