src/direction.h
branchcustombridgeheads
changeset 5650 aefc131bf5ce
parent 5643 3778051e8095
child 6268 4b5241e5dd10
equal deleted inserted replaced
5649:55c8267c933f 5650:aefc131bf5ce
     1 /* $Id$ */
     1 /* $Id$ */
     2 
     2 
     3 #ifndef DIRECTION_H
     3 #ifndef DIRECTION_H
     4 #define DIRECTION_H
     4 #define DIRECTION_H
     5 
     5 
       
     6 #include "helpers.hpp"
       
     7 
     6 /* Direction as commonly used in v->direction, 8 way. */
     8 /* Direction as commonly used in v->direction, 8 way. */
     7 typedef enum Direction {
     9 typedef enum Direction {
       
    10 	DIR_BEGIN = 0,
     8 	DIR_N   = 0,
    11 	DIR_N   = 0,
     9 	DIR_NE  = 1,      /* Northeast, upper right on your monitor */
    12 	DIR_NE  = 1,      /* Northeast, upper right on your monitor */
    10 	DIR_E   = 2,
    13 	DIR_E   = 2,
    11 	DIR_SE  = 3,
    14 	DIR_SE  = 3,
    12 	DIR_S   = 4,
    15 	DIR_S   = 4,
    14 	DIR_W   = 6,
    17 	DIR_W   = 6,
    15 	DIR_NW  = 7,
    18 	DIR_NW  = 7,
    16 	DIR_END,
    19 	DIR_END,
    17 	INVALID_DIR = 0xFF,
    20 	INVALID_DIR = 0xFF,
    18 } Direction;
    21 } Direction;
       
    22 
       
    23 /** Define basic enum properties */
       
    24 template <> struct EnumPropsT<Direction> : MakeEnumPropsT<Direction, byte, DIR_BEGIN, DIR_END, INVALID_DIR> {};
       
    25 typedef TinyEnumT<Direction> DirectionByte;
    19 
    26 
    20 static inline Direction ReverseDir(Direction d)
    27 static inline Direction ReverseDir(Direction d)
    21 {
    28 {
    22 	return (Direction)(4 ^ d);
    29 	return (Direction)(4 ^ d);
    23 }
    30 }
    49 }
    56 }
    50 
    57 
    51 
    58 
    52 /* Direction commonly used as the direction of entering and leaving tiles, 4-way */
    59 /* Direction commonly used as the direction of entering and leaving tiles, 4-way */
    53 typedef enum DiagDirection {
    60 typedef enum DiagDirection {
       
    61 	DIAGDIR_BEGIN = 0,
    54 	DIAGDIR_NE  = 0,      /* Northeast, upper right on your monitor */
    62 	DIAGDIR_NE  = 0,      /* Northeast, upper right on your monitor */
    55 	DIAGDIR_SE  = 1,
    63 	DIAGDIR_SE  = 1,
    56 	DIAGDIR_SW  = 2,
    64 	DIAGDIR_SW  = 2,
    57 	DIAGDIR_NW  = 3,
    65 	DIAGDIR_NW  = 3,
    58 	DIAGDIR_END,
    66 	DIAGDIR_END,
    59 	INVALID_DIAGDIR = 0xFF,
    67 	INVALID_DIAGDIR = 0xFF,
    60 } DiagDirection;
    68 } DiagDirection;
       
    69 
       
    70 DECLARE_POSTFIX_INCREMENT(DiagDirection);
       
    71 
       
    72 /** Define basic enum properties */
       
    73 template <> struct EnumPropsT<DiagDirection> : MakeEnumPropsT<DiagDirection, byte, DIAGDIR_BEGIN, DIAGDIR_END, INVALID_DIAGDIR> {};
       
    74 typedef TinyEnumT<DiagDirection> DiagDirectionByte;
    61 
    75 
    62 static inline DiagDirection ReverseDiagDir(DiagDirection d)
    76 static inline DiagDirection ReverseDiagDir(DiagDirection d)
    63 {
    77 {
    64 	return (DiagDirection)(2 ^ d);
    78 	return (DiagDirection)(2 ^ d);
    65 }
    79 }