mirror of
https://github.com/OpenTTD/OpenTTD.git
synced 2025-02-08 23:34:15 +00:00
(svn r21508) -Codechange: move the code to handle the pathfinder's "path found" status to a separate function
This commit is contained in:
parent
55a0e31c44
commit
6d831906a3
@ -2408,32 +2408,7 @@ static Track ChooseTrainTrack(Train *v, TileIndex tile, DiagDirection enterdir,
|
|||||||
|
|
||||||
Track next_track = DoTrainPathfind(v, new_tile, dest_enterdir, tracks, &path_not_found, do_track_reservation, &res_dest);
|
Track next_track = DoTrainPathfind(v, new_tile, dest_enterdir, tracks, &path_not_found, do_track_reservation, &res_dest);
|
||||||
if (new_tile == tile) best_track = next_track;
|
if (new_tile == tile) best_track = next_track;
|
||||||
|
v->HandlePathfindingResult(!path_not_found);
|
||||||
/* handle "path not found" state */
|
|
||||||
if (path_not_found) {
|
|
||||||
/* PF didn't find the route */
|
|
||||||
if (!HasBit(v->vehicle_flags, VF_PATHFINDER_LOST)) {
|
|
||||||
/* It is first time the problem occurred, set the "lost" flag. */
|
|
||||||
SetBit(v->vehicle_flags, VF_PATHFINDER_LOST);
|
|
||||||
/* and notify user about the event */
|
|
||||||
AI::NewEvent(v->owner, new AIEventVehicleLost(v->index));
|
|
||||||
if (_settings_client.gui.lost_vehicle_warn && v->owner == _local_company) {
|
|
||||||
SetDParam(0, v->index);
|
|
||||||
AddVehicleNewsItem(
|
|
||||||
STR_NEWS_VEHICLE_IS_LOST,
|
|
||||||
NS_ADVICE,
|
|
||||||
v->index
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
/* route found, is the train marked with "path not found" flag? */
|
|
||||||
if (HasBit(v->vehicle_flags, VF_PATHFINDER_LOST)) {
|
|
||||||
/* clear the flag as the PF's problem was solved */
|
|
||||||
ClrBit(v->vehicle_flags, VF_PATHFINDER_LOST);
|
|
||||||
/* can we also delete the "News" item somehow? */
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* No track reservation requested -> finished. */
|
/* No track reservation requested -> finished. */
|
||||||
|
@ -624,6 +624,39 @@ bool Vehicle::IsEngineCountable() const
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handle the pathfinding result, especially the lost status.
|
||||||
|
* If the vehicle is now lost and wasn't previously fire an
|
||||||
|
* event to the AIs and a news message to the user. If the
|
||||||
|
* vehicle is not lost anymore remove the news message.
|
||||||
|
* @param path_found Whether the vehicle has a path to its destination.
|
||||||
|
*/
|
||||||
|
void Vehicle::HandlePathfindingResult(bool path_found)
|
||||||
|
{
|
||||||
|
if (path_found) {
|
||||||
|
/* Route found, is the vehicle marked with "lost" flag? */
|
||||||
|
if (!HasBit(this->vehicle_flags, VF_PATHFINDER_LOST)) return;
|
||||||
|
|
||||||
|
/* Clear the flag as the PF's problem was solved. */
|
||||||
|
ClrBit(this->vehicle_flags, VF_PATHFINDER_LOST);
|
||||||
|
/* Delete the news item. */
|
||||||
|
DeleteVehicleNews(this->index, STR_NEWS_VEHICLE_IS_LOST);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Were we already lost? */
|
||||||
|
if (HasBit(this->vehicle_flags, VF_PATHFINDER_LOST)) return;
|
||||||
|
|
||||||
|
/* It is first time the problem occurred, set the "lost" flag. */
|
||||||
|
SetBit(this->vehicle_flags, VF_PATHFINDER_LOST);
|
||||||
|
/* Notify user about the event. */
|
||||||
|
AI::NewEvent(this->owner, new AIEventVehicleLost(this->index));
|
||||||
|
if (_settings_client.gui.lost_vehicle_warn && this->owner == _local_company) {
|
||||||
|
SetDParam(0, this->index);
|
||||||
|
AddVehicleNewsItem(STR_NEWS_VEHICLE_IS_LOST, NS_ADVICE, this->index);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void Vehicle::PreDestructor()
|
void Vehicle::PreDestructor()
|
||||||
{
|
{
|
||||||
if (CleaningPool()) return;
|
if (CleaningPool()) return;
|
||||||
|
@ -660,6 +660,7 @@ public:
|
|||||||
|
|
||||||
bool IsEngineCountable() const;
|
bool IsEngineCountable() const;
|
||||||
bool HasDepotOrder() const;
|
bool HasDepotOrder() const;
|
||||||
|
void HandlePathfindingResult(bool path_found);
|
||||||
};
|
};
|
||||||
|
|
||||||
#define FOR_ALL_VEHICLES_FROM(var, start) FOR_ALL_ITEMS_FROM(Vehicle, vehicle_index, var, start)
|
#define FOR_ALL_VEHICLES_FROM(var, start) FOR_ALL_ITEMS_FROM(Vehicle, vehicle_index, var, start)
|
||||||
|
Loading…
Reference in New Issue
Block a user