diff options
Diffstat (limited to 'road_map.h')
-rw-r--r-- | road_map.h | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/road_map.h b/road_map.h new file mode 100644 index 000000000..7ad38d90c --- /dev/null +++ b/road_map.h @@ -0,0 +1,85 @@ +/* $Id$ */ + +#ifndef ROAD_H +#define ROAD_H + +#include "macros.h" +#include "rail.h" +#include "tile.h" + +typedef enum RoadBits { + ROAD_NW = 1, + ROAD_SW = 2, + ROAD_SE = 4, + ROAD_NE = 8, + ROAD_X = ROAD_SW | ROAD_NE, + ROAD_Y = ROAD_NW | ROAD_SE, + ROAD_ALL = ROAD_X | ROAD_Y +} RoadBits; + +static inline RoadBits ComplementRoadBits(RoadBits r) +{ + return ROAD_ALL ^ r; +} + +static inline RoadBits GetRoadBits(TileIndex tile) +{ + return GB(_m[tile].m5, 0, 4); +} + +static inline RoadBits GetCrossingRoadBits(TileIndex tile) +{ + return _m[tile].m5 & 8 ? ROAD_Y : ROAD_X; +} + +static inline TrackBits GetCrossingRailBits(TileIndex tile) +{ + return _m[tile].m5 & 8 ? TRACK_BIT_X : TRACK_BIT_Y; +} + + +typedef enum RoadType { + ROAD_NORMAL, + ROAD_CROSSING, + ROAD_DEPOT +} RoadType; + +static inline RoadType GetRoadType(TileIndex tile) +{ + return GB(_m[tile].m5, 4, 4); +} + + +static inline void MakeRoadNormal(TileIndex t, Owner owner, RoadBits bits, uint town) +{ + SetTileType(t, MP_STREET); + SetTileOwner(t, owner); + _m[t].m2 = town; + _m[t].m3 = 0; + _m[t].m4 = 0 << 7 | 0 << 4 | 0; + _m[t].m5 = ROAD_NORMAL << 4 | bits; +} + + +static inline void MakeRoadCrossing(TileIndex t, Owner road, Owner rail, Axis roaddir, RailType rt, uint town) +{ + SetTileType(t, MP_STREET); + SetTileOwner(t, rail); + _m[t].m2 = town; + _m[t].m3 = road; + _m[t].m4 = 0 << 7 | 0 << 4 | rt; + _m[t].m5 = ROAD_CROSSING << 4 | roaddir << 3 | 0 << 2; +} + + +static inline void MakeRoadDepot(TileIndex t, Owner owner, DiagDirection dir) +{ + SetTileType(t, MP_STREET); + SetTileOwner(t, owner); + _m[t].m2 = 0; + _m[t].m3 = 0; + _m[t].m4 = 0; + _m[t].m5 = ROAD_DEPOT << 4 | dir; +} + +#endif |