// Path: core/src/com/github/fauu/helix/util/IntVector3.java
// public class IntVector3 {
// 
//   public int x;
// 
//   public int y;
// 
//   public int z;
// 
//   public IntVector3() { }
// 
//   public IntVector3(int x, int y, int z) {
//     set(x, y, z);
//   }
// 
//   public IntVector3(IntVector2 source) {
//     set(source.x, source.y, 0);
//   }
// 
//   public void set(int x, int y, int z) {
//     this.x = x;
//     this.y = y;
//     this.z = z;
//   }
// 
//   public void set(IntVector3 source) {
//     set(source.x, source.y, source.z);
//   }
// 
//   public IntVector3 add(IntVector2 other) {
//     set(x + other.x, y + other.y, z);
// 
//     return this;
//   }
// 
//   public IntVector3 add(IntVector3 other) {
//     set(x + other.x, y + other.y, z + other.z);
// 
//     return this;
//   }
// 
//   public IntVector3 cpy() {
//     return new IntVector3(x, y, z);
//   }
// 
//   public Vector3 toVector3() {
//     return new Vector3(x, y, z);
//   }
// 
//   public IntVector2 toIntVector2() {
//     return new IntVector2(x, y);
//   }
// 
// }


import com.badlogic.gdx.graphics.PerspectiveCamera;
import com.badlogic.gdx.math.Vector3;
import com.github.fauu.helix.util.IntVector3;
import com.badlogic.gdx.Gdx;
  }

  public HelixCamera(float fieldOfView,
                     Vector3 targetPosition,
                     float near,
                     float far) {
    super(fieldOfView, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());

    this.targetPosition = new Vector3();
    this.near = near;
    this.far = far;
    this.translate(0, -13, 17);
    this.lookAt(0, 0, 0);

    targetPositionDelta = new Vector3();

    translateTargetPosition(targetPosition.add(DEFAULT_TARGET_DISPLACEMENT));
  }

  public void translateTargetPosition(Vector3 translation) {
    translateTargetPosition(translation.x, translation.y, translation.z);
  }

  public void translateTargetPosition(float x, float y, float z) {
    super.translate(x, y, z);

    targetPosition.add(x, y, z);
    targetPositionDelta.set(x, y, z);
  }

// Path: core/src/com/github/fauu/helix/util/IntVector3.java
// public class IntVector3 {
// 
//   public int x;
// 
//   public int y;
// 
//   public int z;
// 
//   public IntVector3() { }
// 
//   public IntVector3(int x, int y, int z) {
//     set(x, y, z);
//   }
// 
//   public IntVector3(IntVector2 source) {
//     set(source.x, source.y, 0);
//   }
// 
//   public void set(int x, int y, int z) {
//     this.x = x;
//     this.y = y;
//     this.z = z;
//   }
// 
//   public void set(IntVector3 source) {
//     set(source.x, source.y, source.z);
//   }
// 
//   public IntVector3 add(IntVector2 other) {
//     set(x + other.x, y + other.y, z);
// 
//     return this;
//   }
// 
//   public IntVector3 add(IntVector3 other) {
//     set(x + other.x, y + other.y, z + other.z);
// 
//     return this;
//   }
// 
//   public IntVector3 cpy() {
//     return new IntVector3(x, y, z);
//   }
// 
//   public Vector3 toVector3() {
//     return new Vector3(x, y, z);
//   }
// 
//   public IntVector2 toIntVector2() {
//     return new IntVector2(x, y);
//   }
// 
// }


// Path: core/src/com/github/fauu/helix/graphics/HelixCamera.java
import com.badlogic.gdx.graphics.PerspectiveCamera;
import com.badlogic.gdx.math.Vector3;
import com.github.fauu.helix.util.IntVector3;
import com.badlogic.gdx.Gdx;

  }

  public HelixCamera(float fieldOfView,
                     Vector3 targetPosition,
                     float near,
                     float far) {
    super(fieldOfView, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());

    this.targetPosition = new Vector3();
    this.near = near;
    this.far = far;
    this.translate(0, -13, 17);
    this.lookAt(0, 0, 0);

    targetPositionDelta = new Vector3();

    translateTargetPosition(targetPosition.add(DEFAULT_TARGET_DISPLACEMENT));
  }

  public void translateTargetPosition(Vector3 translation) {
    translateTargetPosition(translation.x, translation.y, translation.z);
  }

  public void translateTargetPosition(float x, float y, float z) {
    super.translate(x, y, z);

    targetPosition.add(x, y, z);
    targetPositionDelta.set(x, y, z);
  }

  public void updateTargetPosition(IntVector3 logicalPosition) {