diff options
author | truelight <truelight@openttd.org> | 2004-12-21 16:17:27 +0000 |
---|---|---|
committer | truelight <truelight@openttd.org> | 2004-12-21 16:17:27 +0000 |
commit | d8709b18c634b7911e30b3fad09590a3c8f7b505 (patch) | |
tree | 668abca308dd924835107f7e3febb7017b622f4f | |
parent | 8ee37e7b4749f1a21ca90d97f462a14106e79f88 (diff) | |
download | openttd-d8709b18c634b7911e30b3fad09590a3c8f7b505.tar.xz |
(svn r1200) -Fix: Fixed bug pointed out by Tron: when a train is on the
road/rail-crossing, and you let an other train drive towards it, reverse
it, the lights no longer go off.
-rw-r--r-- | train_cmd.c | 20 |
1 files changed, 17 insertions, 3 deletions
diff --git a/train_cmd.c b/train_cmd.c index 626398585..c33de2d8d 100644 --- a/train_cmd.c +++ b/train_cmd.c @@ -955,6 +955,15 @@ static void ReverseTrainSwapVeh(Vehicle *v, int l, int r) } } +/* Check if the vehicle is a train and is on the tile we are testing */ +static void *TestTrainOnCrossing(Vehicle *v, void *data) +{ + if (v->tile != *(const TileIndex*)data || v->type != VEH_Train) + return NULL; + + return v; +} + static void ReverseTrainDirection(Vehicle *v) { int l = 0, r = -1; @@ -974,10 +983,15 @@ static void ReverseTrainDirection(Vehicle *v) } /* Calculate next tile */ tile += _tileoffs_by_dir[t]; + /* Test if we have a rail/road-crossing */ if (IS_TILETYPE(tile, MP_STREET) && (_map5[tile] & 0xF0)==0x10) { - if (_map5[tile] & 4) { - _map5[tile] &= ~4; - MarkTileDirtyByTile(tile); + /* Check if there is a train on the tile itself */ + if (VehicleFromPos(tile, &tile, TestTrainOnCrossing) == NULL) { + /* If light is on, switch light off */ + if (_map5[tile] & 4) { + _map5[tile] &= ~4; + MarkTileDirtyByTile(tile); + } } } } |