changeset 16043:484dbd3d5cef draft

(svn r20736) -Codechange: Introduce a new function for trying to create a new industry.
author alberth <alberth@openttd.org>
date Sat, 04 Sep 2010 11:59:12 +0000
parents 51a3880d61ec
children 95a26ca221d9
files src/industry_cmd.cpp
diffstat 1 files changed, 21 insertions(+), 11 deletions(-) [+]
line wrap: on
line diff
--- a/src/industry_cmd.cpp
+++ b/src/industry_cmd.cpp
@@ -1891,6 +1891,24 @@
 };
 
 /**
+ * Try to place the industry in the game.
+ * Since there is no feedback why placement fails, there is no other option
+ * than to try a few times before concluding it does not work.
+ * @param type     Industry type of the desired industry.
+ * @param try_hard Try very hard to find a place. (Used to place at least one industry per type.)
+ * @return Pointer to created industry, or \c NULL if creation failed.
+ */
+static Industry *PlaceIndustry(IndustryType type, bool try_hard)
+{
+	uint tries = try_hard ? 10000u : 2000u;
+	for (; tries > 0; tries--) {
+		Industry *ind = CreateNewIndustry(RandomTile(), type);
+		if (ind != NULL) return ind;
+	}
+	return NULL;
+}
+
+/**
  * Try to build a industry on the map.
  * @param type IndustryType of the desired industry
  * @param try_hard Try very hard to find a place. (Used to place at least one industry per type)
@@ -1900,10 +1918,7 @@
 	Backup<CompanyByte> cur_company(_current_company, OWNER_NONE, FILE_LINE);
 
 	IncreaseGeneratingWorldProgress(GWP_INDUSTRY);
-
-	for (uint i = 0; i < (try_hard ? 10000u : 2000u); i++) {
-		if (CreateNewIndustry(RandomTile(), type) != NULL) break;
-	}
+	PlaceIndustry(type, try_hard);
 
 	cur_company.Restore();
 }
@@ -2023,13 +2038,8 @@
 	}
 
 	/* try to create 2000 times this industry */
-	Industry *ind; // Will receive the industry's creation pointer.
-	num = 2000;
-	for (;;) {
-		ind = CreateNewIndustry(RandomTile(), cumulative_probs[j].ind);
-		if (ind != NULL) break;
-		if (--num == 0) return;
-	}
+	Industry *ind = PlaceIndustry(cumulative_probs[j].ind, false);
+	if (ind == NULL) return;
 
 	const IndustrySpec *ind_spc = GetIndustrySpec(cumulative_probs[j].ind);
 	SetDParam(0, ind_spc->name);