mirror of https://github.com/OpenTTD/OpenTTD.git
(svn r26013) -Revert (r25495) [FS#5684]: Having trains miss a platform that is just being modified is less of a problem than having trains stop twice without moving.
This commit is contained in:
parent
6fc653d2d7
commit
e6668f24b5
|
@ -434,3 +434,13 @@ Inconsistent catchment areas [FS#5661]:
|
|||
search from a station could be changed to use the actual tiles, but
|
||||
that would require considering checking 10 by 10 tiles for each of
|
||||
the tiles of a station, instead of just once.
|
||||
|
||||
Trains might not stop at platforms that are currently being changed [FS#5553]:
|
||||
If you add tiles to or remove tiles from a platform while a train is
|
||||
approaching to stop at the same platform, that train can miss the place
|
||||
where it's supposed to stop and pass the station without stopping. This
|
||||
is caused by the fact that the train is considered to already have stopped
|
||||
if it's beyond its assigned stopping location. We can't let the train stop
|
||||
just anywhere in the station because then it would never leave the station
|
||||
if you have the same station in the order list multiple times in a row or
|
||||
if there is only one station in the order list (see FS#5684).
|
||||
|
|
|
@ -3137,11 +3137,13 @@ static VehicleEnterTileStatus VehicleEnter_Station(Vehicle *v, TileIndex tile, i
|
|||
if (dir != DIAGDIR_SE && dir != DIAGDIR_SW) x = TILE_SIZE - 1 - x;
|
||||
stop &= TILE_SIZE - 1;
|
||||
|
||||
if (x >= stop) return VETSB_ENTERED_STATION | (VehicleEnterTileStatus)(station_id << VETS_STATION_ID_OFFSET); // enter station
|
||||
|
||||
v->vehstatus |= VS_TRAIN_SLOWING;
|
||||
uint16 spd = max(0, (stop - x) * 20 - 15);
|
||||
if (spd < v->cur_speed) v->cur_speed = spd;
|
||||
if (x == stop) {
|
||||
return VETSB_ENTERED_STATION | (VehicleEnterTileStatus)(station_id << VETS_STATION_ID_OFFSET); // enter station
|
||||
} else if (x < stop) {
|
||||
v->vehstatus |= VS_TRAIN_SLOWING;
|
||||
uint16 spd = max(0, (stop - x) * 20 - 15);
|
||||
if (spd < v->cur_speed) v->cur_speed = spd;
|
||||
}
|
||||
}
|
||||
} else if (v->type == VEH_ROAD) {
|
||||
RoadVehicle *rv = RoadVehicle::From(v);
|
||||
|
|
Loading…
Reference in New Issue