src/road_map.h
branchnoai
changeset 9694 e72987579514
parent 9625 3301b1b3889c
child 9722 ebf0ece7d8f6
equal deleted inserted replaced
9693:31fcaa5375a1 9694:e72987579514
    17 	ROAD_TILE_DEPOT
    17 	ROAD_TILE_DEPOT
    18 };
    18 };
    19 
    19 
    20 static inline RoadTileType GetRoadTileType(TileIndex t)
    20 static inline RoadTileType GetRoadTileType(TileIndex t)
    21 	{
    21 	{
    22 	assert(IsTileType(t, MP_STREET));
    22 	assert(IsTileType(t, MP_ROAD));
    23 	return (RoadTileType)GB(_m[t].m5, 6, 2);
    23 	return (RoadTileType)GB(_m[t].m5, 6, 2);
    24 }
    24 }
    25 
    25 
    26 static inline bool IsLevelCrossing(TileIndex t)
    26 static inline bool IsLevelCrossing(TileIndex t)
    27 {
    27 {
    28 	return GetRoadTileType(t) == ROAD_TILE_CROSSING;
    28 	return GetRoadTileType(t) == ROAD_TILE_CROSSING;
    29 }
    29 }
    30 
    30 
    31 static inline bool IsLevelCrossingTile(TileIndex t)
    31 static inline bool IsLevelCrossingTile(TileIndex t)
    32 {
    32 {
    33 	return IsTileType(t, MP_STREET) && IsLevelCrossing(t);
    33 	return IsTileType(t, MP_ROAD) && IsLevelCrossing(t);
    34 }
    34 }
    35 
    35 
    36 static inline RoadBits GetRoadBits(TileIndex t, RoadType rt)
    36 static inline RoadBits GetRoadBits(TileIndex t, RoadType rt)
    37 {
    37 {
    38 	assert(GetRoadTileType(t) == ROAD_TILE_NORMAL);
    38 	assert(GetRoadTileType(t) == ROAD_TILE_NORMAL);
    60 	}
    60 	}
    61 }
    61 }
    62 
    62 
    63 static inline RoadTypes GetRoadTypes(TileIndex t)
    63 static inline RoadTypes GetRoadTypes(TileIndex t)
    64 {
    64 {
    65 	if (IsTileType(t, MP_STREET)) {
    65 	if (IsTileType(t, MP_ROAD)) {
    66 		return (RoadTypes)GB(_me[t].m7, 5, 3);
    66 		return (RoadTypes)GB(_me[t].m7, 5, 3);
    67 	} else {
    67 	} else {
    68 		return (RoadTypes)GB(_m[t].m3, 0, 3);
    68 		return (RoadTypes)GB(_m[t].m3, 0, 3);
    69 	}
    69 	}
    70 }
    70 }
    71 
    71 
    72 static inline void SetRoadTypes(TileIndex t, RoadTypes rt)
    72 static inline void SetRoadTypes(TileIndex t, RoadTypes rt)
    73 {
    73 {
    74 	if (IsTileType(t, MP_STREET)) {
    74 	if (IsTileType(t, MP_ROAD)) {
    75 		SB(_me[t].m7, 5, 3, rt);
    75 		SB(_me[t].m7, 5, 3, rt);
    76 	} else {
    76 	} else {
    77 		assert(IsTileType(t, MP_STATION) || IsTileType(t, MP_TUNNELBRIDGE));
    77 		assert(IsTileType(t, MP_STATION) || IsTileType(t, MP_TUNNELBRIDGE));
    78 		SB(_m[t].m3, 0, 2, rt);
    78 		SB(_m[t].m3, 0, 2, rt);
    79 	}
    79 	}
    80 }
    80 }
    81 
    81 
    82 static inline Owner GetRoadOwner(TileIndex t, RoadType rt)
    82 static inline Owner GetRoadOwner(TileIndex t, RoadType rt)
    83 {
    83 {
    84 	if (!IsTileType(t, MP_STREET)) return GetTileOwner(t);
    84 	if (!IsTileType(t, MP_ROAD)) return GetTileOwner(t);
    85 
    85 
    86 	switch (GetRoadTileType(t)) {
    86 	switch (GetRoadTileType(t)) {
    87 		default: NOT_REACHED();
    87 		default: NOT_REACHED();
    88 		case ROAD_TILE_NORMAL:
    88 		case ROAD_TILE_NORMAL:
    89 			switch (rt) {
    89 			switch (rt) {
   113 	}
   113 	}
   114 }
   114 }
   115 
   115 
   116 static inline void SetRoadOwner(TileIndex t, RoadType rt, Owner o)
   116 static inline void SetRoadOwner(TileIndex t, RoadType rt, Owner o)
   117 {
   117 {
   118 	if (!IsTileType(t, MP_STREET)) return SetTileOwner(t, o);
   118 	if (!IsTileType(t, MP_ROAD)) return SetTileOwner(t, o);
   119 
   119 
   120 	switch (GetRoadTileType(t)) {
   120 	switch (GetRoadTileType(t)) {
   121 		default: NOT_REACHED();
   121 		default: NOT_REACHED();
   122 		case ROAD_TILE_NORMAL:
   122 		case ROAD_TILE_NORMAL:
   123 			switch (rt) {
   123 			switch (rt) {
   305 TrackBits GetAnyRoadTrackBits(TileIndex tile, RoadType rt);
   305 TrackBits GetAnyRoadTrackBits(TileIndex tile, RoadType rt);
   306 
   306 
   307 
   307 
   308 static inline void MakeRoadNormal(TileIndex t, RoadBits bits, RoadTypes rot, TownID town, Owner road, Owner tram, Owner hway)
   308 static inline void MakeRoadNormal(TileIndex t, RoadBits bits, RoadTypes rot, TownID town, Owner road, Owner tram, Owner hway)
   309 {
   309 {
   310 	SetTileType(t, MP_STREET);
   310 	SetTileType(t, MP_ROAD);
   311 	SetTileOwner(t, road);
   311 	SetTileOwner(t, road);
   312 	_m[t].m2 = town;
   312 	_m[t].m2 = town;
   313 	_m[t].m3 = 0;
   313 	_m[t].m3 = 0;
   314 	_m[t].m4 = (HASBIT(rot, ROADTYPE_TRAM) ? bits : 0) << 4 | (HASBIT(rot, ROADTYPE_ROAD) ? bits : 0);
   314 	_m[t].m4 = (HASBIT(rot, ROADTYPE_TRAM) ? bits : 0) << 4 | (HASBIT(rot, ROADTYPE_ROAD) ? bits : 0);
   315 	_m[t].m5 = ROAD_TILE_NORMAL << 6;
   315 	_m[t].m5 = ROAD_TILE_NORMAL << 6;
   319 }
   319 }
   320 
   320 
   321 
   321 
   322 static inline void MakeRoadCrossing(TileIndex t, Owner road, Owner tram, Owner hway, Owner rail, Axis roaddir, RailType rat, RoadTypes rot, uint town)
   322 static inline void MakeRoadCrossing(TileIndex t, Owner road, Owner tram, Owner hway, Owner rail, Axis roaddir, RailType rat, RoadTypes rot, uint town)
   323 {
   323 {
   324 	SetTileType(t, MP_STREET);
   324 	SetTileType(t, MP_ROAD);
   325 	SetTileOwner(t, rail);
   325 	SetTileOwner(t, rail);
   326 	_m[t].m2 = town;
   326 	_m[t].m2 = town;
   327 	_m[t].m3 = rat;
   327 	_m[t].m3 = rat;
   328 	_m[t].m4 = roaddir << 6 | road;
   328 	_m[t].m4 = roaddir << 6 | road;
   329 	_m[t].m5 = ROAD_TILE_CROSSING << 6;
   329 	_m[t].m5 = ROAD_TILE_CROSSING << 6;
   333 }
   333 }
   334 
   334 
   335 
   335 
   336 static inline void MakeRoadDepot(TileIndex t, Owner owner, DiagDirection dir, RoadType rt)
   336 static inline void MakeRoadDepot(TileIndex t, Owner owner, DiagDirection dir, RoadType rt)
   337 {
   337 {
   338 	SetTileType(t, MP_STREET);
   338 	SetTileType(t, MP_ROAD);
   339 	SetTileOwner(t, owner);
   339 	SetTileOwner(t, owner);
   340 	_m[t].m2 = 0;
   340 	_m[t].m2 = 0;
   341 	_m[t].m3 = 0;
   341 	_m[t].m3 = 0;
   342 	_m[t].m4 = 0;
   342 	_m[t].m4 = 0;
   343 	_m[t].m5 = ROAD_TILE_DEPOT << 6 | dir;
   343 	_m[t].m5 = ROAD_TILE_DEPOT << 6 | dir;