OpenTTD Source
20241121-master-g67a0fccfad
|
Base of the town class. More...
#include "viewport_type.h"
#include "timer/timer_game_tick.h"
#include "town_map.h"
#include "subsidy_type.h"
#include "newgrf_storage.h"
#include "cargotype.h"
Go to the source code of this file.
Data Structures | |
struct | BuildingCounts< T > |
struct | TownCache |
Data structure with cached data of towns. More... | |
struct | Town |
Town data structure. More... | |
Typedefs | |
typedef Pool< Town, TownID, 64, 64000 > | TownPool |
Enumerations | |
enum | TownCouncilAttitudes { TOWN_COUNCIL_LENIENT = 0 , TOWN_COUNCIL_TOLERANT = 1 , TOWN_COUNCIL_HOSTILE = 2 , TOWN_COUNCIL_PERMISSIVE = 3 } |
Settings for town council attitudes. | |
enum | TownRatingCheckType { ROAD_REMOVE = 0 , TUNNELBRIDGE_REMOVE = 1 , TOWN_RATING_CHECK_TYPE_COUNT } |
Action types that a company must ask permission for to a town authority. More... | |
enum | TownDirectoryInvalidateWindowData { TDIWD_FORCE_REBUILD , TDIWD_POPULATION_CHANGE , TDIWD_FORCE_RESORT } |
Special values for town list window for the data parameter of InvalidateWindowData. | |
enum | TownFlags { TOWN_IS_GROWING = 0 , TOWN_HAS_CHURCH = 1 , TOWN_HAS_STADIUM = 2 , TOWN_CUSTOM_GROWTH = 3 } |
This enum is used in conjunction with town->flags. More... | |
enum | TownActions { TACT_NONE = 0x00 , TACT_ADVERTISE_SMALL = 0x01 , TACT_ADVERTISE_MEDIUM = 0x02 , TACT_ADVERTISE_LARGE = 0x04 , TACT_ROAD_REBUILD = 0x08 , TACT_BUILD_STATUE = 0x10 , TACT_FUND_BUILDINGS = 0x20 , TACT_BUY_RIGHTS = 0x40 , TACT_BRIBE = 0x80 , TACT_COUNT = 8 , TACT_ADVERTISE = TACT_ADVERTISE_SMALL | TACT_ADVERTISE_MEDIUM | TACT_ADVERTISE_LARGE , TACT_CONSTRUCTION = TACT_ROAD_REBUILD | TACT_BUILD_STATUE | TACT_FUND_BUILDINGS , TACT_FUNDS = TACT_BUY_RIGHTS | TACT_BRIBE , TACT_ALL = TACT_ADVERTISE | TACT_CONSTRUCTION | TACT_FUNDS } |
Town actions of a company. More... | |
Functions | |
uint32_t | GetWorldPopulation () |
Get the total population, the sum of all towns in the world. More... | |
void | UpdateAllTownVirtCoords () |
Update the virtual coords needed to draw the town sign for all towns. | |
void | ClearAllTownCachedNames () |
Clear the cached_name of all towns. | |
void | ShowTownViewWindow (TownID town) |
void | ExpandTown (Town *t) |
void | RebuildTownKdtree () |
CommandCost | CheckforTownRating (DoCommandFlag flags, Town *t, TownRatingCheckType type) |
Does the town authority allow the (destructive) action of the current company? More... | |
TileIndexDiff | GetHouseNorthPart (HouseID &house) |
Determines if a given HouseID is part of a multitile house. More... | |
Town * | CalcClosestTownFromTile (TileIndex tile, uint threshold=UINT_MAX) |
Return the town closest to the given tile within threshold. More... | |
void | ResetHouses () |
void | ClearTownHouse (Town *t, TileIndex tile) |
Clear a town house. More... | |
void | UpdateTownMaxPass (Town *t) |
Update the maximum amount of montly passengers and mail for a town, based on its population. More... | |
void | UpdateTownRadius (Town *t) |
Update the cached town zone radii of a town, based on the number of houses. More... | |
CommandCost | CheckIfAuthorityAllowsNewStation (TileIndex tile, DoCommandFlag flags) |
Checks whether the local authority allows construction of a new station (rail, road, airport, dock) on the given tile. More... | |
Town * | ClosestTownFromTile (TileIndex tile, uint threshold) |
Return the town closest (in distance or ownership) to a given tile, within a given threshold. More... | |
void | ChangeTownRating (Town *t, int add, int max, DoCommandFlag flags) |
Changes town rating of the current company. More... | |
HouseZonesBits | GetTownRadiusGroup (const Town *t, TileIndex tile) |
Returns the bit corresponding to the town zone of the specified tile. More... | |
void | SetTownRatingTestMode (bool mode) |
Switch the town rating to test-mode, to allow commands to be tested without affecting current ratings. More... | |
TownActions | GetMaskOfTownActions (CompanyID cid, const Town *t) |
Get a list of available town authority actions. More... | |
bool | GenerateTowns (TownLayout layout) |
Generate a number of towns with a given layout. More... | |
const CargoSpec * | FindFirstCargoWithTownAcceptanceEffect (TownAcceptanceEffect effect) |
Determines the first cargo with a certain town effect. More... | |
template<class T > | |
void | MakeDefaultName (T *obj) |
Set the default name for a depot/waypoint. More... | |
uint16_t | TownTicksToGameTicks (uint16_t ticks) |
RoadType | GetTownRoadType () |
Get the road type that towns should build at this current moment. More... | |
bool | CheckTownRoadTypes () |
Check if towns are able to build road. More... | |
std::span< const DrawBuildingsTileStruct > | GetTownDrawTileData () |
Variables | |
static const uint | CUSTOM_TOWN_NUMBER_DIFFICULTY = 4 |
value for custom town number in difficulty settings | |
static const uint | CUSTOM_TOWN_MAX_NUMBER = 5000 |
this is the maximum number of towns a user can specify in customisation | |
static const TownID | INVALID_TOWN = 0xFFFF |
static const uint | TOWN_GROWTH_WINTER = 0xFFFFFFFE |
The town only needs this cargo in the winter (any amount) | |
static const uint | TOWN_GROWTH_DESERT = 0xFFFFFFFF |
The town needs the cargo for growth when on desert (any amount) | |
static const uint16_t | TOWN_GROWTH_RATE_NONE = 0xFFFF |
Special value for Town::growth_rate to disable town growth. | |
static const uint16_t | MAX_TOWN_GROWTH_TICKS = 930 |
Max amount of original town ticks that still fit into uint16_t, about equal to UINT16_MAX / TOWN_GROWTH_TICKS but slightly less to simplify calculations. | |
TownPool | _town_pool |
const uint8_t | _town_action_costs [TACT_COUNT] |
Factor in the cost of each town action. More... | |
Base of the town class.
Definition in file town.h.
enum TownActions |
Town actions of a company.
enum TownFlags |
This enum is used in conjunction with town->flags.
IT simply states what bit is used for. It is pretty unrealistic (IMHO) to only have one church/stadium per town, NO MATTER the population of it. And there are 5 more bits available on flags...
Enumerator | |
---|---|
TOWN_IS_GROWING | Conditions for town growth are met. Grow according to Town::growth_rate. |
TOWN_HAS_CHURCH | There can be only one church by town. |
TOWN_HAS_STADIUM | There can be only one stadium by town. |
TOWN_CUSTOM_GROWTH | Growth rate is controlled by GS. |
enum TownRatingCheckType |
Action types that a company must ask permission for to a town authority.
Enumerator | |
---|---|
ROAD_REMOVE | Removal of a road owned by the town. |
TUNNELBRIDGE_REMOVE | Removal of a tunnel or bridge owned by the towb. |
TOWN_RATING_CHECK_TYPE_COUNT | Number of town checking action types. |
Return the town closest to the given tile within threshold.
tile | Starting point of the search. |
threshold | Biggest allowed distance to the town. |
nullptr
if there is no such town.Definition at line 3852 of file town_cmd.cpp.
Referenced by AirportGetNearestTown(), BuildObject(), ClosestTownFromTile(), CmdBuildBridge(), CmdBuildRoad(), and CmdBuildTunnel().
void ChangeTownRating | ( | Town * | t, |
int | add, | ||
int | max, | ||
DoCommandFlag | flags | ||
) |
Changes town rating of the current company.
t | Town to affect |
add | Value to add |
max | Minimum (add < 0) resp. maximum (add > 0) rating that should be achievable with this change. |
flags | Command flags, especially DC_NO_MODIFY_TOWN_RATING is tested |
Definition at line 3949 of file town_cmd.cpp.
References _cheats, _current_company, _town_rating_test, _town_test_ratings, DC_NO_MODIFY_TOWN_RATING, GetRating(), Town::have_ratings, Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::index, Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_company_pool >::IsValidID(), Cheats::magic_bulldozer, Town::ratings, SetBit(), SetWindowDirty(), Cheat::value, and WC_TOWN_AUTHORITY.
CommandCost CheckforTownRating | ( | DoCommandFlag | flags, |
Town * | t, | ||
TownRatingCheckType | type | ||
) |
Does the town authority allow the (destructive) action of the current company?
flags | Checking flags of the command. |
t | Town that must allow the company action. |
type | Type of action that is wanted. |
Definition at line 3986 of file town_cmd.cpp.
References _cheats, _current_company, _settings_game, DC_NO_TEST_TOWN_RATING, GameSettings::difficulty, GetRating(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::index, Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_company_pool >::IsValidID(), Cheats::magic_bulldozer, RATING_ROAD_NEEDED_HOSTILE, RATING_ROAD_NEEDED_LENIENT, RATING_ROAD_NEEDED_NEUTRAL, RATING_ROAD_NEEDED_PERMISSIVE, RATING_TUNNEL_BRIDGE_NEEDED_HOSTILE, RATING_TUNNEL_BRIDGE_NEEDED_LENIENT, RATING_TUNNEL_BRIDGE_NEEDED_NEUTRAL, RATING_TUNNEL_BRIDGE_NEEDED_PERMISSIVE, return_cmd_error, SetDParam(), DifficultySettings::town_council_tolerance, TOWN_RATING_CHECK_TYPE_COUNT, and Cheat::value.
CommandCost CheckIfAuthorityAllowsNewStation | ( | TileIndex | tile, |
DoCommandFlag | flags | ||
) |
Checks whether the local authority allows construction of a new station (rail, road, airport, dock) on the given tile.
tile | The tile where the station shall be constructed. |
flags | Command flags. DC_NO_TEST_TOWN_RATING is tested. |
Definition at line 3828 of file town_cmd.cpp.
References _settings_game, GameSettings::difficulty, and DifficultySettings::town_council_tolerance.
bool CheckTownRoadTypes | ( | ) |
Check if towns are able to build road.
Definition at line 982 of file town_cmd.cpp.
References TimerGameCalendar::date, GetTownRoadTypeFirstIntroductionDate(), SetDParam(), ShowErrorMessage(), and WL_CRITICAL.
Clear a town house.
t | The town which owns the house. |
tile | The tile to clear. |
Definition at line 2949 of file town_cmd.cpp.
References HouseSpec::building_flags, Town::cache, ChangePopulation(), HouseSpec::Get(), GetHouseNorthPart(), GetHouseType(), IsHouseCompleted(), IsTileType(), MP_HOUSE, TownCache::num_houses, and HouseSpec::population.
Return the town closest (in distance or ownership) to a given tile, within a given threshold.
tile | Starting point of the search. |
threshold | Biggest allowed distance to the town. |
nullptr
if there is no such town.Definition at line 3870 of file town_cmd.cpp.
References CalcClosestTownFromTile(), GetTileType(), GetTownIndex(), HasTownOwnedRoad(), IsRoadDepot(), and MP_ROAD.
Referenced by FindTownForIndustry(), GenerateCompanyName(), AirportResolverObject::GetTown(), ObjectResolverObject::GetTown(), StationResolverObject::GetTown(), AirportTileScopeResolver::GetVariable(), IndustryTileScopeResolver::GetVariable(), ObjectScopeResolver::GetVariable(), LandInfoWindow::OnInit(), and SetDParamsForOwnedBy().
const CargoSpec* FindFirstCargoWithTownAcceptanceEffect | ( | TownAcceptanceEffect | effect | ) |
Determines the first cargo with a certain town effect.
effect | Town effect of interest |
Definition at line 3026 of file town_cmd.cpp.
References CargoSpec::Iterate().
Referenced by CmdTownCargoGoal().
bool GenerateTowns | ( | TownLayout | layout | ) |
Generate a number of towns with a given layout.
This function is used by the Random Towns button in Scenario Editor as well as in world generation.
layout | The road layout to build. |
Definition at line 2386 of file town_cmd.cpp.
TileIndexDiff GetHouseNorthPart | ( | HouseID & | house | ) |
Determines if a given HouseID is part of a multitile house.
The given ID is set to the ID of the north tile and the TileDiff to the north tile is returned.
house | Is changed to the HouseID of the north tile of the same house |
Definition at line 2924 of file town_cmd.cpp.
References HouseSpec::Get().
Referenced by ClearTownHouse(), GetDistanceFromNearbyHouse(), SearchNearbyHouseClass(), SearchNearbyHouseGRFID(), and SearchNearbyHouseID().
TownActions GetMaskOfTownActions | ( | CompanyID | cid, |
const Town * | t | ||
) |
Get a list of available town authority actions.
cid | The company that is querying the town. |
t | The town that is queried. |
Definition at line 3579 of file town_cmd.cpp.
References _settings_game, _town_action_costs, EconomySettings::bribe, COMPANY_SPECTATOR, GameSettings::economy, GetAvailableMoney(), lengthof, Town::ratings, TACT_BRIBE, TACT_NONE, and Town::unwanted.
Referenced by TownAuthorityWindow::OnPaint().
Returns the bit corresponding to the town zone of the specified tile.
t | Town on which town zone is to be found. |
tile | TileIndex where town zone needs to be found. |
Definition at line 2447 of file town_cmd.cpp.
References DistanceSquare(), Town::fund_buildings_months, and Town::xy.
Referenced by AirportTileScopeResolver::GetVariable(), HouseScopeResolver::GetVariable(), IndustriesScopeResolver::GetVariable(), IndustryTileScopeResolver::GetVariable(), ObjectScopeResolver::GetVariable(), and TryBuildTownHouse().
RoadType GetTownRoadType | ( | ) |
Get the road type that towns should build at this current moment.
They may have built a different type in the past.
Definition at line 926 of file town_cmd.cpp.
References ROADTYPE_ROAD.
Referenced by CanRoadContinueIntoNextTile(), GrowTown(), GrowTownWithBridge(), GrowTownWithRoad(), GrowTownWithTunnel(), and IsRoadAllowedHere().
uint32_t GetWorldPopulation | ( | ) |
Get the total population, the sum of all towns in the world.
Definition at line 462 of file town_cmd.cpp.
References Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_town_pool >::Iterate().
void MakeDefaultName | ( | T * | obj | ) |
Set the default name for a depot/waypoint.
T | The type/class to make a default name for |
obj | The object/instance we want to find the name for |
Definition at line 253 of file town.h.
Referenced by CmdRenameDepot().
void SetTownRatingTestMode | ( | bool | mode | ) |
Switch the town rating to test-mode, to allow commands to be tested without affecting current ratings.
The function is safe to use in nested calls.
mode | Test mode switch (true means go to test-mode, false means leave test-mode). |
Definition at line 3911 of file town_cmd.cpp.
References _town_rating_test, and _town_test_ratings.
Referenced by CommandHelperBase::InternalDoAfter(), and CommandHelperBase::InternalExecuteValidateTestAndPrepExec().
void UpdateTownMaxPass | ( | Town * | t | ) |
Update the maximum amount of montly passengers and mail for a town, based on its population.
t | The town to update. |
Definition at line 1966 of file town_cmd.cpp.
References Town::cache, TransportedCargoStat< Tstorage >::old_max, TownCache::population, ScaleByCargoScale(), Town::supplied, CargoSpec::town_production_cargoes, TPE_MAIL, and TPE_PASSENGERS.
void UpdateTownRadius | ( | Town * | t | ) |
Update the cached town zone radii of a town, based on the number of houses.
t | The town to update. |
Definition at line 1919 of file town_cmd.cpp.
References Town::cache, TownCache::num_houses, and TownCache::squared_town_zone_radius.
Referenced by DoCreateTown().
|
extern |
Factor in the cost of each town action.
Definition at line 3288 of file town_cmd.cpp.
Referenced by GetMaskOfTownActions().