# HG changeset patch # User celestar # Date 1143213856 0 # Node ID fa5d46929db9faad9033c10721f8fd3cfd0bfda5 # Parent c5f2375046bc3e7089edf94ecfa5c24f857dc79b (svn r4088) -Codechange: Introduce {Unb,B}arCrossing and IsCrossingBarred to put and get the status of a level crossing diff -r c5f2375046bc -r fa5d46929db9 road_cmd.c --- a/road_cmd.c Fri Mar 24 13:46:45 2006 +0000 +++ b/road_cmd.c Fri Mar 24 15:24:16 2006 +0000 @@ -776,7 +776,7 @@ if (GetCrossingRoadAxis(ti->tile) == AXIS_X) image++; - if ((ti->map5 & 4) != 0) image += 2; + if (IsCrossingBarred(ti->tile)) image += 2; if ( _m[ti->tile].m4 & 0x80) { image += 8; @@ -1059,10 +1059,10 @@ { switch (GetRoadType(tile)) { case ROAD_CROSSING: - if (v->type == VEH_Train && GB(_m[tile].m5, 2, 1) == 0) { + if (v->type == VEH_Train && !IsCrossingBarred(tile)) { /* train crossing a road */ SndPlayVehicleFx(SND_0E_LEVEL_CROSSING, v); - SB(_m[tile].m5, 2, 1, 1); + BarCrossing(tile); MarkTileDirtyByTile(tile); } break; @@ -1084,8 +1084,7 @@ static void VehicleLeave_Road(Vehicle *v, TileIndex tile, int x, int y) { if (IsLevelCrossing(tile) && v->type == VEH_Train && v->next == NULL) { - // Turn off level crossing lights - SB(_m[tile].m5, 2, 1, 0); + UnbarCrossing(tile); MarkTileDirtyByTile(tile); } } diff -r c5f2375046bc -r fa5d46929db9 road_map.h --- a/road_map.h Fri Mar 24 13:46:45 2006 +0000 +++ b/road_map.h Fri Mar 24 15:24:16 2006 +0000 @@ -66,6 +66,20 @@ _m[t].m3 = o; } +static inline void UnbarCrossing(TileIndex t) +{ + CLRBIT(_m[t].m5, 2); +} + +static inline void BarCrossing(TileIndex t) +{ + SETBIT(_m[t].m5, 2); +} + +static inline bool IsCrossingBarred(TileIndex t) +{ + return HASBIT(_m[t].m5, 2); +} typedef enum RoadType { ROAD_NORMAL, diff -r c5f2375046bc -r fa5d46929db9 train_cmd.c --- a/train_cmd.c Fri Mar 24 13:46:45 2006 +0000 +++ b/train_cmd.c Fri Mar 24 15:24:16 2006 +0000 @@ -1482,8 +1482,8 @@ if (IsTileType(tile, MP_STREET) && IsLevelCrossing(tile) && VehicleFromPos(tile, &tile, TestTrainOnCrossing) == NULL && // empty? - GB(_m[tile].m5, 2, 1) != 0) { // Lights on? - SB(_m[tile].m5, 2, 1, 0); // Switch lights off + IsCrossingBarred(tile)) { + UnbarCrossing(tile); MarkTileDirtyByTile(tile); } } @@ -3206,8 +3206,8 @@ if ((ts &= (ts >> 16)) == 0) { // make a rail/road crossing red if (IsTileType(tile, MP_STREET) && IsLevelCrossing(tile)) { - if (GB(_m[tile].m5, 2, 1) == 0) { - SB(_m[tile].m5, 2, 1, 1); + if (!IsCrossingBarred(tile)) { + BarCrossing(tile); SndPlayVehicleFx(SND_0E_LEVEL_CROSSING, v); MarkTileDirtyByTile(tile); }