(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.
This commit is contained in:
79
town_cmd.c
79
town_cmd.c
@@ -51,6 +51,43 @@ static void TownPoolNewBlock(uint start_item)
|
||||
/* 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;
|
||||
|
||||
@@ -1362,48 +1399,6 @@ int32 CmdRenameTown(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
|
||||
return 0;
|
||||
}
|
||||
|
||||
// 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)
|
||||
{
|
||||
|
Reference in New Issue
Block a user