road_map.h
changeset 3144 33e42feae531
parent 3103 c0681c720481
child 3145 e833d7a78887
equal deleted inserted replaced
3143:24e7291f7652 3144:33e42feae531
       
     1 /* $Id$ */
       
     2 
       
     3 #ifndef ROAD_H
       
     4 #define ROAD_H
       
     5 
       
     6 #include "macros.h"
       
     7 #include "rail.h"
       
     8 #include "tile.h"
       
     9 
       
    10 typedef enum RoadBits {
       
    11 	ROAD_NW  = 1,
       
    12 	ROAD_SW  = 2,
       
    13 	ROAD_SE  = 4,
       
    14 	ROAD_NE  = 8,
       
    15 	ROAD_X   = ROAD_SW | ROAD_NE,
       
    16 	ROAD_Y   = ROAD_NW | ROAD_SE,
       
    17 	ROAD_ALL = ROAD_X  | ROAD_Y
       
    18 } RoadBits;
       
    19 
       
    20 static inline RoadBits ComplementRoadBits(RoadBits r)
       
    21 {
       
    22 	return ROAD_ALL ^ r;
       
    23 }
       
    24 
       
    25 static inline RoadBits GetRoadBits(TileIndex tile)
       
    26 {
       
    27 	return GB(_m[tile].m5, 0, 4);
       
    28 }
       
    29 
       
    30 static inline RoadBits GetCrossingRoadBits(TileIndex tile)
       
    31 {
       
    32 	return _m[tile].m5 & 8 ? ROAD_Y : ROAD_X;
       
    33 }
       
    34 
       
    35 static inline TrackBits GetCrossingRailBits(TileIndex tile)
       
    36 {
       
    37 	return _m[tile].m5 & 8 ? TRACK_BIT_X : TRACK_BIT_Y;
       
    38 }
       
    39 
       
    40 
       
    41 typedef enum RoadType {
       
    42 	ROAD_NORMAL,
       
    43 	ROAD_CROSSING,
       
    44 	ROAD_DEPOT
       
    45 } RoadType;
       
    46 
       
    47 static inline RoadType GetRoadType(TileIndex tile)
       
    48 {
       
    49 	return GB(_m[tile].m5, 4, 4);
       
    50 }
       
    51 
       
    52 
       
    53 static inline void MakeRoadNormal(TileIndex t, Owner owner, RoadBits bits, uint town)
       
    54 {
       
    55 	SetTileType(t, MP_STREET);
       
    56 	SetTileOwner(t, owner);
       
    57 	_m[t].m2 = town;
       
    58 	_m[t].m3 = 0;
       
    59 	_m[t].m4 = 0 << 7 | 0 << 4 | 0;
       
    60 	_m[t].m5 = ROAD_NORMAL << 4 | bits;
       
    61 }
       
    62 
       
    63 
       
    64 static inline void MakeRoadCrossing(TileIndex t, Owner road, Owner rail, Axis roaddir, RailType rt, uint town)
       
    65 {
       
    66 	SetTileType(t, MP_STREET);
       
    67 	SetTileOwner(t, rail);
       
    68 	_m[t].m2 = town;
       
    69 	_m[t].m3 = road;
       
    70 	_m[t].m4 = 0 << 7 | 0 << 4 | rt;
       
    71 	_m[t].m5 = ROAD_CROSSING << 4 | roaddir << 3 | 0 << 2;
       
    72 }
       
    73 
       
    74 
       
    75 static inline void MakeRoadDepot(TileIndex t, Owner owner, DiagDirection dir)
       
    76 {
       
    77 	SetTileType(t, MP_STREET);
       
    78 	SetTileOwner(t, owner);
       
    79 	_m[t].m2 = 0;
       
    80 	_m[t].m3 = 0;
       
    81 	_m[t].m4 = 0;
       
    82 	_m[t].m5 = ROAD_DEPOT << 4 | dir;
       
    83 }
       
    84 
       
    85 #endif