mirror of https://github.com/OpenTTD/OpenTTD.git
(svn r12657) -Codechange: add 'FindClosestDepot' to the vehicle class.
This commit is contained in:
parent
3a0cb23548
commit
62bdc381e7
|
@ -127,6 +127,7 @@ struct Aircraft : public Vehicle {
|
||||||
void Tick();
|
void Tick();
|
||||||
void OnNewDay();
|
void OnNewDay();
|
||||||
TileIndex GetOrderStationLocation(StationID station);
|
TileIndex GetOrderStationLocation(StationID station);
|
||||||
|
bool FindClosestDepot(TileIndex *location, DestinationID *destination, bool *reverse);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* AIRCRAFT_H */
|
#endif /* AIRCRAFT_H */
|
||||||
|
|
|
@ -546,6 +546,25 @@ CommandCost CmdStartStopAircraft(TileIndex tile, uint32 flags, uint32 p1, uint32
|
||||||
return CommandCost();
|
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.
|
/** Send an aircraft to the hangar.
|
||||||
* @param tile unused
|
* @param tile unused
|
||||||
* @param flags for command type
|
* @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);
|
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.
|
* This class 'wraps' Vehicle; you do not actually instantiate this class.
|
||||||
|
@ -77,10 +81,7 @@ struct RoadVehicle : public Vehicle {
|
||||||
void Tick();
|
void Tick();
|
||||||
void OnNewDay();
|
void OnNewDay();
|
||||||
TileIndex GetOrderStationLocation(StationID station);
|
TileIndex GetOrderStationLocation(StationID station);
|
||||||
|
bool FindClosestDepot(TileIndex *location, DestinationID *destination, bool *reverse);
|
||||||
};
|
};
|
||||||
|
|
||||||
byte GetRoadVehLength(const Vehicle *v);
|
|
||||||
|
|
||||||
void RoadVehUpdateCache(Vehicle *v);
|
|
||||||
|
|
||||||
#endif /* ROADVEH_H */
|
#endif /* ROADVEH_H */
|
||||||
|
|
|
@ -446,6 +446,18 @@ static const Depot* FindClosestRoadDepot(const Vehicle* v)
|
||||||
return NULL; /* Target not found */
|
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.
|
/** Send a road vehicle to the depot.
|
||||||
* @param tile unused
|
* @param tile unused
|
||||||
* @param flags operation to perform
|
* @param flags operation to perform
|
||||||
|
|
|
@ -43,6 +43,7 @@ struct Ship: public Vehicle {
|
||||||
void Tick();
|
void Tick();
|
||||||
void OnNewDay();
|
void OnNewDay();
|
||||||
TileIndex GetOrderStationLocation(StationID station);
|
TileIndex GetOrderStationLocation(StationID station);
|
||||||
|
bool FindClosestDepot(TileIndex *location, DestinationID *destination, bool *reverse);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* SHIP_H */
|
#endif /* SHIP_H */
|
||||||
|
|
|
@ -912,6 +912,18 @@ CommandCost CmdStartStopShip(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
|
||||||
return CommandCost();
|
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.
|
/** Send a ship to the depot.
|
||||||
* @param tile unused
|
* @param tile unused
|
||||||
* @param flags type of operation
|
* @param flags type of operation
|
||||||
|
|
|
@ -305,6 +305,7 @@ struct Train : public Vehicle {
|
||||||
void Tick();
|
void Tick();
|
||||||
void OnNewDay();
|
void OnNewDay();
|
||||||
TileIndex GetOrderStationLocation(StationID station);
|
TileIndex GetOrderStationLocation(StationID station);
|
||||||
|
bool FindClosestDepot(TileIndex *location, DestinationID *destination, bool *reverse);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* TRAIN_H */
|
#endif /* TRAIN_H */
|
||||||
|
|
|
@ -2084,6 +2084,18 @@ static TrainFindDepotData FindClosestTrainDepot(Vehicle *v, int max_distance)
|
||||||
return tfdd;
|
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
|
/** Send a train to a depot
|
||||||
* @param tile unused
|
* @param tile unused
|
||||||
* @param flags type of operation
|
* @param flags type of operation
|
||||||
|
|
|
@ -512,6 +512,16 @@ public:
|
||||||
* @return the location (tile) to aim for.
|
* @return the location (tile) to aim for.
|
||||||
*/
|
*/
|
||||||
virtual TileIndex GetOrderStationLocation(StationID station) { return INVALID_TILE; }
|
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…
Reference in New Issue