OpenTTD
|
Base of the town class. More...
#include "viewport_type.h"
#include "town_map.h"
#include "subsidy_type.h"
#include "newgrf_storage.h"
#include "cargotype.h"
#include "tilematrix_type.hpp"
#include <list>
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... |
Macros | |
#define | FOR_ALL_TOWNS_FROM(var, start) FOR_ALL_ITEMS_FROM(Town, town_index, var, start) |
#define | FOR_ALL_TOWNS(var) FOR_ALL_TOWNS_FROM(var, 0) |
Typedefs | |
typedef TileMatrix< uint32, 4 > | AcceptanceMatrix |
typedef Pool< Town, TownID, 64, 64000 > | TownPool |
Enumerations | |
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 | TownFlags { TOWN_IS_GROWING = 0, TOWN_HAS_CHURCH = 1, TOWN_HAS_STADIUM = 2 } |
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 | GetWorldPopulation () |
Determines the world population Basically, count population of all towns, one by one. | |
void | UpdateAllTownVirtCoords () |
Update the virtual coords needed to draw the town sign for all towns. | |
void | ShowTownViewWindow (TownID town) |
void | ExpandTown (Town *t) |
CommandCost | CheckforTownRating (DoCommandFlag flags, Town *t, TownRatingCheckType type) |
Does the town authority allow the (destructive) action of the current company? | |
TileIndexDiff | GetHouseNorthPart (HouseID &house) |
Determines if a given HouseID is part of a multitile house. | |
Town * | CalcClosestTownFromTile (TileIndex tile, uint threshold=UINT_MAX) |
Return the town closest to the given tile within threshold. | |
void | ResetHouses () |
void | ClearTownHouse (Town *t, TileIndex tile) |
void | UpdateTownMaxPass (Town *t) |
void | UpdateTownRadius (Town *t) |
void | UpdateTownCargoes (Town *t) |
Update cargo acceptance for the complete town. | |
void | UpdateTownCargoTotal (Town *t) |
Update the total cargo acceptance of the whole town. | |
void | UpdateTownCargoBitmap () |
Updates the bitmap of all cargoes accepted by houses. | |
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. | |
Town * | ClosestTownFromTile (TileIndex tile, uint threshold) |
Return the town closest (in distance or ownership) to a given tile, within a given threshold. | |
void | ChangeTownRating (Town *t, int add, int max, DoCommandFlag flags) |
Changes town rating of the current company. | |
HouseZonesBits | GetTownRadiusGroup (const Town *t, TileIndex tile) |
Returns the bit corresponding to the town zone of the specified tile. | |
void | SetTownRatingTestMode (bool mode) |
Switch the town rating to test-mode, to allow commands to be tested without affecting current ratings. | |
uint | GetMaskOfTownActions (int *nump, CompanyID cid, const Town *t) |
Get a list of available actions to do at a town. | |
bool | GenerateTowns (TownLayout layout) |
This function will generate a certain amount of towns, with a certain layout It can be called from the scenario editor (i.e. | |
const CargoSpec * | FindFirstCargoWithTownEffect (TownEffect effect) |
Determines the first cargo with a certain town effect. | |
template<class T > | |
void | MakeDefaultName (T *obj) |
Set the default name for a depot/waypoint. |
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 uint | 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 | TOWN_GROW_RATE_CUSTOM = 0x8000 |
If this mask is applied to Town::growth_rate, the grow_counter will not be calculated by the system (but assumed to be set by scripts) | |
static const uint16 | TOWN_GROW_RATE_CUSTOM_NONE = 0xFFFF |
Special value for Town::growth_rate to disable town growth. | |
TownPool | _town_pool |
const byte | _town_action_costs [TACT_COUNT] |
Factor in the cost of each town action. | |
TownID | _new_town_id |
uint32 | _town_cargoes_accepted |
Bitmap of all cargoes accepted by houses. |
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...
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. |
enum TownRatingCheckType |
Action types that a company must ask permission for to a town authority.
Return the town closest to the given tile within threshold.
tile | Starting point of the search. |
threshold | Biggest allowed distance to the town. |
NULL
if there is no such town.Definition at line 3220 of file town_cmd.cpp.
References DistanceManhattan(), and Town::xy.
Referenced by AfterLoadGame(), BuildObject(), ClosestTownFromTile(), CmdBuildBridge(), CmdBuildRoad(), CmdBuildTunnel(), Town::PostDestructor(), RemoveRoad(), and UpdateNearestTownForRoadTiles().
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 3324 of file town_cmd.cpp.
References _cheats, _current_company, 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, max(), Town::ratings, SetBit(), SetWindowDirty(), Cheat::value, and WC_TOWN_AUTHORITY.
Referenced by CheckAllowRemoveRoad(), CmdPlantTree(), DoClearBridge(), and DoClearTunnel().
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 3361 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_NEUTRAL, RATING_ROAD_NEEDED_PERMISSIVE, RATING_TUNNEL_BRIDGE_NEEDED_HOSTILE, 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.
Referenced by CheckAllowRemoveRoad(), DoClearBridge(), and DoClearTunnel().
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 3199 of file town_cmd.cpp.
References _current_company, _settings_game, ClosestTownFromTile(), DC_NO_TEST_TOWN_RATING, EconomySettings::dist_local_authority, GameSettings::economy, 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(), Town::ratings, return_cmd_error, and SetDParam().
Referenced by CmdBuildAirport(), CmdBuildDock(), CmdBuildRailStation(), and CmdBuildRoadStop().
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. |
NULL
if there is no such town.Definition at line 3245 of file town_cmd.cpp.
References _generating_world, CalcClosestTownFromTile(), DistanceManhattan(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_town_pool >::Get(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_town_pool >::GetNumItems(), GetTileType(), GetTownIndex(), HasTownOwnedRoad(), IsRoadDepot(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_town_pool >::IsValidID(), MP_HOUSE, MP_ROAD, and Town::xy.
Referenced by AfterLoadGame(), BuildStationPart(), CheckAllowRemoveRoad(), CheckIfAuthorityAllowsNewStation(), CheckIfCallBackAllowsCreation(), CmdBuildAirport(), CmdBuildBridge(), CmdDeleteTown(), CmdPlantTree(), CmdRemoveRoadStop(), DisasterTick_Big_Ufo(), DoClearBridge(), DoClearTunnel(), FindTownForIndustry(), GenerateCompanyName(), GetNameOfOwner(), IndustriesResolverObject::GetTown(), StationResolverObject::GetTown(), ObjectResolverObject::GetTown(), IndustryTileScopeResolver::GetVariable(), RailTypeScopeResolver::GetVariable(), AirportTileScopeResolver::GetVariable(), ObjectScopeResolver::GetVariable(), MakeDefaultName(), LandInfoWindow::OnInit(), and Town::~Town().
const CargoSpec* FindFirstCargoWithTownEffect | ( | TownEffect | effect | ) |
Determines the first cargo with a certain town effect.
effect | Town effect of interest |
Definition at line 2516 of file town_cmd.cpp.
References CargoSpec::town_effect.
Referenced by AfterLoadGame(), CmdTownCargoGoal(), DoCreateTown(), and TownViewWindow::DrawWidget().
bool GenerateTowns | ( | TownLayout | layout | ) |
This function will generate a certain amount of towns, with a certain layout It can be called from the scenario editor (i.e.
: generate Random Towns) as well as from world creation.
layout | which towns will be set to, when created |
Definition at line 1949 of file town_cmd.cpp.
References _settings_game, Chance16(), GameCreationSettings::custom_town_number, CUSTOM_TOWN_NUMBER_DIFFICULTY, GameSettings::difficulty, GameSettings::economy, GameSettings::game_creation, GenerateTownName(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_town_pool >::GetNumItems(), GWP_TOWN, IncreaseGeneratingWorldProgress(), INVALID_STRING_ID, EconomySettings::larger_towns, Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::MAX_SIZE, min(), DifficultySettings::number_towns, ScaleByMapSize(), SetGeneratingWorldProgress(), ShowErrorMessage(), TSZ_RANDOM, and WL_CRITICAL.
Referenced by _GenerateWorld(), and FoundTownWindow::OnClick().
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 2421 of file town_cmd.cpp.
References TileDiffXY().
Referenced by GetDistanceFromNearbyHouse(), RebuildTownCaches(), SearchNearbyHouseClass(), SearchNearbyHouseGRFID(), SearchNearbyHouseID(), UpdateHousesAndTowns(), and WatchedCargoCallback().
Get a list of available actions to do at a town.
nump | if not NULL add put the number of available actions in it |
cid | the company that is querying the town |
t | the town that is queried |
Definition at line 2995 of file town_cmd.cpp.
References _settings_game, EconomySettings::bribe, COMPANY_SPECTATOR, GameSettings::economy, EconomySettings::exclusive_rights, EconomySettings::fund_buildings, EconomySettings::fund_roads, Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_company_pool >::Get(), HasBit(), lengthof, Town::ratings, Town::statues, TACT_BRIBE, TACT_BUILD_STATUE, TACT_BUY_RIGHTS, TACT_FUND_BUILDINGS, TACT_NONE, TACT_ROAD_REBUILD, and Town::unwanted.
Referenced by CmdDoTownAction(), TownAuthorityWindow::DrawWidget(), TownAuthorityWindow::OnClick(), and 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 1998 of file town_cmd.cpp.
References DistanceSquare(), Town::fund_buildings_months, and Town::xy.
Referenced by BuildTownHouse(), RailTypeScopeResolver::GetVariable(), IndustryTileScopeResolver::GetVariable(), IndustriesScopeResolver::GetVariable(), AirportTileScopeResolver::GetVariable(), HouseScopeResolver::GetVariable(), and ObjectScopeResolver::GetVariable().
uint32 GetWorldPopulation | ( | ) |
Determines the world population Basically, count population of all towns, one by one.
Definition at line 415 of file town_cmd.cpp.
References Town::cache, and TownCache::population.
Referenced by TownDirectoryWindow::SetStringParameters().
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 229 of file town.h.
References ClosestTownFromTile(), HasBit(), and SetBit().
Referenced by AfterLoadGame(), CmdBuildBuoy(), CmdBuildRailWaypoint(), CmdBuildRoadDepot(), CmdBuildShipDepot(), CmdBuildTrainDepot(), and 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 3286 of file town_cmd.cpp.
References SmallVector< SmallPair< T, U >, S >::Clear().
Referenced by DoCommand(), and DoCommandPInternal().
void UpdateAllTownVirtCoords | ( | ) |
Update the virtual coords needed to draw the town sign for all towns.
Definition at line 387 of file town_cmd.cpp.
References Town::UpdateVirtCoord().
Referenced by UpdateAllVirtCoords().
void UpdateTownCargoBitmap | ( | ) |
Updates the bitmap of all cargoes accepted by houses.
Definition at line 768 of file town_cmd.cpp.
References _town_cargoes_accepted, and Town::cargo_accepted_total.
Referenced by RebuildTownCaches().
void UpdateTownCargoes | ( | Town * | t | ) |
Update cargo acceptance for the complete town.
t | The town to update. |
Definition at line 749 of file town_cmd.cpp.
References Town::cargo_accepted, Town::cargo_produced, TileMatrix< T, N >::GetArea(), INVALID_TILE, OrthogonalTileArea::tile, TILE_AREA_LOOP, TileX(), TileY(), UpdateTownCargoes(), and UpdateTownCargoTotal().
Referenced by AfterLoadGame(), BuildTownHouse(), RebuildTownCaches(), and UpdateTownCargoes().
void UpdateTownCargoTotal | ( | Town * | t | ) |
Update the total cargo acceptance of the whole town.
t | The town to update. |
Definition at line 701 of file town_cmd.cpp.
References Town::cargo_accepted, Town::cargo_accepted_total, TileMatrix< T, N >::GetArea(), TILE_AREA_LOOP, TileX(), and TileY().
Referenced by UpdateTownCargoes().
const byte _town_action_costs[TACT_COUNT] |
Factor in the cost of each town action.
Definition at line 2756 of file town_cmd.cpp.
Referenced by TownAuthorityWindow::DrawWidget(), and TownAuthorityWindow::UpdateWidgetSize().