summaryrefslogtreecommitdiffstats
path: root/core/src/ch/asynk/tankontank/engine/Orientation.java
diff options
context:
space:
mode:
Diffstat (limited to 'core/src/ch/asynk/tankontank/engine/Orientation.java')
-rw-r--r--core/src/ch/asynk/tankontank/engine/Orientation.java108
1 files changed, 108 insertions, 0 deletions
diff --git a/core/src/ch/asynk/tankontank/engine/Orientation.java b/core/src/ch/asynk/tankontank/engine/Orientation.java
new file mode 100644
index 0000000..5b5cbbb
--- /dev/null
+++ b/core/src/ch/asynk/tankontank/engine/Orientation.java
@@ -0,0 +1,108 @@
+package ch.asynk.tankontank.engine;
+
+// import java.util.Set;
+// import java.util.List;
+// import java.util.Vector;
+// import java.util.Iterator;
+// import java.util.LinkedHashSet;
+
+// import com.badlogic.gdx.Gdx;
+
+// import com.badlogic.gdx.utils.Disposable;
+
+// import com.badlogic.gdx.graphics.Texture;
+// import com.badlogic.gdx.graphics.g2d.Batch;
+// import com.badlogic.gdx.graphics.glutils.ShapeRenderer;
+
+// import com.badlogic.gdx.utils.Pool;
+// import com.badlogic.gdx.math.Vector2;
+// import com.badlogic.gdx.math.Vector3;
+// import com.badlogic.gdx.math.GridPoint2;
+// import com.badlogic.gdx.math.GridPoint3;
+// import com.badlogic.gdx.math.Matrix4;
+
+// import ch.asynk.tankontank.engine.gfx.Image;
+// import ch.asynk.tankontank.engine.gfx.Animation;
+// import ch.asynk.tankontank.engine.gfx.animations.AnimationSequence;
+// import ch.asynk.tankontank.engine.gfx.animations.RunnableAnimation;
+
+public enum Orientation
+{
+ ALL(0, 63),
+ KEEP(0, 0),
+ NORTH(270, 1),
+ NORTH_EAST(210, 2),
+ SOUTH_EAST(150, 4),
+ SOUTH(90, 8),
+ SOUTH_WEST (30, 16),
+ NORTH_WEST(330, 32);
+
+ public static int offset = 0;
+ public static float delta = 5f;
+ private final int r;
+ public final int s;
+
+ Orientation(int r, int s) { this.r = r; this.s = s; }
+
+ public float r() { return offset + r; }
+
+ public boolean isInSides(int sides)
+ {
+ return ((sides & s) == s);
+ }
+
+ public Orientation left()
+ {
+ if (this == NORTH) return NORTH_WEST;
+ else return fromSide(s >> 1);
+ }
+
+ public Orientation right()
+ {
+ if (this == NORTH_WEST) return NORTH;
+ else return fromSide(s << 1);
+ }
+
+ public Orientation opposite()
+ {
+ return left().left().left();
+ }
+
+ public int allBut()
+ {
+ return ALL.s & (s ^ 0xFFFF);
+ }
+
+ public int getFrontSides()
+ {
+ return s | left().s | right().s;
+ }
+
+ public int getBackSides()
+ {
+ return opposite().getFrontSides();
+ }
+
+ public static Orientation fromSide(int s)
+ {
+ if (s == 1) return NORTH;
+ else if (s == NORTH_EAST.s) return NORTH_EAST;
+ else if (s == SOUTH_EAST.s) return SOUTH_EAST;
+ else if (s == SOUTH.s) return SOUTH;
+ else if (s == SOUTH_WEST.s) return SOUTH_WEST;
+ else if (s == NORTH_WEST.s) return NORTH_WEST;
+ else return KEEP;
+ }
+
+ public static Orientation fromRotation(float r)
+ {
+ if (r < 0) r += 360f;
+ if ((r > (NORTH.r - 5f)) && (r < (NORTH.r + 5f))) return NORTH;
+ else if ((r > (NORTH_EAST.r - delta)) && (r < (NORTH_EAST.r + delta))) return NORTH_EAST;
+ else if ((r > (SOUTH_EAST.r - delta)) && (r < (SOUTH_EAST.r + delta))) return SOUTH_EAST;
+ else if ((r > (SOUTH.r - delta)) && (r < (SOUTH.r + delta))) return SOUTH;
+ else if ((r > (SOUTH_WEST.r - delta)) && (r < (SOUTH_WEST.r + delta))) return SOUTH_WEST;
+ else if ((r > (NORTH_WEST.r - delta)) && (r < (NORTH_WEST.r + delta))) return NORTH_WEST;
+ else return KEEP;
+ }
+}