(svn r12657) -Codechange: add 'FindClosestDepot' to the vehicle class.
--- a/src/aircraft.h Thu Apr 10 22:18:33 2008 +0000
+++ b/src/aircraft.h Fri Apr 11 08:14:43 2008 +0000
@@ -127,6 +127,7 @@
void Tick();
void OnNewDay();
TileIndex GetOrderStationLocation(StationID station);
+ bool FindClosestDepot(TileIndex *location, DestinationID *destination, bool *reverse);
};
#endif /* AIRCRAFT_H */
--- a/src/aircraft_cmd.cpp Thu Apr 10 22:18:33 2008 +0000
+++ b/src/aircraft_cmd.cpp Fri Apr 11 08:14:43 2008 +0000
@@ -546,6 +546,25 @@
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
--- a/src/roadveh.h Thu Apr 10 22:18:33 2008 +0000
+++ b/src/roadveh.h Fri Apr 11 08:14:43 2008 +0000
@@ -47,6 +47,10 @@
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 @@
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 */
--- a/src/roadveh_cmd.cpp Thu Apr 10 22:18:33 2008 +0000
+++ b/src/roadveh_cmd.cpp Fri Apr 11 08:14:43 2008 +0000
@@ -446,6 +446,18 @@
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
--- a/src/ship.h Thu Apr 10 22:18:33 2008 +0000
+++ b/src/ship.h Fri Apr 11 08:14:43 2008 +0000
@@ -43,6 +43,7 @@
void Tick();
void OnNewDay();
TileIndex GetOrderStationLocation(StationID station);
+ bool FindClosestDepot(TileIndex *location, DestinationID *destination, bool *reverse);
};
#endif /* SHIP_H */
--- a/src/ship_cmd.cpp Thu Apr 10 22:18:33 2008 +0000
+++ b/src/ship_cmd.cpp Fri Apr 11 08:14:43 2008 +0000
@@ -912,6 +912,18 @@
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
--- a/src/train.h Thu Apr 10 22:18:33 2008 +0000
+++ b/src/train.h Fri Apr 11 08:14:43 2008 +0000
@@ -305,6 +305,7 @@
void Tick();
void OnNewDay();
TileIndex GetOrderStationLocation(StationID station);
+ bool FindClosestDepot(TileIndex *location, DestinationID *destination, bool *reverse);
};
#endif /* TRAIN_H */
--- a/src/train_cmd.cpp Thu Apr 10 22:18:33 2008 +0000
+++ b/src/train_cmd.cpp Fri Apr 11 08:14:43 2008 +0000
@@ -2084,6 +2084,18 @@
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
--- a/src/vehicle_base.h Thu Apr 10 22:18:33 2008 +0000
+++ b/src/vehicle_base.h Fri Apr 11 08:14:43 2008 +0000
@@ -512,6 +512,16 @@
* @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; }
};
/**