direction.h
author tron
Mon, 06 Mar 2006 20:55:24 +0000
changeset 3154 a8fffb204d0e
parent 3153 301c1d71122b
child 3157 40de8616c04c
permissions -rw-r--r--
(svn r3777) Add some functions to handle tunnels
3147
0a09ce6d651a (svn r3767) Move all direction related enums and functions to a separate header
tron
parents:
diff changeset
     1
/* $Id$ */
0a09ce6d651a (svn r3767) Move all direction related enums and functions to a separate header
tron
parents:
diff changeset
     2
0a09ce6d651a (svn r3767) Move all direction related enums and functions to a separate header
tron
parents:
diff changeset
     3
#ifndef DIRECTION_H
0a09ce6d651a (svn r3767) Move all direction related enums and functions to a separate header
tron
parents:
diff changeset
     4
#define DIRECTION_H
0a09ce6d651a (svn r3767) Move all direction related enums and functions to a separate header
tron
parents:
diff changeset
     5
0a09ce6d651a (svn r3767) Move all direction related enums and functions to a separate header
tron
parents:
diff changeset
     6
/* Direction as commonly used in v->direction, 8 way. */
0a09ce6d651a (svn r3767) Move all direction related enums and functions to a separate header
tron
parents:
diff changeset
     7
typedef enum Direction {
0a09ce6d651a (svn r3767) Move all direction related enums and functions to a separate header
tron
parents:
diff changeset
     8
	DIR_N   = 0,
0a09ce6d651a (svn r3767) Move all direction related enums and functions to a separate header
tron
parents:
diff changeset
     9
	DIR_NE  = 1,      /* Northeast, upper right on your monitor */
0a09ce6d651a (svn r3767) Move all direction related enums and functions to a separate header
tron
parents:
diff changeset
    10
	DIR_E   = 2,
0a09ce6d651a (svn r3767) Move all direction related enums and functions to a separate header
tron
parents:
diff changeset
    11
	DIR_SE  = 3,
0a09ce6d651a (svn r3767) Move all direction related enums and functions to a separate header
tron
parents:
diff changeset
    12
	DIR_S   = 4,
0a09ce6d651a (svn r3767) Move all direction related enums and functions to a separate header
tron
parents:
diff changeset
    13
	DIR_SW  = 5,
0a09ce6d651a (svn r3767) Move all direction related enums and functions to a separate header
tron
parents:
diff changeset
    14
	DIR_W   = 6,
0a09ce6d651a (svn r3767) Move all direction related enums and functions to a separate header
tron
parents:
diff changeset
    15
	DIR_NW  = 7,
0a09ce6d651a (svn r3767) Move all direction related enums and functions to a separate header
tron
parents:
diff changeset
    16
	DIR_END,
0a09ce6d651a (svn r3767) Move all direction related enums and functions to a separate header
tron
parents:
diff changeset
    17
	INVALID_DIR = 0xFF,
0a09ce6d651a (svn r3767) Move all direction related enums and functions to a separate header
tron
parents:
diff changeset
    18
} Direction;
0a09ce6d651a (svn r3767) Move all direction related enums and functions to a separate header
tron
parents:
diff changeset
    19
0a09ce6d651a (svn r3767) Move all direction related enums and functions to a separate header
tron
parents:
diff changeset
    20
0a09ce6d651a (svn r3767) Move all direction related enums and functions to a separate header
tron
parents:
diff changeset
    21
/* Direction commonly used as the direction of entering and leaving tiles, 4-way */
0a09ce6d651a (svn r3767) Move all direction related enums and functions to a separate header
tron
parents:
diff changeset
    22
typedef enum DiagDirection {
0a09ce6d651a (svn r3767) Move all direction related enums and functions to a separate header
tron
parents:
diff changeset
    23
	DIAGDIR_NE  = 0,      /* Northeast, upper right on your monitor */
0a09ce6d651a (svn r3767) Move all direction related enums and functions to a separate header
tron
parents:
diff changeset
    24
	DIAGDIR_SE  = 1,
0a09ce6d651a (svn r3767) Move all direction related enums and functions to a separate header
tron
parents:
diff changeset
    25
	DIAGDIR_SW  = 2,
0a09ce6d651a (svn r3767) Move all direction related enums and functions to a separate header
tron
parents:
diff changeset
    26
	DIAGDIR_NW  = 3,
0a09ce6d651a (svn r3767) Move all direction related enums and functions to a separate header
tron
parents:
diff changeset
    27
	DIAGDIR_END,
0a09ce6d651a (svn r3767) Move all direction related enums and functions to a separate header
tron
parents:
diff changeset
    28
	INVALID_DIAGDIR = 0xFF,
0a09ce6d651a (svn r3767) Move all direction related enums and functions to a separate header
tron
parents:
diff changeset
    29
} DiagDirection;
0a09ce6d651a (svn r3767) Move all direction related enums and functions to a separate header
tron
parents:
diff changeset
    30
0a09ce6d651a (svn r3767) Move all direction related enums and functions to a separate header
tron
parents:
diff changeset
    31
static inline DiagDirection ReverseDiagDir(DiagDirection d)
0a09ce6d651a (svn r3767) Move all direction related enums and functions to a separate header
tron
parents:
diff changeset
    32
{
3148
82e8641d2b42 (svn r3769) Add a cast to make KUDr's C++ compiler happy
tron
parents: 3147
diff changeset
    33
	return (DiagDirection)(2 ^ d);
3147
0a09ce6d651a (svn r3767) Move all direction related enums and functions to a separate header
tron
parents:
diff changeset
    34
}
0a09ce6d651a (svn r3767) Move all direction related enums and functions to a separate header
tron
parents:
diff changeset
    35
0a09ce6d651a (svn r3767) Move all direction related enums and functions to a separate header
tron
parents:
diff changeset
    36
3153
301c1d71122b (svn r3776) Replace many ints and magic numbers by Direction, DiagDirection and friends
tron
parents: 3148
diff changeset
    37
static inline DiagDirection DirToDiagDir(Direction dir)
3147
0a09ce6d651a (svn r3767) Move all direction related enums and functions to a separate header
tron
parents:
diff changeset
    38
{
0a09ce6d651a (svn r3767) Move all direction related enums and functions to a separate header
tron
parents:
diff changeset
    39
	return (DiagDirection)(dir >> 1);
0a09ce6d651a (svn r3767) Move all direction related enums and functions to a separate header
tron
parents:
diff changeset
    40
}
0a09ce6d651a (svn r3767) Move all direction related enums and functions to a separate header
tron
parents:
diff changeset
    41
0a09ce6d651a (svn r3767) Move all direction related enums and functions to a separate header
tron
parents:
diff changeset
    42
3153
301c1d71122b (svn r3776) Replace many ints and magic numbers by Direction, DiagDirection and friends
tron
parents: 3148
diff changeset
    43
static inline Direction DiagDirToDir(DiagDirection dir)
301c1d71122b (svn r3776) Replace many ints and magic numbers by Direction, DiagDirection and friends
tron
parents: 3148
diff changeset
    44
{
301c1d71122b (svn r3776) Replace many ints and magic numbers by Direction, DiagDirection and friends
tron
parents: 3148
diff changeset
    45
	return (Direction)(dir * 2 + 1);
301c1d71122b (svn r3776) Replace many ints and magic numbers by Direction, DiagDirection and friends
tron
parents: 3148
diff changeset
    46
}
301c1d71122b (svn r3776) Replace many ints and magic numbers by Direction, DiagDirection and friends
tron
parents: 3148
diff changeset
    47
301c1d71122b (svn r3776) Replace many ints and magic numbers by Direction, DiagDirection and friends
tron
parents: 3148
diff changeset
    48
3147
0a09ce6d651a (svn r3767) Move all direction related enums and functions to a separate header
tron
parents:
diff changeset
    49
/* the 2 axis */
0a09ce6d651a (svn r3767) Move all direction related enums and functions to a separate header
tron
parents:
diff changeset
    50
typedef enum Axis {
0a09ce6d651a (svn r3767) Move all direction related enums and functions to a separate header
tron
parents:
diff changeset
    51
	AXIS_X = 0,
0a09ce6d651a (svn r3767) Move all direction related enums and functions to a separate header
tron
parents:
diff changeset
    52
	AXIS_Y = 1
0a09ce6d651a (svn r3767) Move all direction related enums and functions to a separate header
tron
parents:
diff changeset
    53
} Axis;
0a09ce6d651a (svn r3767) Move all direction related enums and functions to a separate header
tron
parents:
diff changeset
    54
3154
a8fffb204d0e (svn r3777) Add some functions to handle tunnels
tron
parents: 3153
diff changeset
    55
a8fffb204d0e (svn r3777) Add some functions to handle tunnels
tron
parents: 3153
diff changeset
    56
static inline Axis DiagDirToAxis(DiagDirection d)
a8fffb204d0e (svn r3777) Add some functions to handle tunnels
tron
parents: 3153
diff changeset
    57
{
a8fffb204d0e (svn r3777) Add some functions to handle tunnels
tron
parents: 3153
diff changeset
    58
	return (Axis)(d & 1);
a8fffb204d0e (svn r3777) Add some functions to handle tunnels
tron
parents: 3153
diff changeset
    59
}
a8fffb204d0e (svn r3777) Add some functions to handle tunnels
tron
parents: 3153
diff changeset
    60
3147
0a09ce6d651a (svn r3767) Move all direction related enums and functions to a separate header
tron
parents:
diff changeset
    61
#endif