diff --git a/src/main/java/inf112/fiasko/roborally/element_properties/Direction.java b/src/main/java/inf112/fiasko/roborally/element_properties/Direction.java index 1cd11cc..484a62b 100644 --- a/src/main/java/inf112/fiasko/roborally/element_properties/Direction.java +++ b/src/main/java/inf112/fiasko/roborally/element_properties/Direction.java @@ -45,6 +45,17 @@ public enum Direction { return null; } + /** + * Checks whether two directions are perpendicular + * @param direction1 The first direction + * @param direction2 The second direction + * @return True if the directions are perpendicular + */ + public static boolean arePerpendicular(Direction direction1, Direction direction2) { + return direction1.equals(getLeftRotatedDirection(direction2)) || + direction1.equals(getRightRotatedDirection(direction2)); + } + /** * Gets the reverse of a direction * @param direction A direction diff --git a/src/test/java/inf112/fiasko/roborally/element_properties/DirectionTest.java b/src/test/java/inf112/fiasko/roborally/element_properties/DirectionTest.java index 357aa66..38e767f 100644 --- a/src/test/java/inf112/fiasko/roborally/element_properties/DirectionTest.java +++ b/src/test/java/inf112/fiasko/roborally/element_properties/DirectionTest.java @@ -8,7 +8,9 @@ import java.util.List; import java.util.Set; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; public class DirectionTest { @@ -176,4 +178,34 @@ public class DirectionTest { public void getLeftRotatedDirectionFromSouthWest() { assertEquals(Direction.SOUTH_EAST, Direction.getLeftRotatedDirection(Direction.SOUTH_WEST)); } + + @Test + public void eastAndWestArePerpendicular() { + assertFalse(Direction.arePerpendicular(Direction.EAST, Direction.WEST)); + } + + @Test + public void eastAndNorthArePerpendicular() { + assertTrue(Direction.arePerpendicular(Direction.EAST, Direction.NORTH)); + } + + @Test + public void eastAndSouthArePerpendicular() { + assertTrue(Direction.arePerpendicular(Direction.EAST, Direction.SOUTH)); + } + + @Test + public void northAndSouthArePerpendicular() { + assertFalse(Direction.arePerpendicular(Direction.NORTH, Direction.SOUTH)); + } + + @Test + public void northAndWestArePerpendicular() { + assertTrue(Direction.arePerpendicular(Direction.NORTH, Direction.WEST)); + } + + @Test + public void southAndWestArePerpendicular() { + assertTrue(Direction.arePerpendicular(Direction.SOUTH, Direction.WEST)); + } }