src/town_cmd.cpp
changeset 9342 ca61cbfca47a
parent 9314 9e5264b5e470
child 9343 c30fd350dd8c
--- a/src/town_cmd.cpp	Sun Apr 06 21:54:22 2008 +0000
+++ b/src/town_cmd.cpp	Sun Apr 06 22:32:20 2008 +0000
@@ -529,6 +529,33 @@
 	return cost;
 }
 
+static void GetProducedCargo_Town(TileIndex tile, CargoID *b)
+{
+	HouseID house_id = GetHouseType(tile);
+	const HouseSpec *hs = GetHouseSpecs(house_id);
+	Town *t = GetTownByTile(tile);
+
+	if (HasBit(hs->callback_mask, CBM_HOUSE_PRODUCE_CARGO)) {
+		for (uint i = 0; i < 256; i++) {
+			uint16 callback = GetHouseCallback(CBID_HOUSE_PRODUCE_CARGO, i, 0, house_id, t, tile);
+
+			if (callback == CALLBACK_FAILED || callback == CALLBACK_HOUSEPRODCARGO_END) break;
+
+			CargoID cargo = GetCargoTranslation(GB(callback, 8, 7), hs->grffile);
+
+			if (cargo == CT_INVALID) continue;
+			*(b++) = cargo;
+		}
+	} else {
+		if (hs->population > 0) {
+			*(b++) = CT_PASSENGERS;
+		}
+		if (hs->mail_generation > 0) {
+			*(b++) = CT_MAIL;
+		}
+	}
+}
+
 static void GetAcceptedCargo_Town(TileIndex tile, AcceptedCargo ac)
 {
 	const HouseSpec *hs = GetHouseSpecs(GetHouseType(tile));
@@ -2529,7 +2556,7 @@
 	AnimateTile_Town,        /* animate_tile_proc */
 	TileLoop_Town,           /* tile_loop_clear */
 	ChangeTileOwner_Town,    /* change_tile_owner_clear */
-	NULL,                    /* get_produced_cargo_proc */
+	GetProducedCargo_Town,   /* get_produced_cargo_proc */
 	NULL,                    /* vehicle_enter_tile_proc */
 	GetFoundation_Town,      /* get_foundation_proc */
 	TerraformTile_Town,      /* terraform_tile_proc */