mirror of
https://github.com/OpenTTD/OpenTTD.git
synced 2025-02-04 21:33:51 +00:00
(svn r18574) -Fix [FS#3392] (r18481): manually sending trains and RVs to depots didn't quite work
This commit is contained in:
parent
4d9097cafb
commit
f2785ae24d
@ -361,8 +361,8 @@ static FindDepotData FindClosestRoadDepot(const RoadVehicle *v, int max_distance
|
|||||||
if (IsRoadDepotTile(v->tile)) return FindDepotData(v->tile, 0);
|
if (IsRoadDepotTile(v->tile)) return FindDepotData(v->tile, 0);
|
||||||
|
|
||||||
switch (_settings_game.pf.pathfinder_for_roadvehs) {
|
switch (_settings_game.pf.pathfinder_for_roadvehs) {
|
||||||
case VPF_NPF: return NPFRoadVehicleFindNearestDepot(v, _settings_game.pf.npf.maximum_go_to_depot_penalty);
|
case VPF_NPF: return NPFRoadVehicleFindNearestDepot(v, max_distance);
|
||||||
case VPF_YAPF: return YapfRoadVehicleFindNearestDepot(v, _settings_game.pf.yapf.maximum_go_to_depot_penalty);
|
case VPF_YAPF: return YapfRoadVehicleFindNearestDepot(v, max_distance);
|
||||||
|
|
||||||
default: NOT_REACHED();
|
default: NOT_REACHED();
|
||||||
}
|
}
|
||||||
|
@ -97,12 +97,17 @@ SpriteID Ship::GetImage(Direction direction) const
|
|||||||
return _ship_sprites[spritenum] + direction;
|
return _ship_sprites[spritenum] + direction;
|
||||||
}
|
}
|
||||||
|
|
||||||
static const Depot *FindClosestShipDepot(const Vehicle *v)
|
static const Depot *FindClosestShipDepot(const Vehicle *v, uint max_distance)
|
||||||
{
|
{
|
||||||
/* Find the closest depot */
|
/* Find the closest depot */
|
||||||
const Depot *depot;
|
const Depot *depot;
|
||||||
const Depot *best_depot = NULL;
|
const Depot *best_depot = NULL;
|
||||||
uint best_dist = UINT_MAX;
|
/* If we don't have a maximum distance, i.e. distance = 0,
|
||||||
|
* we want to find any depot so the best distance of no
|
||||||
|
* depot must be more than any correct distance. On the
|
||||||
|
* other hand if we have set a maximum distance, any depot
|
||||||
|
* further away than max_distance can safely be ignored. */
|
||||||
|
uint best_dist = max_distance == 0 ? UINT_MAX : max_distance + 1;
|
||||||
|
|
||||||
FOR_ALL_DEPOTS(depot) {
|
FOR_ALL_DEPOTS(depot) {
|
||||||
TileIndex tile = depot->xy;
|
TileIndex tile = depot->xy;
|
||||||
@ -134,9 +139,9 @@ static void CheckIfShipNeedsService(Vehicle *v)
|
|||||||
default: NOT_REACHED();
|
default: NOT_REACHED();
|
||||||
}
|
}
|
||||||
|
|
||||||
const Depot *depot = FindClosestShipDepot(v);
|
const Depot *depot = FindClosestShipDepot(v, max_distance);
|
||||||
|
|
||||||
if (depot == NULL || DistanceManhattan(v->tile, depot->xy) > max_distance) {
|
if (depot == NULL) {
|
||||||
if (v->current_order.IsType(OT_GOTO_DEPOT)) {
|
if (v->current_order.IsType(OT_GOTO_DEPOT)) {
|
||||||
v->current_order.MakeDummy();
|
v->current_order.MakeDummy();
|
||||||
SetWindowWidgetDirty(WC_VEHICLE_VIEW, v->index, VVW_WIDGET_START_STOP_VEH);
|
SetWindowWidgetDirty(WC_VEHICLE_VIEW, v->index, VVW_WIDGET_START_STOP_VEH);
|
||||||
@ -724,7 +729,7 @@ CommandCost CmdSellShip(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p
|
|||||||
|
|
||||||
bool Ship::FindClosestDepot(TileIndex *location, DestinationID *destination, bool *reverse)
|
bool Ship::FindClosestDepot(TileIndex *location, DestinationID *destination, bool *reverse)
|
||||||
{
|
{
|
||||||
const Depot *depot = FindClosestShipDepot(this);
|
const Depot *depot = FindClosestShipDepot(this, 0);
|
||||||
|
|
||||||
if (depot == NULL) return false;
|
if (depot == NULL) return false;
|
||||||
|
|
||||||
|
@ -2107,8 +2107,8 @@ static FindDepotData FindClosestTrainDepot(Train *v, int max_distance)
|
|||||||
if (IsRailDepotTile(origin.tile)) return FindDepotData(origin.tile, 0);
|
if (IsRailDepotTile(origin.tile)) return FindDepotData(origin.tile, 0);
|
||||||
|
|
||||||
switch (_settings_game.pf.pathfinder_for_trains) {
|
switch (_settings_game.pf.pathfinder_for_trains) {
|
||||||
case VPF_NPF: return NPFTrainFindNearestDepot(v, _settings_game.pf.npf.maximum_go_to_depot_penalty);
|
case VPF_NPF: return NPFTrainFindNearestDepot(v, max_distance);
|
||||||
case VPF_YAPF: return YapfTrainFindNearestDepot(v, _settings_game.pf.yapf.maximum_go_to_depot_penalty);
|
case VPF_YAPF: return YapfTrainFindNearestDepot(v, max_distance);
|
||||||
|
|
||||||
default: NOT_REACHED();
|
default: NOT_REACHED();
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user