(svn r7687) [cbh] - Fix: trains can now enter the bridge from side. They still can't leave it from side (pathfinder will need to be invoked when the other ramp is entered). Also the code is not very clear and needs review. It is more proof of concept than final solution. I hope that somebody smarter (Celestar) can do it better.
/* $Id$ */
#ifndef SLOPE_H
#define SLOPE_H
typedef enum Slope {
SLOPE_FLAT = 0x00,
SLOPE_W = 0x01,
SLOPE_S = 0x02,
SLOPE_E = 0x04,
SLOPE_N = 0x08,
SLOPE_STEEP = 0x10,
SLOPE_NW = SLOPE_N | SLOPE_W,
SLOPE_SW = SLOPE_S | SLOPE_W,
SLOPE_SE = SLOPE_S | SLOPE_E,
SLOPE_NE = SLOPE_N | SLOPE_E,
SLOPE_EW = SLOPE_E | SLOPE_W,
SLOPE_NS = SLOPE_N | SLOPE_S,
SLOPE_ELEVATED = SLOPE_N | SLOPE_E | SLOPE_S | SLOPE_W,
SLOPE_NWS = SLOPE_N | SLOPE_W | SLOPE_S,
SLOPE_WSE = SLOPE_W | SLOPE_S | SLOPE_E,
SLOPE_SEN = SLOPE_S | SLOPE_E | SLOPE_N,
SLOPE_ENW = SLOPE_E | SLOPE_N | SLOPE_W,
SLOPE_STEEP_W = SLOPE_STEEP | SLOPE_NWS,
SLOPE_STEEP_S = SLOPE_STEEP | SLOPE_WSE,
SLOPE_STEEP_E = SLOPE_STEEP | SLOPE_SEN,
SLOPE_STEEP_N = SLOPE_STEEP | SLOPE_ENW
} Slope;
static inline bool IsSteepSlope(Slope s)
{
return (s & SLOPE_STEEP) != 0;
}
static inline Slope ComplementSlope(Slope s)
{
assert(!IsSteepSlope(s));
return (Slope)(0xF ^ s);
}
#endif /* SLOPE_H */