changeset 3974:29d0a0b26bca draft

(svn r5147) - NewGRF: Use refit capacity callback when refitting an aircraft (mart3p)
author peter1138 <peter1138@openttd.org>
date Wed, 07 Jun 2006 07:33:56 +0000
parents bdb81faa8c8b
children ebfc6791b13b
files aircraft_cmd.c
diffstat 1 files changed, 19 insertions(+), 15 deletions(-) [+]
line wrap: on
line diff
--- a/aircraft_cmd.c
+++ b/aircraft_cmd.c
@@ -544,6 +544,7 @@
 	CargoID new_cid = GB(p2, 0, 8);
 	byte new_subtype = GB(p2, 8, 8);
 	const AircraftVehicleInfo *avi;
+	uint16 callback = CALLBACK_FAILED;
 
 	if (!IsVehicleIndex(p1)) return CMD_ERROR;
 
@@ -559,21 +560,24 @@
 
 	SET_EXPENSES_TYPE(EXPENSES_AIRCRAFT_RUN);
 
-	switch (new_cid) {
-		case CT_PASSENGERS:
-			pass = avi->passenger_capacity;
-			break;
-		case CT_MAIL:
-			pass = avi->passenger_capacity + avi->mail_capacity;
-			break;
-		case CT_GOODS:
-			pass = avi->passenger_capacity + avi->mail_capacity;
-			pass /= 2;
-			break;
-		default:
-			pass = avi->passenger_capacity + avi->mail_capacity;
-			pass /= 4;
-			break;
+	/* Check the refit capacity callback */
+	if (HASBIT(EngInfo(v->engine_type)->callbackmask, CBM_REFIT_CAPACITY)) {
+		/* Back up the existing cargo type */
+		CargoID temp_cid = v->cargo_type;
+		v->cargo_type = new_cid;
+
+		callback = GetVehicleCallback(CBID_VEHICLE_REFIT_CAPACITY, 0, 0, v->engine_type, v);
+
+		/* Restore the cargo type */
+		v->cargo_type = temp_cid;
+	}
+
+	if (callback == CALLBACK_FAILED) {
+		/* If the callback failed, or wasn't executed, use the aircraft's
+		 * default cargo capacity */
+		pass = AircraftDefaultCargoCapacity(new_cid, v->engine_type);
+	} else {
+		pass = callback;
 	}
 	_returned_refit_capacity = pass;