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:
Jonathan G Rennison
2023-05-01 12:34:57 +01:00
parent aa28fcf7de
commit dc56add6a3
3 changed files with 15 additions and 3 deletions

View File

@@ -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);
}
/**