(svn r12657) -Codechange: add 'FindClosestDepot' to the vehicle class.

pull/155/head
rubidium 16 years ago
parent 23465fa7c4
commit aa8a5b2c39

@ -127,6 +127,7 @@ struct Aircraft : public Vehicle {
void Tick();
void OnNewDay();
TileIndex GetOrderStationLocation(StationID station);
bool FindClosestDepot(TileIndex *location, DestinationID *destination, bool *reverse);
};
#endif /* AIRCRAFT_H */

@ -546,6 +546,25 @@ CommandCost CmdStartStopAircraft(TileIndex tile, uint32 flags, uint32 p1, uint32
return CommandCost();
}
bool Aircraft::FindClosestDepot(TileIndex *location, DestinationID *destination, bool *reverse)
{
const Station *st = GetStation(this->u.air.targetairport);
/* If the station is not a valid airport or if it has no hangars */
if (!st->IsValid() || st->airport_tile == 0 || st->Airport()->nof_depots == 0) {
/* the aircraft has to search for a hangar on its own */
StationID station = FindNearestHangar(this);
if (station == INVALID_STATION) return false;
st = GetStation(station);
}
if (location != NULL) *location = st->xy;
if (destination != NULL) *destination = st->index;
return true;
}
/** Send an aircraft to the hangar.
* @param tile unused
* @param flags for command type

@ -47,6 +47,10 @@ static inline bool RoadVehHasArticPart(const Vehicle *v)
void CcBuildRoadVeh(bool success, TileIndex tile, uint32 p1, uint32 p2);
byte GetRoadVehLength(const Vehicle *v);
void RoadVehUpdateCache(Vehicle *v);
/**
* This class 'wraps' Vehicle; you do not actually instantiate this class.
@ -77,10 +81,7 @@ struct RoadVehicle : public Vehicle {
void Tick();
void OnNewDay();
TileIndex GetOrderStationLocation(StationID station);
bool FindClosestDepot(TileIndex *location, DestinationID *destination, bool *reverse);
};
byte GetRoadVehLength(const Vehicle *v);
void RoadVehUpdateCache(Vehicle *v);
#endif /* ROADVEH_H */

@ -446,6 +446,18 @@ static const Depot* FindClosestRoadDepot(const Vehicle* v)
return NULL; /* Target not found */
}
bool RoadVehicle::FindClosestDepot(TileIndex *location, DestinationID *destination, bool *reverse)
{
const Depot *depot = FindClosestRoadDepot(this);
if (depot == NULL) return false;
if (location != NULL) *location = depot->xy;
if (destination != NULL) *destination = depot->index;
return true;
}
/** Send a road vehicle to the depot.
* @param tile unused
* @param flags operation to perform

@ -43,6 +43,7 @@ struct Ship: public Vehicle {
void Tick();
void OnNewDay();
TileIndex GetOrderStationLocation(StationID station);
bool FindClosestDepot(TileIndex *location, DestinationID *destination, bool *reverse);
};
#endif /* SHIP_H */

@ -912,6 +912,18 @@ CommandCost CmdStartStopShip(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
return CommandCost();
}
bool Ship::FindClosestDepot(TileIndex *location, DestinationID *destination, bool *reverse)
{
const Depot *depot = FindClosestShipDepot(this);
if (depot == NULL) return false;
if (location != NULL) *location = depot->xy;
if (destination != NULL) *destination = depot->index;
return true;
}
/** Send a ship to the depot.
* @param tile unused
* @param flags type of operation

@ -305,6 +305,7 @@ struct Train : public Vehicle {
void Tick();
void OnNewDay();
TileIndex GetOrderStationLocation(StationID station);
bool FindClosestDepot(TileIndex *location, DestinationID *destination, bool *reverse);
};
#endif /* TRAIN_H */

@ -2084,6 +2084,18 @@ static TrainFindDepotData FindClosestTrainDepot(Vehicle *v, int max_distance)
return tfdd;
}
bool Train::FindClosestDepot(TileIndex *location, DestinationID *destination, bool *reverse)
{
TrainFindDepotData tfdd = FindClosestTrainDepot(this, 0);
if (tfdd.best_length == (uint)-1) return false;
if (location != NULL) *location = tfdd.tile;
if (destination != NULL) *destination = GetDepotByTile(tfdd.tile)->index;
if (reverse != NULL) *reverse = tfdd.reverse;
return true;
}
/** Send a train to a depot
* @param tile unused
* @param flags type of operation

@ -512,6 +512,16 @@ public:
* @return the location (tile) to aim for.
*/
virtual TileIndex GetOrderStationLocation(StationID station) { return INVALID_TILE; }
/**
* Find the closest depot for this vehicle and tell us the location,
* DestinationID and whether we should reverse.
* @param location where do we go to?
* @param destination what hangar do we go to?
* @param reverse should the vehicle be reversed?
* @return true if a depot could be found.
*/
virtual bool FindClosestDepot(TileIndex *location, DestinationID *destination, bool *reverse) { return false; }
};
/**

Loading…
Cancel
Save