(svn r10063) -Codechange: Change VARDEF for extern
authorbelugas
Fri, 08 Jun 2007 15:48:48 +0000
changeset 6824 b37cba5bf2ca
parent 6823 1f2075619543
child 6825 45ea88cc56e9
(svn r10063) -Codechange: Change VARDEF for extern
-CodeChange: Add the count of industries, basic support for variable 67, var action02 forindustries
src/industry.h
src/industry_cmd.cpp
--- a/src/industry.h	Fri Jun 08 09:35:39 2007 +0000
+++ b/src/industry.h	Fri Jun 08 15:48:48 2007 +0000
@@ -197,7 +197,6 @@
 	return index < GetIndustryPoolSize() && IsValidIndustry(GetIndustry(index));
 }
 
-VARDEF int _total_industries; //general counter
 
 static inline IndustryID GetMaxIndustryIndex()
 {
@@ -214,6 +213,36 @@
 	return _total_industries;
 }
 
+extern int _total_industries;                      // general counter
+extern uint16 _industry_counts[NUM_INDUSTRYTYPES]; // Number of industries per type ingame
+
+/** Increment the count of industries for this type
+ * @param type IndustryType to increment
+ * @pre type < INVALID_INDUSTRYTYPE */
+static inline void IncIndustryTypeCount(IndustryType type)
+{
+	assert(type < INVALID_INDUSTRYTYPE);
+	_industry_counts[type]++;
+}
+
+/** Decrement the count of industries for this type
+ * @param type IndustryType to decrement
+ * @pre type < INVALID_INDUSTRYTYPE */
+static inline void DecIndustryTypeCount(IndustryType type)
+{
+	assert(type < INVALID_INDUSTRYTYPE);
+	_industry_counts[type]--;
+}
+
+/** get the count of industries for this type
+ * @param type IndustryType to query
+ * @pre type < INVALID_INDUSTRYTYPE */
+static inline uint8 GetIndustryTypeCount(IndustryType type)
+{
+	assert(type < INVALID_INDUSTRYTYPE);
+	return min(_industry_counts[type], 0xFF); // callback expects only a byte, so cut it
+}
+
 /**
  * Return a random valid industry.
  */
@@ -249,8 +278,8 @@
 #define FOR_ALL_INDUSTRIES_FROM(i, start) for (i = GetIndustry(start); i != NULL; i = (i->index + 1U < GetIndustryPoolSize()) ? GetIndustry(i->index + 1U) : NULL) if (IsValidIndustry(i))
 #define FOR_ALL_INDUSTRIES(i) FOR_ALL_INDUSTRIES_FROM(i, 0)
 
-VARDEF const Industry** _industry_sort;
-VARDEF bool _industry_sort_dirty;
+extern const Industry **_industry_sort;
+extern bool _industry_sort_dirty;
 
 enum {
 	IT_COAL_MINE           =   0,
--- a/src/industry_cmd.cpp	Fri Jun 08 09:35:39 2007 +0000
+++ b/src/industry_cmd.cpp	Fri Jun 08 15:48:48 2007 +0000
@@ -37,6 +37,12 @@
 static byte _industry_sound_ctr;
 static TileIndex _industry_sound_tile;
 
+int _total_industries;                      //general counter
+uint16 _industry_counts[NUM_INDUSTRYTYPES]; // Number of industries per type ingame
+
+const Industry **_industry_sort;
+bool _industry_sort_dirty;
+
 IndustrySpec _industry_specs[NUM_INDUSTRYTYPES];
 IndustryTileSpec _industry_tile_specs[NUM_INDUSTRYTILES];
 
@@ -142,6 +148,8 @@
 
 	_industry_sort_dirty = true;
 	_total_industries--;
+	DecIndustryTypeCount(i->type);
+
 	DeleteSubsidyWithIndustry(i->index);
 	DeleteWindowById(WC_INDUSTRY_VIEW, i->index);
 	InvalidateWindow(WC_INDUSTRY_DIRECTORY, 0);
@@ -1351,6 +1359,7 @@
 	i->xy = tile;
 	i->width = i->height = 0;
 	i->type = type;
+	IncIndustryTypeCount(type);
 
 	i->production_rate[0] = indspec->production_rate[0];
 	i->production_rate[1] = indspec->production_rate[1];
@@ -1849,6 +1858,7 @@
 	AddBlockToPool(&_Industry_pool);
 
 	_total_industries = 0;
+	memset(&_industry_counts, 0, sizeof(_industry_counts));
 	_industry_sort_dirty = true;
 	_industry_sound_tile = 0;
 }
@@ -1926,6 +1936,7 @@
 
 		i = GetIndustry(index);
 		SlObject(i, _industry_desc);
+		IncIndustryTypeCount(i->type);
 
 		_total_industries++;
 	}