Mercurial > hg > openttd
changeset 13990:85fcbb035f53 draft
(svn r18532) -Codechange/Fix (r18404): don't leave the road stop between tiles, just stay on it. This prevents the rare cases where a road vehicle would stop exactly on the border where it could not load
author | rubidium <rubidium@openttd.org> |
---|---|
date | Fri, 18 Dec 2009 21:35:55 +0000 |
parents | c87fc54710c1 |
children | f40051930e5a |
files | src/roadveh_cmd.cpp |
diffstat | 1 files changed, 17 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/src/roadveh_cmd.cpp +++ b/src/roadveh_cmd.cpp @@ -1313,7 +1313,23 @@ v->cur_speed = 0; return false; } - if (IsRoadStop(v->tile)) RoadStop::GetByTile(v->tile, GetRoadStopType(v->tile))->Leave(v); + + /* If we are a drive through road stop and the next tile is of + * the same road stop and the next tile isn't this one (i.e. we + * are not reversing), then keep the reservation and state. + * This way we will not be shortly unregister from the road + * stop. It also makes it possible to load when on the edge of + * two road stops; otherwise you could get vehicles that should + * be loading but are not actually loading. */ + if (IsDriveThroughStopTile(v->tile) && + RoadStop::IsDriveThroughRoadStopContinuation(v->tile, tile) && + v->tile != tile) { + /* So, keep 'our' state */ + dir = (Trackdir)v->state; + } else if (IsRoadStop(v->tile)) { + /* We're not continuing our drive through road stop, so leave. */ + RoadStop::GetByTile(v->tile, GetRoadStopType(v->tile))->Leave(v); + } } if (!HasBit(r, VETS_ENTERED_WORMHOLE)) {