mirror of
https://github.com/OpenTTD/OpenTTD.git
synced 2025-03-08 23:19:40 +00:00
(svn r9722) -Documentation: Document some functions of town_cmd.cpp. Loosely based on work from TheJosh
More to come.
This commit is contained in:
parent
5912b08890
commit
436cb70988
@ -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 */
|
||||
|
Loading…
Reference in New Issue
Block a user