(svn r10459) -Codechange: add helper functions to determine whether an industry is a primary industry and how much it costs to build such an industry.
authorrubidium
Fri, 06 Jul 2007 22:33:16 +0000
changeset 7185 1b6b21b69c2d
parent 7184 7413785fe688
child 7186 818eba1f20d5
(svn r10459) -Codechange: add helper functions to determine whether an industry is a primary industry and how much it costs to build such an industry.
src/industry.h
src/industry_cmd.cpp
src/industry_gui.cpp
--- a/src/industry.h	Fri Jul 06 22:15:00 2007 +0000
+++ b/src/industry.h	Fri Jul 06 22:33:16 2007 +0000
@@ -147,6 +147,18 @@
 	uint8 cleanup_flag;                   ///< flags indicating which data should be freed upon cleaning up
 	bool enabled;                         ///< entity still avaible (by default true).newgrf can disable it, though
 	struct GRFFileProps grf_prop;         ///< properties related the the grf file
+
+	/**
+	 * Is an industry with the spec a raw industry?
+	 * @return true if it should be handled as a raw industry
+	 */
+	bool IsRawIndustry() const;
+
+	/**
+	 * Get the cost for constructing this industry
+	 * @return the cost (inflation corrected etc)
+	 */
+	Money GetConstructionCost() const;
 };
 
 /**
--- a/src/industry_cmd.cpp	Fri Jul 06 22:15:00 2007 +0000
+++ b/src/industry_cmd.cpp	Fri Jul 06 22:33:16 2007 +0000
@@ -1505,17 +1505,13 @@
 		return CMD_ERROR;
 	}
 
-	bool raw_industry = indspec->accepts_cargo[0] == CT_INVALID && indspec->accepts_cargo[1] == CT_INVALID &&
-			indspec->accepts_cargo[2] == CT_INVALID && !(indspec->behaviour & INDUSTRYBEH_CUT_TREES);
-
 	/* If the patch for raw-material industries is not on, you cannot build raw-material industries.
-	 * Raw material industries are industries that do not accept cargo (at least for now)
-	 * Exclude the lumber mill (only "raw" industry that can be built) */
-	if (raw_industry && _patches.raw_industry_construction == 0) {
+	 * Raw material industries are industries that do not accept cargo (at least for now) */
+	if (_patches.raw_industry_construction == 0 && indspec->IsRawIndustry()) {
 		return CMD_ERROR;
 	}
 
-	if (raw_industry && _patches.raw_industry_construction == 2) {
+	if (_patches.raw_industry_construction == 2 && indspec->IsRawIndustry()) {
 		if (flags & DC_EXEC) {
 			/* Prospecting has a chance to fail, however we cannot guarantee that something can
 			 * be built on the map, so the chance gets lower when the map is fuller, but there
@@ -1539,7 +1535,7 @@
 		if (CreateNewIndustryHelper(tile, p1, flags, indspec, it) == NULL) return CMD_ERROR;
 	}
 
-	return CommandCost((_price.build_industry >> 8) * ((_patches.raw_industry_construction == 1) ? indspec->raw_industry_cost_multiplier : indspec->cost_multiplier));
+	return CommandCost(indspec->GetConstructionCost());
 }
 
 
@@ -1895,6 +1891,23 @@
 	_industry_sound_tile = 0;
 }
 
+bool IndustrySpec::IsRawIndustry() const
+{
+	/* Lumber mills are extractive/organic, but can always be built like a non-raw industry */
+	return (this->life_type & (INDUSTRYLIFE_EXTRACTIVE | INDUSTRYLIFE_ORGANIC)) != 0 &&
+			(this->behaviour & INDUSTRYBEH_CUT_TREES) == 0;
+}
+
+Money IndustrySpec::GetConstructionCost() const
+{
+	return (_price.build_industry *
+			(_patches.raw_industry_construction == 1 && this->IsRawIndustry() ?
+					this->raw_industry_cost_multiplier :
+					this->cost_multiplier
+			)) >> 8;
+}
+
+
 extern const TileTypeProcs _tile_type_industry_procs = {
 	DrawTile_Industry,           /* draw_tile_proc */
 	GetSlopeZ_Industry,          /* get_slope_z_proc */
--- a/src/industry_gui.cpp	Fri Jul 06 22:15:00 2007 +0000
+++ b/src/industry_gui.cpp	Fri Jul 06 22:33:16 2007 +0000
@@ -39,7 +39,7 @@
 		if (_thd.place_mode == 1 && _thd.window_class == WC_BUILD_INDUSTRY) {
 			int ind_type = _build_industry_types[_opt_ptr->landscape][WP(w, def_d).data_1];
 
-			SetDParam(0, (_price.build_industry >> 8) * (_patches.raw_industry_construction == 1 ? GetIndustrySpec(ind_type)->raw_industry_cost_multiplier : GetIndustrySpec(ind_type)->cost_multiplier));
+			SetDParam(0, GetIndustrySpec(ind_type)->GetConstructionCost());
 			DrawStringCentered(85, w->height - 21, STR_482F_COST, 0);
 		}
 		break;