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;
|
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. */
|
/** Try to reserve a single track/platform. */
|
||||||
bool ReserveSingleTrack(TileIndex tile, Trackdir td)
|
bool ReserveSingleTrack(TileIndex tile, Trackdir td)
|
||||||
{
|
{
|
||||||
|
@ -95,6 +112,12 @@ private:
|
||||||
m_res_fail_tile = tile;
|
m_res_fail_tile = tile;
|
||||||
m_res_fail_td = td;
|
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 {
|
} else {
|
||||||
if (!TryReserveRailTrack(tile, TrackdirToTrack(td))) {
|
if (!TryReserveRailTrack(tile, TrackdirToTrack(td))) {
|
||||||
/* Tile couldn't be reserved, undo. */
|
/* Tile couldn't be reserved, undo. */
|
||||||
|
@ -117,6 +140,13 @@ private:
|
||||||
SetRailStationReservation(tile, false);
|
SetRailStationReservation(tile, false);
|
||||||
tile = TileAdd(tile, diff);
|
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) {
|
} else if (tile != m_res_fail_tile || td != m_res_fail_td) {
|
||||||
UnreserveRailTrack(tile, TrackdirToTrack(td));
|
UnreserveRailTrack(tile, TrackdirToTrack(td));
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue