changeset 18219:a72440f763b9 draft

(svn r23049) -Fix [FS#4810]: Use the same forest-check for the vegetation-map colour as for nearby station names.
author frosch <frosch@openttd.org>
date Fri, 21 Oct 2011 19:10:35 +0000
parents 3a4280494577
children 8a968f3fbda2
files src/industry.h src/industry_cmd.cpp src/smallmap_gui.cpp src/station_cmd.cpp
diffstat 4 files changed, 28 insertions(+), 25 deletions(-) [+]
line wrap: on
line diff
--- a/src/industry.h
+++ b/src/industry.h
@@ -138,6 +138,8 @@
 
 void ReleaseDisastersTargetingIndustry(IndustryID);
 
+bool IsTileForestIndustry(TileIndex tile);
+
 #define FOR_ALL_INDUSTRIES_FROM(var, start) FOR_ALL_ITEMS_FROM(Industry, industry_index, var, start)
 #define FOR_ALL_INDUSTRIES(var) FOR_ALL_INDUSTRIES_FROM(var, 0)
 
--- a/src/industry_cmd.cpp
+++ b/src/industry_cmd.cpp
@@ -911,6 +911,30 @@
 	if (i->founder == old_owner) i->founder = (new_owner == INVALID_OWNER) ? OWNER_NONE : new_owner;
 }
 
+/**
+ * Check whether the tile is a forest.
+ * @param tile the tile to investigate.
+ * @return true if and only if the tile is a forest
+ */
+bool IsTileForestIndustry(TileIndex tile)
+{
+	/* Check for industry tile */
+	if (!IsTileType(tile, MP_INDUSTRY)) return false;
+
+	const Industry *ind = Industry::GetByTile(tile);
+
+	/* Check for organic industry (i.e. not processing or extractive) */
+	if ((GetIndustrySpec(ind->type)->life_type & INDUSTRYLIFE_ORGANIC) == 0) return false;
+
+	/* Check for wood production */
+	for (uint i = 0; i < lengthof(ind->produced_cargo); i++) {
+		/* The industry produces wood. */
+		if (ind->produced_cargo[i] != CT_INVALID && CargoSpec::Get(ind->produced_cargo[i])->label == 'WOOD') return true;
+	}
+
+	return false;
+}
+
 static const byte _plantfarmfield_type[] = {1, 1, 1, 1, 1, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6, 6};
 
 static bool IsBadFarmFieldTile(TileIndex tile)
--- a/src/smallmap_gui.cpp
+++ b/src/smallmap_gui.cpp
@@ -532,7 +532,7 @@
 			return (IsClearGround(tile, CLEAR_GRASS) && GetClearDensity(tile) < 3) ? MKCOLOUR_XXXX(PC_BARE_LAND) : _vegetation_clear_bits[GetClearGround(tile)];
 
 		case MP_INDUSTRY:
-			return GetIndustrySpec(Industry::GetByTile(tile)->type)->check_proc == CHECK_FOREST ? MKCOLOUR_XXXX(PC_GREEN) : MKCOLOUR_XXXX(PC_DARK_RED);
+			return IsTileForestIndustry(tile) ? MKCOLOUR_XXXX(PC_GREEN) : MKCOLOUR_XXXX(PC_DARK_RED);
 
 		case MP_TREES:
 			if (GetTreeGround(tile) == TREE_GROUND_SNOW_DESERT || GetTreeGround(tile) == TREE_GROUND_ROUGH_SNOW) {
--- a/src/station_cmd.cpp
+++ b/src/station_cmd.cpp
@@ -180,29 +180,6 @@
 	return IsTileType(tile, MP_TREES);
 }
 
-/**
- * Check whether the tile is a forest.
- * @param tile the tile to investigate.
- * @return true if and only if the tile is a forest
- */
-static bool CMSAForest(TileIndex tile)
-{
-	/* No industry */
-	if (!IsTileType(tile, MP_INDUSTRY)) return false;
-
-	const Industry *ind = Industry::GetByTile(tile);
-
-	/* No extractive industry */
-	if ((GetIndustrySpec(ind->type)->life_type & INDUSTRYLIFE_ORGANIC) == 0) return false;
-
-	for (uint i = 0; i < lengthof(ind->produced_cargo); i++) {
-		/* The industry produces wood. */
-		if (ind->produced_cargo[i] != CT_INVALID && CargoSpec::Get(ind->produced_cargo[i])->label == 'WOOD') return true;
-	}
-
-	return false;
-}
-
 #define M(x) ((x) - STR_SV_STNAME)
 
 enum StationNaming {
@@ -322,7 +299,7 @@
 	/* Check woods */
 	if (HasBit(free_names, M(STR_SV_STNAME_WOODS)) && (
 				CountMapSquareAround(tile, CMSATree) >= 8 ||
-				CountMapSquareAround(tile, CMSAForest) >= 2)
+				CountMapSquareAround(tile, IsTileForestIndustry) >= 2)
 			) {
 		return _settings_game.game_creation.landscape == LT_TROPIC ? STR_SV_STNAME_FOREST : STR_SV_STNAME_WOODS;
 	}