From 655ac88f4e73b2df532a451aedf5a561ea1b0d2c Mon Sep 17 00:00:00 2001
From: Pacien TRAN-GIRARD
Date: Sat, 21 Nov 2015 10:36:18 +0100
Subject: Import project structure
---
src/ch/epfl/maze/util/Direction.java | 235 +++++++++++++++++++++++++++++++++++
1 file changed, 235 insertions(+)
create mode 100644 src/ch/epfl/maze/util/Direction.java
(limited to 'src/ch/epfl/maze/util/Direction.java')
diff --git a/src/ch/epfl/maze/util/Direction.java b/src/ch/epfl/maze/util/Direction.java
new file mode 100644
index 0000000..a75ba7f
--- /dev/null
+++ b/src/ch/epfl/maze/util/Direction.java
@@ -0,0 +1,235 @@
+package ch.epfl.maze.util;
+
+/**
+ * Directions that an animal can take to move. They represent the four cardinal
+ * points ({@code DOWN, UP, RIGHT, LEFT}) from the frame of reference of the
+ * labyrinth, plus a default one : {@code NONE}.
+ *
+ */
+
+public enum Direction {
+ DOWN, UP, RIGHT, LEFT, NONE;
+
+ /**
+ * Returns the integer value of the direction
+ *
+ * @return Integer value of the direction
+ */
+
+ public int intValue() {
+ switch (this) {
+ case DOWN:
+ return 0;
+
+ case UP:
+ return 1;
+
+ case RIGHT:
+ return 2;
+
+ case LEFT:
+ return 3;
+
+ case NONE:
+ default:
+ return 4;
+ }
+ }
+
+ /**
+ * Converts the direction into an orthonormal vector, when possible.
+ *
+ * @return Orthonormal {@code Vector2D} that represents the direction.
+ */
+
+ public Vector2D toVector() {
+ switch (this) {
+ case DOWN:
+ return new Vector2D(0, 1);
+
+ case UP:
+ return new Vector2D(0, -1);
+
+ case RIGHT:
+ return new Vector2D(1, 0);
+
+ case LEFT:
+ return new Vector2D(-1, 0);
+
+ case NONE:
+ default:
+ return new Vector2D(0, 0);
+ }
+ }
+
+ /**
+ * Reverses the direction.
+ *
+ * @return The opposite direction.
+ */
+
+ public Direction reverse() {
+ switch (this) {
+ case DOWN:
+ return UP;
+
+ case UP:
+ return DOWN;
+
+ case RIGHT:
+ return LEFT;
+
+ case LEFT:
+ return RIGHT;
+
+ case NONE:
+ default:
+ return NONE;
+ }
+ }
+
+ /**
+ * Determines whether the argument is the opposite of another.
+ *
+ * @param d
+ * The direction to compare with
+ * @return true if the direction is the opposite the argument,
+ * false otherwise
+ */
+
+ public boolean isOpposite(Direction d) {
+ return this == d.reverse();
+ }
+
+ /**
+ * Converts the argument relative to the frame of reference given by the
+ * direction that calls the method.
+ *
+ * @param dir
+ * The direction to convert
+ * @return The direction converted to the frame of reference given by the
+ * direction called.
+ */
+
+ public Direction relativeDirection(Direction dir) {
+ switch (this) {
+ case DOWN:
+ return dir.reverse();
+
+ case UP:
+ return dir;
+
+ case RIGHT:
+ return dir.rotateLeft();
+
+ case LEFT:
+ return dir.rotateRight();
+
+ case NONE:
+ default:
+ return NONE;
+ }
+ }
+
+ /**
+ * Converts the argument back to the frame of reference of the labyrinth
+ *
+ * @param dir
+ * The direction to convert back
+ * @return The direction converted back to the frame of reference of the
+ * labyrinth
+ */
+
+ public Direction unRelativeDirection(Direction dir) {
+ switch (this) {
+ case DOWN:
+ return dir.reverse();
+
+ case UP:
+ return dir;
+
+ case RIGHT:
+ return dir.rotateRight();
+
+ case LEFT:
+ return dir.rotateLeft();
+
+ case NONE:
+ default:
+ return NONE;
+ }
+ }
+
+ /**
+ * Rotates the direction to the right.
+ *
+ * @return The rotated direction to the right
+ */
+
+ public Direction rotateRight() {
+ switch (this) {
+ case DOWN:
+ return LEFT;
+
+ case UP:
+ return RIGHT;
+
+ case RIGHT:
+ return DOWN;
+
+ case LEFT:
+ return UP;
+
+ case NONE:
+ default:
+ return NONE;
+ }
+ }
+
+ /**
+ * Rotates the direction to the left.
+ *
+ * @return The rotated direction to the left
+ */
+
+ public Direction rotateLeft() {
+ switch (this) {
+ case DOWN:
+ return RIGHT;
+
+ case UP:
+ return LEFT;
+
+ case RIGHT:
+ return UP;
+
+ case LEFT:
+ return DOWN;
+
+ case NONE:
+ default:
+ return NONE;
+ }
+ }
+
+ /**
+ * Applies the change of coordinates relative to the frame of reference
+ * of the direction that calls the method to all the directions in the
+ * argument.
+ *
+ * @param dir
+ * The array of directions to convert
+ * @return The directions converted to the frame of reference given by the
+ * direction which calls the method
+ */
+
+ public Direction[] relativeDirections(Direction[] dir) {
+ Direction[] relativeDirections = new Direction[dir.length];
+
+ for (int i = 0; i < dir.length; i++) {
+ relativeDirections[i] = this.relativeDirection(dir[i]);
+ }
+
+ return relativeDirections;
+ }
+}
--
cgit v1.2.3