changeset 15459:5815672c4374 draft

(svn r20108) -Change: [NewGRF] Report substitute industry type in AI railstation selection callback.
author frosch <frosch@openttd.org>
date Sat, 10 Jul 2010 10:55:16 +0000
parents 53df44fca900
children e4312d30348a
files src/newgrf_generic.cpp src/newgrf_generic.h src/newgrf_spritegroup.h
diffstat 3 files changed, 18 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/src/newgrf_generic.cpp
+++ b/src/newgrf_generic.cpp
@@ -13,6 +13,7 @@
 #include "debug.h"
 #include "newgrf.h"
 #include "newgrf_spritegroup.h"
+#include "industrytype.h"
 #include "core/bitmath_func.hpp"
 #include <list>
 
@@ -170,6 +171,18 @@
 
 	NewGenericResolver(&object, *file);
 
+	if (src_industry != IT_AI_UNKNOWN && src_industry != IT_AI_TOWN) {
+		const IndustrySpec *is = GetIndustrySpec(src_industry);
+		/* If this is no original industry, use the substitute type */
+		if (is->grf_prop.subst_id != INVALID_INDUSTRYTYPE) src_industry = is->grf_prop.subst_id;
+	}
+
+	if (dst_industry != IT_AI_UNKNOWN && dst_industry != IT_AI_TOWN) {
+		const IndustrySpec *is = GetIndustrySpec(dst_industry);
+		/* If this is no original industry, use the substitute type */
+		if (is->grf_prop.subst_id != INVALID_INDUSTRYTYPE) dst_industry = is->grf_prop.subst_id;
+	}
+
 	object.callback = CBID_GENERIC_AI_PURCHASE_SELECTION;
 	object.u.generic.cargo_type        = cargo_type;
 	object.u.generic.default_selection = default_selection;
--- a/src/newgrf_generic.h
+++ b/src/newgrf_generic.h
@@ -39,6 +39,9 @@
 	AICE_STATION_GET_STATION_ID      = 0x00, ///< Get a station ID to build
 };
 
+static const IndustryType IT_AI_UNKNOWN = 0xFE; ///< The AI has no specific industry in mind.
+static const IndustryType IT_AI_TOWN    = 0xFF; ///< The AI actually wants to transport to/from a town, not an industry.
+
 void ResetGenericCallbacks();
 void AddGenericCallback(uint8 feature, const struct GRFFile *file, const struct SpriteGroup *group);
 
--- a/src/newgrf_spritegroup.h
+++ b/src/newgrf_spritegroup.h
@@ -334,8 +334,8 @@
 		struct {
 			CargoID cargo_type;
 			uint8 default_selection;
-			IndustryType src_industry;
-			IndustryType dst_industry;
+			uint8 src_industry;            ///< Source industry substitute type. 0xFF for "town", 0xFE for "unknown".
+			uint8 dst_industry;            ///< Destination industry substitute type. 0xFF for "town", 0xFE for "unknown".
 			uint8 distance;
 			AIConstructionEvent event;
 			uint8 count;