Fix rail platforms being left partially reserved after deleting train
Due to company being removed when infrastructure sharing in use
This commit is contained in:
@@ -1423,6 +1423,17 @@ CommandCost FindJoiningWaypoint(StationID existing_waypoint, StationID waypoint_
|
||||
[is_road](Waypoint *wp) -> bool { return HasBit(wp->waypoint_flags, WPF_ROAD) == is_road; });
|
||||
}
|
||||
|
||||
/**
|
||||
* Clear any rail station platform reservation ahead of and behind train.
|
||||
* @param v vehicle which may hold reservations
|
||||
*/
|
||||
void FreeTrainStationPlatformReservation(const Train *v)
|
||||
{
|
||||
if (IsRailStationTile(v->tile)) SetRailStationPlatformReservation(v->tile, TrackdirToExitdir(v->GetVehicleTrackdir()), false);
|
||||
v = v->Last();
|
||||
if (IsRailStationTile(v->tile)) SetRailStationPlatformReservation(v->tile, TrackdirToExitdir(ReverseTrackdir(v->GetVehicleTrackdir())), false);
|
||||
}
|
||||
|
||||
/**
|
||||
* Clear platform reservation during station building/removing.
|
||||
* @param v vehicle which holds reservation
|
||||
@@ -1430,9 +1441,7 @@ CommandCost FindJoiningWaypoint(StationID existing_waypoint, StationID waypoint_
|
||||
static void FreeTrainReservation(Train *v)
|
||||
{
|
||||
FreeTrainTrackReservation(v);
|
||||
if (IsRailStationTile(v->tile)) SetRailStationPlatformReservation(v->tile, TrackdirToExitdir(v->GetVehicleTrackdir()), false);
|
||||
v = v->Last();
|
||||
if (IsRailStationTile(v->tile)) SetRailStationPlatformReservation(v->tile, TrackdirToExitdir(ReverseTrackdir(v->GetVehicleTrackdir())), false);
|
||||
FreeTrainStationPlatformReservation(v);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -57,6 +57,8 @@ void IncreaseStats(Station *st, CargoID cargo, StationID next_station_id, uint c
|
||||
void RerouteCargo(Station *st, CargoID c, StationID avoid, StationID avoid2);
|
||||
void RerouteCargoFromSource(Station *st, CargoID c, StationID source, StationID avoid, StationID avoid2);
|
||||
|
||||
void FreeTrainStationPlatformReservation(const Train *v);
|
||||
|
||||
/**
|
||||
* Calculates the maintenance cost of a number of station tiles.
|
||||
* @param num Number of station tiles.
|
||||
|
@@ -6831,6 +6831,7 @@ void DeleteVisibleTrain(Train *v)
|
||||
/* delete train from back to front */
|
||||
Train *u;
|
||||
Train *prev = v->Last();
|
||||
FreeTrainStationPlatformReservation(v);
|
||||
do {
|
||||
u = prev;
|
||||
prev = u->Previous();
|
||||
|
Reference in New Issue
Block a user