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; });
|
[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.
|
* Clear platform reservation during station building/removing.
|
||||||
* @param v vehicle which holds reservation
|
* @param v vehicle which holds reservation
|
||||||
@@ -1430,9 +1441,7 @@ CommandCost FindJoiningWaypoint(StationID existing_waypoint, StationID waypoint_
|
|||||||
static void FreeTrainReservation(Train *v)
|
static void FreeTrainReservation(Train *v)
|
||||||
{
|
{
|
||||||
FreeTrainTrackReservation(v);
|
FreeTrainTrackReservation(v);
|
||||||
if (IsRailStationTile(v->tile)) SetRailStationPlatformReservation(v->tile, TrackdirToExitdir(v->GetVehicleTrackdir()), false);
|
FreeTrainStationPlatformReservation(v);
|
||||||
v = v->Last();
|
|
||||||
if (IsRailStationTile(v->tile)) SetRailStationPlatformReservation(v->tile, TrackdirToExitdir(ReverseTrackdir(v->GetVehicleTrackdir())), false);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -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 RerouteCargo(Station *st, CargoID c, StationID avoid, StationID avoid2);
|
||||||
void RerouteCargoFromSource(Station *st, CargoID c, StationID source, 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.
|
* Calculates the maintenance cost of a number of station tiles.
|
||||||
* @param num Number of station tiles.
|
* @param num Number of station tiles.
|
||||||
|
@@ -6831,6 +6831,7 @@ void DeleteVisibleTrain(Train *v)
|
|||||||
/* delete train from back to front */
|
/* delete train from back to front */
|
||||||
Train *u;
|
Train *u;
|
||||||
Train *prev = v->Last();
|
Train *prev = v->Last();
|
||||||
|
FreeTrainStationPlatformReservation(v);
|
||||||
do {
|
do {
|
||||||
u = prev;
|
u = prev;
|
||||||
prev = u->Previous();
|
prev = u->Previous();
|
||||||
|
Reference in New Issue
Block a user