mirror of https://github.com/OpenTTD/OpenTTD
Add: Reservation and penalties for extended depots.
parent
30a62aa2b5
commit
419ca91e59
|
@ -86,6 +86,23 @@ private:
|
|||
return true;
|
||||
}
|
||||
|
||||
/** Reserve a railway platform. Tile contains the failed tile on abort. */
|
||||
bool ReserveRailDepotPlatform(TileIndex &tile, DiagDirection dir)
|
||||
{
|
||||
assert(IsExtendedRailDepotTile(tile));
|
||||
TileIndex start = tile;
|
||||
TileIndexDiff diff = TileOffsByDiagDir(dir);
|
||||
|
||||
do {
|
||||
if (HasDepotReservation(tile)) return false;
|
||||
SetDepotReservation(tile, true);
|
||||
MarkTileDirtyByTile(tile);
|
||||
tile = TileAdd(tile, diff);
|
||||
} while (IsCompatibleTrainDepotTile(tile, start) && tile != m_origin_tile);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/** Try to reserve a single track/platform. */
|
||||
bool ReserveSingleTrack(TileIndex tile, Trackdir td)
|
||||
{
|
||||
|
@ -95,6 +112,12 @@ private:
|
|||
m_res_fail_tile = tile;
|
||||
m_res_fail_td = td;
|
||||
}
|
||||
} else if (IsExtendedRailDepotTile(tile)) {
|
||||
if (!ReserveRailDepotPlatform(tile, TrackdirToExitdir(ReverseTrackdir(td)))) {
|
||||
/* Platform could not be reserved, undo. */
|
||||
m_res_fail_tile = tile;
|
||||
m_res_fail_td = td;
|
||||
}
|
||||
} else {
|
||||
if (!TryReserveRailTrack(tile, TrackdirToTrack(td))) {
|
||||
/* Tile couldn't be reserved, undo. */
|
||||
|
@ -117,6 +140,13 @@ private:
|
|||
SetRailStationReservation(tile, false);
|
||||
tile = TileAdd(tile, diff);
|
||||
}
|
||||
} else if (IsExtendedRailDepotTile(tile)) {
|
||||
TileIndex start = tile;
|
||||
TileIndexDiff diff = TileOffsByDiagDir(TrackdirToExitdir(ReverseTrackdir(td)));
|
||||
while ((tile != m_res_fail_tile || td != m_res_fail_td) && IsCompatibleTrainDepotTile(tile, start)) {
|
||||
SetDepotReservation(tile, false);
|
||||
tile = TileAdd(tile, diff);
|
||||
}
|
||||
} else if (tile != m_res_fail_tile || td != m_res_fail_td) {
|
||||
UnreserveRailTrack(tile, TrackdirToTrack(td));
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue