(svn r9722) -Documentation: Document some functions of town_cmd.cpp. Loosely based on work from TheJosh

More to come.
This commit is contained in:
belugas 2007-04-27 02:27:44 +00:00
parent 5912b08890
commit 436cb70988
1 changed files with 68 additions and 2 deletions

View File

@ -54,6 +54,11 @@ static void TownPoolNewBlock(uint start_item)
/* Initialize the town-pool */
DEFINE_OLD_POOL(Town, Town, TownPoolNewBlock, NULL)
/**
* Removes a specific town as well as all industries
* under its "juridiction"
* @param t Town to remove
*/
void DestroyTown(Town *t)
{
Industry *i;
@ -120,6 +125,11 @@ uint OriginalTileRandomiser(uint x, uint y)
return variant;
}
/**
* House Tile drawing handler.
* Part of the tile loop process
* @param ti TileInfo of the tile to draw
*/
static void DrawTile_Town(TileInfo *ti)
{
const DrawBuildingsTileStruct *dcts;
@ -187,6 +197,12 @@ static Slope GetSlopeTileh_Town(TileIndex tile, Slope tileh)
return SLOPE_FLAT;
}
/**
* Animate a tile for a town
* Only certain houses can be animated
* The newhouses animation superseeds regular ones
* @param tile TileIndex of the house to animate
*/
static void AnimateTile_Town(TileIndex tile)
{
int pos, dest;
@ -233,6 +249,12 @@ static void AnimateTile_Town(TileIndex tile)
static void UpdateTownRadius(Town *t);
/**
* Determines if a town is close to a tile
* @param tile TileIndex of the tile to query
* @param dist maximum distance to be accepted
* @returns true if the tile correspond to the distance criteria
*/
static bool IsCloseToTown(TileIndex tile, uint dist)
{
const Town* t;
@ -243,6 +265,10 @@ static bool IsCloseToTown(TileIndex tile, uint dist)
return false;
}
/**
* Marks the town sign as needing a repaint
* @param t Town requesting repaint
*/
static void MarkTownSignDirty(Town *t)
{
MarkAllViewportsDirty(
@ -253,6 +279,11 @@ static void MarkTownSignDirty(Town *t)
);
}
/**
* Resize the sign(label) of the town after changes in
* population (creation or growth or else)
* @param t Town to update
*/
void UpdateTownVirtCoord(Town *t)
{
Point pt;
@ -266,6 +297,11 @@ void UpdateTownVirtCoord(Town *t)
MarkTownSignDirty(t);
}
/**
* Change the towns population
* @param t Town which polulation has changed
* @param mod polulation change (can be positive or negative)
*/
static void ChangePopulation(Town *t, int mod)
{
t->population += mod;
@ -275,6 +311,11 @@ static void ChangePopulation(Town *t, int mod)
if (_town_sort_order & 2) _town_sort_dirty = true;
}
/**
* Determines the world population
* Basically, count population of all towns, one by one
* @return uint32 the calculated population of the world
*/
uint32 GetWorldPopulation()
{
uint32 pop;
@ -285,15 +326,22 @@ uint32 GetWorldPopulation()
return pop;
}
/**
* Helper function for house completion stages progression
* @param tile TileIndex of the house (or parts of it) to "grow"
*/
static void MakeSingleHouseBigger(TileIndex tile)
{
assert(IsTileType(tile, MP_HOUSE));
/* means it is completed, get out. */
if (LiftHasDestination(tile)) return;
/* progress in construction stages */
IncHouseConstructionTick(tile);
if (GetHouseConstructionTick(tile) != 0) return;
/* Check and/or */
if (HASBIT(GetHouseSpecs(GetHouseType(tile))->callback_mask, CBM_CONSTRUCTION_STATE_CHANGE)) {
uint16 callback_res = GetHouseCallback(CBID_CONSTRUCTION_STATE_CHANGE, 0, GetHouseType(tile), GetTownByTile(tile), tile);
if (callback_res != CALLBACK_FAILED) ChangeHouseAnimationFrame(tile, callback_res);
@ -307,6 +355,9 @@ static void MakeSingleHouseBigger(TileIndex tile)
MarkTileDirtyByTile(tile);
}
/** Make the house advances in its construction stages until completion
* @param tile TileIndex of house
*/
static void MakeTownHouseBigger(TileIndex tile)
{
uint flags = GetHouseSpecs(GetHouseType(tile))->building_flags;
@ -316,6 +367,10 @@ static void MakeTownHouseBigger(TileIndex tile)
if (flags & BUILDING_HAS_4_TILES) MakeSingleHouseBigger(TILE_ADDXY(tile, 1, 1));
}
/**
* Periodic tic handler for houses and town
* @param tile been asked to do its stuff
*/
static void TileLoop_Town(TileIndex tile)
{
Town *t;
@ -334,7 +389,11 @@ static void TileLoop_Town(TileIndex tile)
}
/* If the lift has a destination, it is already an animated tile. */
if ((hs->building_flags & BUILDING_IS_ANIMATED) && house_id < NEW_HOUSE_OFFSET && !LiftHasDestination(tile) && CHANCE16(1, 2)) AddAnimatedTile(tile);
if ((hs->building_flags & BUILDING_IS_ANIMATED) &&
house_id < NEW_HOUSE_OFFSET &&
!LiftHasDestination(tile) &&
CHANCE16(1, 2))
AddAnimatedTile(tile);
t = GetTownByTile(tile);
@ -362,7 +421,10 @@ static void TileLoop_Town(TileIndex tile)
_current_player = OWNER_TOWN;
if (hs->building_flags & BUILDING_HAS_1_TILE && HASBIT(t->flags12, TOWN_IS_FUNDED) && CanDeleteHouse(tile) && --t->time_until_rebuild == 0) {
if (hs->building_flags & BUILDING_HAS_1_TILE &&
HASBIT(t->flags12, TOWN_IS_FUNDED) &&
CanDeleteHouse(tile) &&
--t->time_until_rebuild == 0) {
t->time_until_rebuild = GB(r, 16, 8) + 192;
ClearTownHouse(t, tile);
@ -374,6 +436,10 @@ static void TileLoop_Town(TileIndex tile)
_current_player = OWNER_NONE;
}
/**
* Unused handler
* @param tile unused
*/
static void ClickTile_Town(TileIndex tile)
{
/* not used */