summaryrefslogtreecommitdiff
path: root/src/direction_type.h
diff options
context:
space:
mode:
authorrubidium <rubidium@openttd.org>2007-12-18 19:52:14 +0000
committerrubidium <rubidium@openttd.org>2007-12-18 19:52:14 +0000
commit09951941629e758484d51c39ebd87e3632b19565 (patch)
treee33a532cbac926cf6b9b10a29cc5453106de819d /src/direction_type.h
parent962f6361ff8d4827c18ca2f8bfc130170d3837bd (diff)
downloadopenttd-09951941629e758484d51c39ebd87e3632b19565.tar.xz
(svn r11661) -Codechange: some header reworks in order to try to reduce the compile time of OpenTTD by reduce the amount of circular-ish dependencies.
Diffstat (limited to 'src/direction_type.h')
-rw-r--r--src/direction_type.h122
1 files changed, 122 insertions, 0 deletions
diff --git a/src/direction_type.h b/src/direction_type.h
new file mode 100644
index 000000000..d1f8d8920
--- /dev/null
+++ b/src/direction_type.h
@@ -0,0 +1,122 @@
+/* $Id$ */
+
+/** @file direction_type.h Different types to 'show' directions. */
+
+#ifndef DIRECTION_TYPE_H
+#define DIRECTION_TYPE_H
+
+#include "core/enum_type.hpp"
+
+/**
+ * Defines the 8 directions on the map.
+ *
+ * This enum defines 8 possible directions which are used for
+ * the vehicles in the game. The directions are aligned straight
+ * to the viewport, not to the map. So north points to the top of
+ * your viewport and not rotated by 45 degrees left or right to get
+ * a "north" used in you games.
+ */
+enum Direction {
+ DIR_BEGIN = 0, ///< Used to iterate
+ DIR_N = 0, ///< North
+ DIR_NE = 1, ///< Northeast
+ DIR_E = 2, ///< East
+ DIR_SE = 3, ///< Southeast
+ DIR_S = 4, ///< South
+ DIR_SW = 5, ///< Southwest
+ DIR_W = 6, ///< West
+ DIR_NW = 7, ///< Northwest
+ DIR_END, ///< Used to iterate
+ INVALID_DIR = 0xFF, ///< Flag for an invalid direction
+};
+
+/** Define basic enum properties */
+template <> struct EnumPropsT<Direction> : MakeEnumPropsT<Direction, byte, DIR_BEGIN, DIR_END, INVALID_DIR> {};
+typedef TinyEnumT<Direction> DirectionByte; //typedefing-enumification of Direction
+
+
+/**
+ * Enumeration for the difference between two directions.
+ *
+ * This enumeration is used to mark differences between
+ * two directions. If you get one direction you can align
+ * a second direction in 8 different ways. This enumeration
+ * only contains 6 of these 8 differences, but the remaining
+ * two can be calculated by adding to differences together.
+ * This also means you can add two differences together and
+ * get the difference you really want to get. The difference
+ * of 45 degrees left + the difference of 45 degrees right results in the
+ * difference of 0 degrees.
+ *
+ * @note To get this mentioned addition of direction you must use
+ * modulo DIR_END or use the #ChangeDirDiff(DirDiff, DirDiff) function.
+ * @see ChangeDirDiff(DirDiff, DirDiff)
+ */
+enum DirDiff {
+ DIRDIFF_SAME = 0, ///< Both directions faces to the same direction
+ DIRDIFF_45RIGHT = 1, ///< Angle of 45 degrees right
+ DIRDIFF_90RIGHT = 2, ///< Angle of 90 degrees right
+ DIRDIFF_REVERSE = 4, ///< One direction is the opposit of the other one
+ DIRDIFF_90LEFT = 6, ///< Angle of 90 degrees left
+ DIRDIFF_45LEFT = 7 ///< Angle of 45 degrees left
+};
+
+
+/**
+ * Enumeration for diagonal directions.
+ *
+ * This enumeration is used for the 4 direction of the tile-edges.
+ */
+enum DiagDirection {
+ DIAGDIR_BEGIN = 0, ///< Used for iterations
+ DIAGDIR_NE = 0, ///< Northeast, upper right on your monitor
+ DIAGDIR_SE = 1, ///< Southeast
+ DIAGDIR_SW = 2, ///< Southwest
+ DIAGDIR_NW = 3, ///< Northwest
+ DIAGDIR_END, ///< Used for iterations
+ INVALID_DIAGDIR = 0xFF, ///< Flag for an invalid DiagDirection
+};
+
+DECLARE_POSTFIX_INCREMENT(DiagDirection);
+
+/** Define basic enum properties */
+template <> struct EnumPropsT<DiagDirection> : MakeEnumPropsT<DiagDirection, byte, DIAGDIR_BEGIN, DIAGDIR_END, INVALID_DIAGDIR> {};
+typedef TinyEnumT<DiagDirection> DiagDirectionByte; //typedefing-enumification of DiagDirection
+
+
+/**
+ * Enumeration for the difference between to DiagDirection.
+ *
+ * As the DiagDirection only contains 4 possible directions the
+ * difference between two of these directions can only be in 4 ways.
+ * As the DirDiff enumeration the values can be added together and
+ * you will get the resulting difference (use modulo DIAGDIR_END).
+ *
+ * @see DirDiff
+ */
+enum DiagDirDiff {
+ DIAGDIRDIFF_SAME = 0, ///< Same directions
+ DIAGDIRDIFF_90RIGHT = 1, ///< 90 degrees right
+ DIAGDIRDIFF_REVERSE = 2, ///< Reverse directions
+ DIAGDIRDIFF_90LEFT = 3 ///< 90 degrees left
+};
+
+/** Allow incrementing of DiagDirDiff variables */
+DECLARE_POSTFIX_INCREMENT(DiagDirDiff);
+
+
+/**
+ * Enumeration for the two axis X and Y
+ *
+ * This enumeration represente the two axis X and Y in the game.
+ * The X axis is the one which goes align the north-west edge
+ * (and south-east edge). The Y axis must be so the one which goes
+ * align the north-east edge (and south-west) edge.
+ */
+enum Axis {
+ AXIS_X = 0, ///< The X axis
+ AXIS_Y = 1, ///< The y axis
+ AXIS_END ///< Used for iterations
+};
+
+#endif /* DIRECTION_TYPE_H */