mirror of
https://github.com/OpenTTD/OpenTTD.git
synced 2025-02-11 00:34:27 +00:00
(svn r25495) -Fix [FS#5553]: when addings bits to a (train) station, the train trying to stop there could overshoot the (new) stop location and not stop at all
This commit is contained in:
parent
6e8f2f29f5
commit
d3ccc7c194
@ -3124,7 +3124,7 @@ static VehicleEnterTileStatus VehicleEnter_Station(Vehicle *v, TileIndex tile, i
|
|||||||
* begin of the platform to the stop location is longer than the length
|
* begin of the platform to the stop location is longer than the length
|
||||||
* of the platform. Station ahead 'includes' the current tile where the
|
* of the platform. Station ahead 'includes' the current tile where the
|
||||||
* vehicle is on, so we need to subtract that. */
|
* vehicle is on, so we need to subtract that. */
|
||||||
if (!IsInsideBS(stop + station_ahead, station_length, TILE_SIZE)) return VETSB_CONTINUE;
|
if (stop + station_ahead - (int)TILE_SIZE >= station_length) return VETSB_CONTINUE;
|
||||||
|
|
||||||
DiagDirection dir = DirToDiagDir(v->direction);
|
DiagDirection dir = DirToDiagDir(v->direction);
|
||||||
|
|
||||||
@ -3136,15 +3136,12 @@ static VehicleEnterTileStatus VehicleEnter_Station(Vehicle *v, TileIndex tile, i
|
|||||||
if (dir != DIAGDIR_SE && dir != DIAGDIR_SW) x = TILE_SIZE - 1 - x;
|
if (dir != DIAGDIR_SE && dir != DIAGDIR_SW) x = TILE_SIZE - 1 - x;
|
||||||
stop &= TILE_SIZE - 1;
|
stop &= TILE_SIZE - 1;
|
||||||
|
|
||||||
if (x == stop) return VETSB_ENTERED_STATION | (VehicleEnterTileStatus)(station_id << VETS_STATION_ID_OFFSET); // enter station
|
if (x >= stop) return VETSB_ENTERED_STATION | (VehicleEnterTileStatus)(station_id << VETS_STATION_ID_OFFSET); // enter station
|
||||||
if (x < stop) {
|
|
||||||
uint16 spd;
|
|
||||||
|
|
||||||
v->vehstatus |= VS_TRAIN_SLOWING;
|
v->vehstatus |= VS_TRAIN_SLOWING;
|
||||||
spd = max(0, (stop - x) * 20 - 15);
|
uint16 spd = max(0, (stop - x) * 20 - 15);
|
||||||
if (spd < v->cur_speed) v->cur_speed = spd;
|
if (spd < v->cur_speed) v->cur_speed = spd;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
} else if (v->type == VEH_ROAD) {
|
} else if (v->type == VEH_ROAD) {
|
||||||
RoadVehicle *rv = RoadVehicle::From(v);
|
RoadVehicle *rv = RoadVehicle::From(v);
|
||||||
if (rv->state < RVSB_IN_ROAD_STOP && !IsReversingRoadTrackdir((Trackdir)rv->state) && rv->frame == 0) {
|
if (rv->state < RVSB_IN_ROAD_STOP && !IsReversingRoadTrackdir((Trackdir)rv->state) && rv->frame == 0) {
|
||||||
|
Loading…
Reference in New Issue
Block a user