mirror of
https://github.com/OpenTTD/OpenTTD.git
synced 2025-03-09 23:50:25 +00:00
Change: Reverse ship when leaving docks if a better path exists
This commit is contained in:
parent
d0092925c9
commit
207cf7bbdd
@ -335,6 +335,18 @@ static Vehicle *EnsureNoMovingShipProc(Vehicle *v, void *data)
|
||||
return v->type == VEH_SHIP && (v->vehstatus & (VS_HIDDEN | VS_STOPPED)) == 0 ? v : nullptr;
|
||||
}
|
||||
|
||||
static bool CheckReverseShip(const Ship *v)
|
||||
{
|
||||
/* Ask pathfinder for best direction */
|
||||
bool reverse = false;
|
||||
switch (_settings_game.pf.pathfinder_for_ships) {
|
||||
case VPF_NPF: reverse = NPFShipCheckReverse(v); break;
|
||||
case VPF_YAPF: reverse = YapfShipCheckReverse(v); break;
|
||||
default: NOT_REACHED();
|
||||
}
|
||||
return reverse;
|
||||
}
|
||||
|
||||
static bool CheckShipLeaveDepot(Ship *v)
|
||||
{
|
||||
if (!v->IsChainInDepot()) return false;
|
||||
@ -364,14 +376,7 @@ static bool CheckShipLeaveDepot(Ship *v)
|
||||
TrackBits north_tracks = DiagdirReachesTracks(north_dir) & GetTileShipTrackStatus(north_neighbour);
|
||||
TrackBits south_tracks = DiagdirReachesTracks(south_dir) & GetTileShipTrackStatus(south_neighbour);
|
||||
if (north_tracks && south_tracks) {
|
||||
/* Ask pathfinder for best direction */
|
||||
bool reverse = false;
|
||||
switch (_settings_game.pf.pathfinder_for_ships) {
|
||||
case VPF_NPF: reverse = NPFShipCheckReverse(v); break;
|
||||
case VPF_YAPF: reverse = YapfShipCheckReverse(v); break;
|
||||
default: NOT_REACHED();
|
||||
}
|
||||
if (reverse) north_tracks = TRACK_BIT_NONE;
|
||||
if (CheckReverseShip(v)) north_tracks = TRACK_BIT_NONE;
|
||||
}
|
||||
|
||||
if (north_tracks) {
|
||||
@ -624,6 +629,7 @@ static void ShipController(Ship *v)
|
||||
const byte *b;
|
||||
Track track;
|
||||
TrackBits tracks;
|
||||
GetNewVehiclePosResult gp;
|
||||
|
||||
v->tick_counter++;
|
||||
v->current_order_time++;
|
||||
@ -632,7 +638,8 @@ static void ShipController(Ship *v)
|
||||
|
||||
if (v->vehstatus & VS_STOPPED) return;
|
||||
|
||||
ProcessOrders(v);
|
||||
if (ProcessOrders(v) && CheckReverseShip(v)) goto reverse_direction;
|
||||
|
||||
v->HandleLoading();
|
||||
|
||||
if (v->current_order.IsType(OT_LOADING)) return;
|
||||
@ -657,7 +664,7 @@ static void ShipController(Ship *v)
|
||||
|
||||
if (!ShipAccelerate(v)) return;
|
||||
|
||||
GetNewVehiclePosResult gp = GetNewVehiclePos(v);
|
||||
gp = GetNewVehiclePos(v);
|
||||
if (v->state != TRACK_BIT_WORMHOLE) {
|
||||
/* Not on a bridge */
|
||||
if (gp.old_tile == gp.new_tile) {
|
||||
|
Loading…
Reference in New Issue
Block a user