src/direction.h
author bjarni
Mon, 28 May 2007 21:40:40 +0000
changeset 6735 dd792fed65e2
parent 6432 226650eb2ef3
child 7394 baec3551d2d3
permissions -rw-r--r--
(svn r9967) -Fix (r9938): autoreplace would in certain conditions move dualheaded engines in a train (usually to the rear)
-Change: moving an engine in between the two ends of a dualheaded engine will now move the rear dualheaded engine to the front of the newly added engine (instead of moving the new engine to the rear of the rear dualheaded engine)
This can make a difference if there are wagons in the train
3147
fc76d566a68e (svn r3767) Move all direction related enums and functions to a separate header
tron
parents:
diff changeset
     1
/* $Id$ */
fc76d566a68e (svn r3767) Move all direction related enums and functions to a separate header
tron
parents:
diff changeset
     2
6125
a6fff965707c (svn r8862) -Cleanup: doxygen changes, again. Mostly @files missing tags and a few comments style.
belugas
parents: 5587
diff changeset
     3
/** @file direction.h */
a6fff965707c (svn r8862) -Cleanup: doxygen changes, again. Mostly @files missing tags and a few comments style.
belugas
parents: 5587
diff changeset
     4
3147
fc76d566a68e (svn r3767) Move all direction related enums and functions to a separate header
tron
parents:
diff changeset
     5
#ifndef DIRECTION_H
fc76d566a68e (svn r3767) Move all direction related enums and functions to a separate header
tron
parents:
diff changeset
     6
#define DIRECTION_H
fc76d566a68e (svn r3767) Move all direction related enums and functions to a separate header
tron
parents:
diff changeset
     7
5587
167d9a91ef02 (svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium
parents: 5475
diff changeset
     8
#include "helpers.hpp"
167d9a91ef02 (svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium
parents: 5475
diff changeset
     9
3147
fc76d566a68e (svn r3767) Move all direction related enums and functions to a separate header
tron
parents:
diff changeset
    10
/* Direction as commonly used in v->direction, 8 way. */
6248
e4a2ed7e5613 (svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium
parents: 6125
diff changeset
    11
enum Direction {
5587
167d9a91ef02 (svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium
parents: 5475
diff changeset
    12
	DIR_BEGIN = 0,
3147
fc76d566a68e (svn r3767) Move all direction related enums and functions to a separate header
tron
parents:
diff changeset
    13
	DIR_N   = 0,
6125
a6fff965707c (svn r8862) -Cleanup: doxygen changes, again. Mostly @files missing tags and a few comments style.
belugas
parents: 5587
diff changeset
    14
	DIR_NE  = 1,      ///< Northeast, upper right on your monitor
3147
fc76d566a68e (svn r3767) Move all direction related enums and functions to a separate header
tron
parents:
diff changeset
    15
	DIR_E   = 2,
fc76d566a68e (svn r3767) Move all direction related enums and functions to a separate header
tron
parents:
diff changeset
    16
	DIR_SE  = 3,
fc76d566a68e (svn r3767) Move all direction related enums and functions to a separate header
tron
parents:
diff changeset
    17
	DIR_S   = 4,
fc76d566a68e (svn r3767) Move all direction related enums and functions to a separate header
tron
parents:
diff changeset
    18
	DIR_SW  = 5,
fc76d566a68e (svn r3767) Move all direction related enums and functions to a separate header
tron
parents:
diff changeset
    19
	DIR_W   = 6,
fc76d566a68e (svn r3767) Move all direction related enums and functions to a separate header
tron
parents:
diff changeset
    20
	DIR_NW  = 7,
fc76d566a68e (svn r3767) Move all direction related enums and functions to a separate header
tron
parents:
diff changeset
    21
	DIR_END,
fc76d566a68e (svn r3767) Move all direction related enums and functions to a separate header
tron
parents:
diff changeset
    22
	INVALID_DIR = 0xFF,
6248
e4a2ed7e5613 (svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium
parents: 6125
diff changeset
    23
};
3147
fc76d566a68e (svn r3767) Move all direction related enums and functions to a separate header
tron
parents:
diff changeset
    24
5587
167d9a91ef02 (svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium
parents: 5475
diff changeset
    25
/** Define basic enum properties */
167d9a91ef02 (svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium
parents: 5475
diff changeset
    26
template <> struct EnumPropsT<Direction> : MakeEnumPropsT<Direction, byte, DIR_BEGIN, DIR_END, INVALID_DIR> {};
6432
226650eb2ef3 (svn r9568) -Documentation: doxygen and comment changes: Root of src is finally done. Now, time to start clearing as much as possible
belugas
parents: 6248
diff changeset
    27
typedef TinyEnumT<Direction> DirectionByte; //typedefing-enumification of Direction
5587
167d9a91ef02 (svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium
parents: 5475
diff changeset
    28
3157
3f35e2d9c8e3 (svn r3783) Replace further ints and magic numbers by Direction, DiagDirection and friends
tron
parents: 3154
diff changeset
    29
static inline Direction ReverseDir(Direction d)
3f35e2d9c8e3 (svn r3783) Replace further ints and magic numbers by Direction, DiagDirection and friends
tron
parents: 3154
diff changeset
    30
{
3f35e2d9c8e3 (svn r3783) Replace further ints and magic numbers by Direction, DiagDirection and friends
tron
parents: 3154
diff changeset
    31
	return (Direction)(4 ^ d);
3f35e2d9c8e3 (svn r3783) Replace further ints and magic numbers by Direction, DiagDirection and friends
tron
parents: 3154
diff changeset
    32
}
3f35e2d9c8e3 (svn r3783) Replace further ints and magic numbers by Direction, DiagDirection and friends
tron
parents: 3154
diff changeset
    33
3147
fc76d566a68e (svn r3767) Move all direction related enums and functions to a separate header
tron
parents:
diff changeset
    34
6248
e4a2ed7e5613 (svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium
parents: 6125
diff changeset
    35
enum DirDiff {
3158
696a6ca0bfa9 (svn r3784) Add a type and functions to handle direction changes
tron
parents: 3157
diff changeset
    36
	DIRDIFF_SAME    = 0,
696a6ca0bfa9 (svn r3784) Add a type and functions to handle direction changes
tron
parents: 3157
diff changeset
    37
	DIRDIFF_45RIGHT = 1,
696a6ca0bfa9 (svn r3784) Add a type and functions to handle direction changes
tron
parents: 3157
diff changeset
    38
	DIRDIFF_90RIGHT = 2,
696a6ca0bfa9 (svn r3784) Add a type and functions to handle direction changes
tron
parents: 3157
diff changeset
    39
	DIRDIFF_REVERSE = 4,
696a6ca0bfa9 (svn r3784) Add a type and functions to handle direction changes
tron
parents: 3157
diff changeset
    40
	DIRDIFF_90LEFT  = 6,
696a6ca0bfa9 (svn r3784) Add a type and functions to handle direction changes
tron
parents: 3157
diff changeset
    41
	DIRDIFF_45LEFT  = 7
6248
e4a2ed7e5613 (svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium
parents: 6125
diff changeset
    42
};
3158
696a6ca0bfa9 (svn r3784) Add a type and functions to handle direction changes
tron
parents: 3157
diff changeset
    43
696a6ca0bfa9 (svn r3784) Add a type and functions to handle direction changes
tron
parents: 3157
diff changeset
    44
static inline DirDiff DirDifference(Direction d0, Direction d1)
696a6ca0bfa9 (svn r3784) Add a type and functions to handle direction changes
tron
parents: 3157
diff changeset
    45
{
3162
5ff241ceadb3 (svn r3788) Fix (harmless) typo in r3784
tron
parents: 3158
diff changeset
    46
	return (DirDiff)((d0 + 8 - d1) % 8);
3158
696a6ca0bfa9 (svn r3784) Add a type and functions to handle direction changes
tron
parents: 3157
diff changeset
    47
}
696a6ca0bfa9 (svn r3784) Add a type and functions to handle direction changes
tron
parents: 3157
diff changeset
    48
696a6ca0bfa9 (svn r3784) Add a type and functions to handle direction changes
tron
parents: 3157
diff changeset
    49
static inline DirDiff ChangeDirDiff(DirDiff d, DirDiff delta)
696a6ca0bfa9 (svn r3784) Add a type and functions to handle direction changes
tron
parents: 3157
diff changeset
    50
{
696a6ca0bfa9 (svn r3784) Add a type and functions to handle direction changes
tron
parents: 3157
diff changeset
    51
	return (DirDiff)((d + delta) % 8);
696a6ca0bfa9 (svn r3784) Add a type and functions to handle direction changes
tron
parents: 3157
diff changeset
    52
}
696a6ca0bfa9 (svn r3784) Add a type and functions to handle direction changes
tron
parents: 3157
diff changeset
    53
696a6ca0bfa9 (svn r3784) Add a type and functions to handle direction changes
tron
parents: 3157
diff changeset
    54
696a6ca0bfa9 (svn r3784) Add a type and functions to handle direction changes
tron
parents: 3157
diff changeset
    55
static inline Direction ChangeDir(Direction d, DirDiff delta)
696a6ca0bfa9 (svn r3784) Add a type and functions to handle direction changes
tron
parents: 3157
diff changeset
    56
{
696a6ca0bfa9 (svn r3784) Add a type and functions to handle direction changes
tron
parents: 3157
diff changeset
    57
	return (Direction)((d + delta) % 8);
696a6ca0bfa9 (svn r3784) Add a type and functions to handle direction changes
tron
parents: 3157
diff changeset
    58
}
696a6ca0bfa9 (svn r3784) Add a type and functions to handle direction changes
tron
parents: 3157
diff changeset
    59
696a6ca0bfa9 (svn r3784) Add a type and functions to handle direction changes
tron
parents: 3157
diff changeset
    60
3147
fc76d566a68e (svn r3767) Move all direction related enums and functions to a separate header
tron
parents:
diff changeset
    61
/* Direction commonly used as the direction of entering and leaving tiles, 4-way */
6248
e4a2ed7e5613 (svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium
parents: 6125
diff changeset
    62
enum DiagDirection {
5587
167d9a91ef02 (svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium
parents: 5475
diff changeset
    63
	DIAGDIR_BEGIN = 0,
6125
a6fff965707c (svn r8862) -Cleanup: doxygen changes, again. Mostly @files missing tags and a few comments style.
belugas
parents: 5587
diff changeset
    64
	DIAGDIR_NE  = 0,      ///< Northeast, upper right on your monitor
3147
fc76d566a68e (svn r3767) Move all direction related enums and functions to a separate header
tron
parents:
diff changeset
    65
	DIAGDIR_SE  = 1,
fc76d566a68e (svn r3767) Move all direction related enums and functions to a separate header
tron
parents:
diff changeset
    66
	DIAGDIR_SW  = 2,
fc76d566a68e (svn r3767) Move all direction related enums and functions to a separate header
tron
parents:
diff changeset
    67
	DIAGDIR_NW  = 3,
fc76d566a68e (svn r3767) Move all direction related enums and functions to a separate header
tron
parents:
diff changeset
    68
	DIAGDIR_END,
fc76d566a68e (svn r3767) Move all direction related enums and functions to a separate header
tron
parents:
diff changeset
    69
	INVALID_DIAGDIR = 0xFF,
6248
e4a2ed7e5613 (svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium
parents: 6125
diff changeset
    70
};
3147
fc76d566a68e (svn r3767) Move all direction related enums and functions to a separate header
tron
parents:
diff changeset
    71
5587
167d9a91ef02 (svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium
parents: 5475
diff changeset
    72
DECLARE_POSTFIX_INCREMENT(DiagDirection);
167d9a91ef02 (svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium
parents: 5475
diff changeset
    73
167d9a91ef02 (svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium
parents: 5475
diff changeset
    74
/** Define basic enum properties */
167d9a91ef02 (svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium
parents: 5475
diff changeset
    75
template <> struct EnumPropsT<DiagDirection> : MakeEnumPropsT<DiagDirection, byte, DIAGDIR_BEGIN, DIAGDIR_END, INVALID_DIAGDIR> {};
6432
226650eb2ef3 (svn r9568) -Documentation: doxygen and comment changes: Root of src is finally done. Now, time to start clearing as much as possible
belugas
parents: 6248
diff changeset
    76
typedef TinyEnumT<DiagDirection> DiagDirectionByte; //typedefing-enumification of DiagDirection
5587
167d9a91ef02 (svn r8038) -Merge: the cpp branch. Effort of KUDr, Celestar, glx, Smoovius, stillunknown and pv2b.
rubidium
parents: 5475
diff changeset
    77
3147
fc76d566a68e (svn r3767) Move all direction related enums and functions to a separate header
tron
parents:
diff changeset
    78
static inline DiagDirection ReverseDiagDir(DiagDirection d)
fc76d566a68e (svn r3767) Move all direction related enums and functions to a separate header
tron
parents:
diff changeset
    79
{
3148
96d6a2fa97df (svn r3769) Add a cast to make KUDr's C++ compiler happy
tron
parents: 3147
diff changeset
    80
	return (DiagDirection)(2 ^ d);
3147
fc76d566a68e (svn r3767) Move all direction related enums and functions to a separate header
tron
parents:
diff changeset
    81
}
fc76d566a68e (svn r3767) Move all direction related enums and functions to a separate header
tron
parents:
diff changeset
    82
fc76d566a68e (svn r3767) Move all direction related enums and functions to a separate header
tron
parents:
diff changeset
    83
6248
e4a2ed7e5613 (svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium
parents: 6125
diff changeset
    84
enum DiagDirDiff {
3163
14e1eba3591d (svn r3789) Add an enum and function to handle DiagDirection changes
tron
parents: 3162
diff changeset
    85
	DIAGDIRDIFF_SAME    = 0,
14e1eba3591d (svn r3789) Add an enum and function to handle DiagDirection changes
tron
parents: 3162
diff changeset
    86
	DIAGDIRDIFF_90RIGHT = 1,
14e1eba3591d (svn r3789) Add an enum and function to handle DiagDirection changes
tron
parents: 3162
diff changeset
    87
	DIAGDIRDIFF_REVERSE = 2,
14e1eba3591d (svn r3789) Add an enum and function to handle DiagDirection changes
tron
parents: 3162
diff changeset
    88
	DIAGDIRDIFF_90LEFT  = 3
6248
e4a2ed7e5613 (svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium
parents: 6125
diff changeset
    89
};
3163
14e1eba3591d (svn r3789) Add an enum and function to handle DiagDirection changes
tron
parents: 3162
diff changeset
    90
14e1eba3591d (svn r3789) Add an enum and function to handle DiagDirection changes
tron
parents: 3162
diff changeset
    91
static inline DiagDirection ChangeDiagDir(DiagDirection d, DiagDirDiff delta)
14e1eba3591d (svn r3789) Add an enum and function to handle DiagDirection changes
tron
parents: 3162
diff changeset
    92
{
14e1eba3591d (svn r3789) Add an enum and function to handle DiagDirection changes
tron
parents: 3162
diff changeset
    93
	return (DiagDirection)((d + delta) % 4);
14e1eba3591d (svn r3789) Add an enum and function to handle DiagDirection changes
tron
parents: 3162
diff changeset
    94
}
14e1eba3591d (svn r3789) Add an enum and function to handle DiagDirection changes
tron
parents: 3162
diff changeset
    95
14e1eba3591d (svn r3789) Add an enum and function to handle DiagDirection changes
tron
parents: 3162
diff changeset
    96
3153
e83501906eae (svn r3776) Replace many ints and magic numbers by Direction, DiagDirection and friends
tron
parents: 3148
diff changeset
    97
static inline DiagDirection DirToDiagDir(Direction dir)
3147
fc76d566a68e (svn r3767) Move all direction related enums and functions to a separate header
tron
parents:
diff changeset
    98
{
fc76d566a68e (svn r3767) Move all direction related enums and functions to a separate header
tron
parents:
diff changeset
    99
	return (DiagDirection)(dir >> 1);
fc76d566a68e (svn r3767) Move all direction related enums and functions to a separate header
tron
parents:
diff changeset
   100
}
fc76d566a68e (svn r3767) Move all direction related enums and functions to a separate header
tron
parents:
diff changeset
   101
fc76d566a68e (svn r3767) Move all direction related enums and functions to a separate header
tron
parents:
diff changeset
   102
3153
e83501906eae (svn r3776) Replace many ints and magic numbers by Direction, DiagDirection and friends
tron
parents: 3148
diff changeset
   103
static inline Direction DiagDirToDir(DiagDirection dir)
e83501906eae (svn r3776) Replace many ints and magic numbers by Direction, DiagDirection and friends
tron
parents: 3148
diff changeset
   104
{
e83501906eae (svn r3776) Replace many ints and magic numbers by Direction, DiagDirection and friends
tron
parents: 3148
diff changeset
   105
	return (Direction)(dir * 2 + 1);
e83501906eae (svn r3776) Replace many ints and magic numbers by Direction, DiagDirection and friends
tron
parents: 3148
diff changeset
   106
}
e83501906eae (svn r3776) Replace many ints and magic numbers by Direction, DiagDirection and friends
tron
parents: 3148
diff changeset
   107
e83501906eae (svn r3776) Replace many ints and magic numbers by Direction, DiagDirection and friends
tron
parents: 3148
diff changeset
   108
3147
fc76d566a68e (svn r3767) Move all direction related enums and functions to a separate header
tron
parents:
diff changeset
   109
/* the 2 axis */
6248
e4a2ed7e5613 (svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium
parents: 6125
diff changeset
   110
enum Axis {
3147
fc76d566a68e (svn r3767) Move all direction related enums and functions to a separate header
tron
parents:
diff changeset
   111
	AXIS_X = 0,
3699
dfd1e4dec957 (svn r4640) - Add: IsValidDiagDirection, IsValidDirection and IsValidAxis functions.
matthijs
parents: 3209
diff changeset
   112
	AXIS_Y = 1,
dfd1e4dec957 (svn r4640) - Add: IsValidDiagDirection, IsValidDirection and IsValidAxis functions.
matthijs
parents: 3209
diff changeset
   113
	AXIS_END
6248
e4a2ed7e5613 (svn r9051) -Codechange: typedef [enum|struct] Y {} X; -> [enum|struct] X {};
rubidium
parents: 6125
diff changeset
   114
};
3147
fc76d566a68e (svn r3767) Move all direction related enums and functions to a separate header
tron
parents:
diff changeset
   115
3154
6ab0cb6b7ab3 (svn r3777) Add some functions to handle tunnels
tron
parents: 3153
diff changeset
   116
4158
91ff9bb84ced (svn r5582) Add and use AxisToTrack{Bits,}()
tron
parents: 3953
diff changeset
   117
static inline Axis OtherAxis(Axis a)
91ff9bb84ced (svn r5582) Add and use AxisToTrack{Bits,}()
tron
parents: 3953
diff changeset
   118
{
91ff9bb84ced (svn r5582) Add and use AxisToTrack{Bits,}()
tron
parents: 3953
diff changeset
   119
	return (Axis)(a ^ 1);
91ff9bb84ced (svn r5582) Add and use AxisToTrack{Bits,}()
tron
parents: 3953
diff changeset
   120
}
91ff9bb84ced (svn r5582) Add and use AxisToTrack{Bits,}()
tron
parents: 3953
diff changeset
   121
91ff9bb84ced (svn r5582) Add and use AxisToTrack{Bits,}()
tron
parents: 3953
diff changeset
   122
3154
6ab0cb6b7ab3 (svn r3777) Add some functions to handle tunnels
tron
parents: 3153
diff changeset
   123
static inline Axis DiagDirToAxis(DiagDirection d)
6ab0cb6b7ab3 (svn r3777) Add some functions to handle tunnels
tron
parents: 3153
diff changeset
   124
{
6ab0cb6b7ab3 (svn r3777) Add some functions to handle tunnels
tron
parents: 3153
diff changeset
   125
	return (Axis)(d & 1);
6ab0cb6b7ab3 (svn r3777) Add some functions to handle tunnels
tron
parents: 3153
diff changeset
   126
}
6ab0cb6b7ab3 (svn r3777) Add some functions to handle tunnels
tron
parents: 3153
diff changeset
   127
3209
98153d2f1ba7 (svn r3877) Add functions to turn a tile into a rail/road bridge ramp/middle part
tron
parents: 3163
diff changeset
   128
98153d2f1ba7 (svn r3877) Add functions to turn a tile into a rail/road bridge ramp/middle part
tron
parents: 3163
diff changeset
   129
/*
98153d2f1ba7 (svn r3877) Add functions to turn a tile into a rail/road bridge ramp/middle part
tron
parents: 3163
diff changeset
   130
 * Converts an Axis to a DiagDirection
98153d2f1ba7 (svn r3877) Add functions to turn a tile into a rail/road bridge ramp/middle part
tron
parents: 3163
diff changeset
   131
 * Points always in the positive direction, i.e. S[EW]
98153d2f1ba7 (svn r3877) Add functions to turn a tile into a rail/road bridge ramp/middle part
tron
parents: 3163
diff changeset
   132
 */
98153d2f1ba7 (svn r3877) Add functions to turn a tile into a rail/road bridge ramp/middle part
tron
parents: 3163
diff changeset
   133
static inline DiagDirection AxisToDiagDir(Axis a)
98153d2f1ba7 (svn r3877) Add functions to turn a tile into a rail/road bridge ramp/middle part
tron
parents: 3163
diff changeset
   134
{
98153d2f1ba7 (svn r3877) Add functions to turn a tile into a rail/road bridge ramp/middle part
tron
parents: 3163
diff changeset
   135
	return (DiagDirection)(2 - a);
98153d2f1ba7 (svn r3877) Add functions to turn a tile into a rail/road bridge ramp/middle part
tron
parents: 3163
diff changeset
   136
}
98153d2f1ba7 (svn r3877) Add functions to turn a tile into a rail/road bridge ramp/middle part
tron
parents: 3163
diff changeset
   137
3953
e64bbd8598e2 (svn r5101) Add a function to convert an axis and a flag for north/south into a DiagDirection. Use it for bridge ramps and ship depots
tron
parents: 3744
diff changeset
   138
/**
e64bbd8598e2 (svn r5101) Add a function to convert an axis and a flag for north/south into a DiagDirection. Use it for bridge ramps and ship depots
tron
parents: 3744
diff changeset
   139
 * Convert an axis and a flag for north/south into a DiagDirection
6432
226650eb2ef3 (svn r9568) -Documentation: doxygen and comment changes: Root of src is finally done. Now, time to start clearing as much as possible
belugas
parents: 6248
diff changeset
   140
 * @param xy axis to convert
3953
e64bbd8598e2 (svn r5101) Add a function to convert an axis and a flag for north/south into a DiagDirection. Use it for bridge ramps and ship depots
tron
parents: 3744
diff changeset
   141
 * @param ns north -> 0, south -> 1
6432
226650eb2ef3 (svn r9568) -Documentation: doxygen and comment changes: Root of src is finally done. Now, time to start clearing as much as possible
belugas
parents: 6248
diff changeset
   142
 * @return the desired DiagDirection
3953
e64bbd8598e2 (svn r5101) Add a function to convert an axis and a flag for north/south into a DiagDirection. Use it for bridge ramps and ship depots
tron
parents: 3744
diff changeset
   143
 */
e64bbd8598e2 (svn r5101) Add a function to convert an axis and a flag for north/south into a DiagDirection. Use it for bridge ramps and ship depots
tron
parents: 3744
diff changeset
   144
static inline DiagDirection XYNSToDiagDir(Axis xy, uint ns)
e64bbd8598e2 (svn r5101) Add a function to convert an axis and a flag for north/south into a DiagDirection. Use it for bridge ramps and ship depots
tron
parents: 3744
diff changeset
   145
{
e64bbd8598e2 (svn r5101) Add a function to convert an axis and a flag for north/south into a DiagDirection. Use it for bridge ramps and ship depots
tron
parents: 3744
diff changeset
   146
	return (DiagDirection)(xy * 3 ^ ns * 2);
e64bbd8598e2 (svn r5101) Add a function to convert an axis and a flag for north/south into a DiagDirection. Use it for bridge ramps and ship depots
tron
parents: 3744
diff changeset
   147
}
e64bbd8598e2 (svn r5101) Add a function to convert an axis and a flag for north/south into a DiagDirection. Use it for bridge ramps and ship depots
tron
parents: 3744
diff changeset
   148
e64bbd8598e2 (svn r5101) Add a function to convert an axis and a flag for north/south into a DiagDirection. Use it for bridge ramps and ship depots
tron
parents: 3744
diff changeset
   149
3699
dfd1e4dec957 (svn r4640) - Add: IsValidDiagDirection, IsValidDirection and IsValidAxis functions.
matthijs
parents: 3209
diff changeset
   150
static inline bool IsValidDiagDirection(DiagDirection d)
dfd1e4dec957 (svn r4640) - Add: IsValidDiagDirection, IsValidDirection and IsValidAxis functions.
matthijs
parents: 3209
diff changeset
   151
{
dfd1e4dec957 (svn r4640) - Add: IsValidDiagDirection, IsValidDirection and IsValidAxis functions.
matthijs
parents: 3209
diff changeset
   152
	return d < DIAGDIR_END;
dfd1e4dec957 (svn r4640) - Add: IsValidDiagDirection, IsValidDirection and IsValidAxis functions.
matthijs
parents: 3209
diff changeset
   153
}
dfd1e4dec957 (svn r4640) - Add: IsValidDiagDirection, IsValidDirection and IsValidAxis functions.
matthijs
parents: 3209
diff changeset
   154
3744
6f0d9e0fc2d9 (svn r4732) - Fix: use correct types in IsValid[Direction|Axis]
glx
parents: 3699
diff changeset
   155
static inline bool IsValidDirection(Direction d)
3699
dfd1e4dec957 (svn r4640) - Add: IsValidDiagDirection, IsValidDirection and IsValidAxis functions.
matthijs
parents: 3209
diff changeset
   156
{
dfd1e4dec957 (svn r4640) - Add: IsValidDiagDirection, IsValidDirection and IsValidAxis functions.
matthijs
parents: 3209
diff changeset
   157
	return d < DIR_END;
dfd1e4dec957 (svn r4640) - Add: IsValidDiagDirection, IsValidDirection and IsValidAxis functions.
matthijs
parents: 3209
diff changeset
   158
}
dfd1e4dec957 (svn r4640) - Add: IsValidDiagDirection, IsValidDirection and IsValidAxis functions.
matthijs
parents: 3209
diff changeset
   159
3744
6f0d9e0fc2d9 (svn r4732) - Fix: use correct types in IsValid[Direction|Axis]
glx
parents: 3699
diff changeset
   160
static inline bool IsValidAxis(Axis d)
3699
dfd1e4dec957 (svn r4640) - Add: IsValidDiagDirection, IsValidDirection and IsValidAxis functions.
matthijs
parents: 3209
diff changeset
   161
{
dfd1e4dec957 (svn r4640) - Add: IsValidDiagDirection, IsValidDirection and IsValidAxis functions.
matthijs
parents: 3209
diff changeset
   162
	return d < AXIS_END;
dfd1e4dec957 (svn r4640) - Add: IsValidDiagDirection, IsValidDirection and IsValidAxis functions.
matthijs
parents: 3209
diff changeset
   163
}
dfd1e4dec957 (svn r4640) - Add: IsValidDiagDirection, IsValidDirection and IsValidAxis functions.
matthijs
parents: 3209
diff changeset
   164
4666
172a0cdf28a6 (svn r6560) - Codechange: Minor fix; add missing #include guards and comments, and correct svn properties on bmp.[ch]
peter1138
parents: 4158
diff changeset
   165
#endif /* DIRECTION_H */