1
0
Fork 0

(svn r14351) -Codechange: call CFollowTrackT::GetSingleTramBit() only if we know it is a tram, so compiler doesn't generate code for trains and ships

release/0.7
smatz 2008-09-17 00:32:35 +00:00
parent 97150dcffd
commit 9fed67a05a
1 changed files with 18 additions and 12 deletions

View File

@ -82,7 +82,9 @@ struct CFollowTrackT
/** Tests if a tile is a road tile with a single tramtrack (tram can reverse) */ /** Tests if a tile is a road tile with a single tramtrack (tram can reverse) */
FORCEINLINE DiagDirection GetSingleTramBit(TileIndex tile) FORCEINLINE DiagDirection GetSingleTramBit(TileIndex tile)
{ {
if (IsTram() && IsNormalRoadTile(tile)) { assert(IsTram()); // this function shouldn't be called in other cases
if (IsNormalRoadTile(tile)) {
RoadBits rb = GetRoadBits(tile, ROADTYPE_TRAM); RoadBits rb = GetRoadBits(tile, ROADTYPE_TRAM);
switch (rb) { switch (rb) {
case ROAD_NW: return DIAGDIR_NW; case ROAD_NW: return DIAGDIR_NW;
@ -103,7 +105,7 @@ struct CFollowTrackT
m_old_td = old_td; m_old_td = old_td;
m_err = EC_NONE; m_err = EC_NONE;
assert(((TrackStatusToTrackdirBits(GetTileTrackStatus(m_old_tile, TT(), m_veh ? m_veh->u.road.compatible_roadtypes : 0)) & TrackdirToTrackdirBits(m_old_td)) != 0) || assert(((TrackStatusToTrackdirBits(GetTileTrackStatus(m_old_tile, TT(), m_veh ? m_veh->u.road.compatible_roadtypes : 0)) & TrackdirToTrackdirBits(m_old_td)) != 0) ||
(GetSingleTramBit(m_old_tile) != INVALID_DIAGDIR)); // Disable the assertion for single tram bits (IsTram() && GetSingleTramBit(m_old_tile) != INVALID_DIAGDIR)); // Disable the assertion for single tram bits
m_exitdir = TrackdirToExitdir(m_old_td); m_exitdir = TrackdirToExitdir(m_old_td);
if (ForcedReverse()) return true; if (ForcedReverse()) return true;
if (!CanExitOldTile()) return false; if (!CanExitOldTile()) return false;
@ -205,7 +207,7 @@ protected:
} else { } else {
m_new_td_bits = TrackStatusToTrackdirBits(GetTileTrackStatus(m_new_tile, TT(), m_veh != NULL ? m_veh->u.road.compatible_roadtypes : 0)); m_new_td_bits = TrackStatusToTrackdirBits(GetTileTrackStatus(m_new_tile, TT(), m_veh != NULL ? m_veh->u.road.compatible_roadtypes : 0));
if (m_new_td_bits == 0) { if (IsTram() && m_new_td_bits == 0) {
/* GetTileTrackStatus() returns 0 for single tram bits. /* GetTileTrackStatus() returns 0 for single tram bits.
* As we cannot change it there (easily) without breaking something, change it here */ * As we cannot change it there (easily) without breaking something, change it here */
switch (GetSingleTramBit(m_new_tile)) { switch (GetSingleTramBit(m_new_tile)) {
@ -239,11 +241,13 @@ protected:
} }
/* single tram bits can only be left in one direction */ /* single tram bits can only be left in one direction */
if (IsTram()) {
DiagDirection single_tram = GetSingleTramBit(m_old_tile); DiagDirection single_tram = GetSingleTramBit(m_old_tile);
if (single_tram != INVALID_DIAGDIR && single_tram != m_exitdir) { if (single_tram != INVALID_DIAGDIR && single_tram != m_exitdir) {
m_err = EC_NO_WAY; m_err = EC_NO_WAY;
return false; return false;
} }
}
// road depots can be also left in one direction only // road depots can be also left in one direction only
if (IsRoadTT() && IsDepotTypeTile(m_old_tile, TT())) { if (IsRoadTT() && IsDepotTypeTile(m_old_tile, TT())) {
@ -269,11 +273,13 @@ protected:
} }
/* single tram bits can only be entered from one direction */ /* single tram bits can only be entered from one direction */
if (IsTram()) {
DiagDirection single_tram = GetSingleTramBit(m_new_tile); DiagDirection single_tram = GetSingleTramBit(m_new_tile);
if (single_tram != INVALID_DIAGDIR && single_tram != ReverseDiagDir(m_exitdir)) { if (single_tram != INVALID_DIAGDIR && single_tram != ReverseDiagDir(m_exitdir)) {
m_err = EC_NO_WAY; m_err = EC_NO_WAY;
return false; return false;
} }
}
// road and rail depots can also be entered from one direction only // road and rail depots can also be entered from one direction only
if (IsRoadTT() && IsDepotTypeTile(m_new_tile, TT())) { if (IsRoadTT() && IsDepotTypeTile(m_new_tile, TT())) {
@ -369,7 +375,7 @@ protected:
} }
// single tram bits cause reversing // single tram bits cause reversing
if (GetSingleTramBit(m_old_tile) == ReverseDiagDir(m_exitdir)) { if (IsTram() && GetSingleTramBit(m_old_tile) == ReverseDiagDir(m_exitdir)) {
// reverse // reverse
m_new_tile = m_old_tile; m_new_tile = m_old_tile;
m_new_td_bits = TrackdirToTrackdirBits(ReverseTrackdir(m_old_td)); m_new_td_bits = TrackdirToTrackdirBits(ReverseTrackdir(m_old_td));