changeset 4396:2238f338aed8 draft

(svn r6149) -Codechange: DeleteTown removes a town from the pool -Codechange: DestroyTown is called by DeleteTown to remove all things where a town depends on. Last 2 changes to prepare for new pool system. Not pretty now, will be soon.
author truelight <truelight@openttd.org>
date Sat, 26 Aug 2006 18:05:05 +0000
parents 38382c391681
children 0ce445ab0a05
files town.h town_cmd.c
diffstat 2 files changed, 45 insertions(+), 43 deletions(-) [+]
line wrap: on
line diff
--- a/town.h
+++ b/town.h
@@ -81,7 +81,6 @@
 void UpdateTownVirtCoord(Town *t);
 void InitializeTown(void);
 void ShowTownViewWindow(TownID town);
-void DeleteTown(Town *t);
 void ExpandTown(Town *t);
 Town *CreateRandomTown(uint attempts, uint size_mode);
 
@@ -218,6 +217,14 @@
 	return index < GetTownPoolSize() && IsValidTown(GetTown(index));
 }
 
+void DestroyTown(Town *t);
+
+static inline void DeleteTown(Town *t)
+{
+	DestroyTown(t);
+	t->xy = 0;
+}
+
 #define FOR_ALL_TOWNS_FROM(t, start) for (t = GetTown(start); t != NULL; t = (t->index + 1 < GetTownPoolSize()) ? GetTown(t->index + 1) : NULL) if (IsValidTown(t))
 #define FOR_ALL_TOWNS(t) FOR_ALL_TOWNS_FROM(t, 0)
 
--- a/town_cmd.c
+++ b/town_cmd.c
@@ -51,6 +51,43 @@
 /* Initialize the town-pool */
 MemoryPool _town_pool = { "Towns", TOWN_POOL_MAX_BLOCKS, TOWN_POOL_BLOCK_SIZE_BITS, sizeof(Town), &TownPoolNewBlock, NULL, 0, 0, NULL };
 
+void DestroyTown(Town *t)
+{
+	Industry *i;
+	TileIndex tile;
+
+	/* Delete town authority window
+	 * and remove from list of sorted towns */
+	DeleteWindowById(WC_TOWN_VIEW, t->index);
+	_town_sort_dirty = true;
+
+	/* Delete all industries belonging to the town */
+	FOR_ALL_INDUSTRIES(i) if (i->town == t) DeleteIndustry(i);
+
+	/* Go through all tiles and delete those belonging to the town */
+	for (tile = 0; tile < MapSize(); ++tile) {
+		switch (GetTileType(tile)) {
+			case MP_HOUSE:
+				if (GetTownByTile(tile) == t) DoCommand(tile, 0, 0, DC_EXEC, CMD_LANDSCAPE_CLEAR);
+				break;
+
+			case MP_STREET:
+			case MP_TUNNELBRIDGE:
+				if (IsTileOwner(tile, OWNER_TOWN) &&
+						ClosestTownFromTile(tile, (uint)-1) == t)
+					DoCommand(tile, 0, 0, DC_EXEC, CMD_LANDSCAPE_CLEAR);
+				break;
+
+			default:
+				break;
+		}
+	}
+
+	DeleteName(t->townnametype);
+
+	MarkWholeScreenDirty();
+}
+
 // Local
 static int _grow_town_result;
 
@@ -1363,48 +1400,6 @@
 }
 
 // Called from GUI
-void DeleteTown(Town *t)
-{
-	Industry *i;
-	TileIndex tile;
-
-	// Delete town authority window
-	//  and remove from list of sorted towns
-	DeleteWindowById(WC_TOWN_VIEW, t->index);
-	_town_sort_dirty = true;
-
-	// Delete all industries belonging to the town
-	FOR_ALL_INDUSTRIES(i) {
-		if (i->town == t) DeleteIndustry(i);
-	}
-
-	// Go through all tiles and delete those belonging to the town
-	for (tile = 0; tile < MapSize(); ++tile) {
-		switch (GetTileType(tile)) {
-			case MP_HOUSE:
-				if (GetTownByTile(tile) == t)
-					DoCommand(tile, 0, 0, DC_EXEC, CMD_LANDSCAPE_CLEAR);
-				break;
-
-			case MP_STREET:
-			case MP_TUNNELBRIDGE:
-				if (IsTileOwner(tile, OWNER_TOWN) &&
-						ClosestTownFromTile(tile, (uint)-1) == t)
-					DoCommand(tile, 0, 0, DC_EXEC, CMD_LANDSCAPE_CLEAR);
-				break;
-
-			default:
-				break;
-		}
-	}
-
-	t->xy = 0;
-	DeleteName(t->townnametype);
-
-	MarkWholeScreenDirty();
-}
-
-// Called from GUI
 void ExpandTown(Town *t)
 {
 	int amount, n;