22 std::vector<T> id_count{};
23 std::vector<T> class_count{};
48 auto operator<=>(
const TownCache &)
const =
default;
58 uint32_t townnamegrfid = 0;
59 uint16_t townnametype = 0;
60 uint32_t townnameparts = 0;
79 std::array<uint32_t, NUM_TAE>
goal{};
83 inline uint8_t GetPercentTransported(
CargoType cargo_type)
const
86 return this->
supplied[cargo_type].old_act * 256 / (this->
supplied[cargo_type].old_max + 1);
104 std::vector<PersistentStorage *> psa_list{};
133 inline const std::string &GetCachedName()
const
135 if (!this->
name.empty())
return this->
name;
136 if (this->
cached_name.empty()) this->FillCachedName();
149 void FillCachedName()
const;
156void ShowTownViewWindow(
TownID town);
157void ExpandTown(
Town *t);
159void RebuildTownKdtree();
163 TOWN_COUNCIL_LENIENT = 0,
164 TOWN_COUNCIL_TOLERANT = 1,
165 TOWN_COUNCIL_HOSTILE = 2,
166 TOWN_COUNCIL_PERMISSIVE = 3,
182 TDIWD_POPULATION_CHANGE,
249 assert(obj->name.empty() || obj->town_cn == UINT16_MAX);
270 T *lobj = T::GetIfValid(cid);
273 if (lobj !=
nullptr && obj != lobj) {
275 if (lobj->town == obj->town && lobj->IsOfType(obj)) {
277 uint i = (uint)lobj->town_cn - next;
287 }
while (
HasBit(used, 0));
298 if (cid == T::GetPoolSize()) cid = 0;
299 }
while (cid != idx);
301 obj->town_cn = (uint16_t)next;
308inline uint16_t TownTicksToGameTicks(uint16_t ticks)
316std::span<const DrawBuildingsTileStruct> GetTownDrawTileData();
debug_inline constexpr bool HasBit(const T x, const uint8_t y)
Checks if a bit in a value is set.
constexpr T SetBit(T &x, const uint8_t y)
Set a bit in a variable.
uint8_t CargoType
Cargo slots to indicate a cargo type within a game.
bool IsValidCargoType(CargoType t)
Test whether cargo type is not INVALID_CARGO.
static const CargoType NUM_CARGO
Maximum number of cargo types in a game.
Types/functions related to cargoes.
TownAcceptanceEffect
Town growth effect when delivering cargo.
@ NUM_TAE
Amount of town effects.
Common return value for all commands.
Container for an encoded string, created by GetEncodedString.
A sort-of mixin that adds 'at(pos)' and 'operator[](pos)' implementations for 'ConvertibleThroughBase...
static constexpr TimerGameTick::Ticks TOWN_GROWTH_TICKS
Cycle duration for towns trying to grow (this originates from the size of the town array in TTD).
#define DECLARE_INCREMENT_DECREMENT_OPERATORS(enum_type)
For some enums it is useful to have pre/post increment/decrement operators.
uint16_t HouseID
OpenTTD ID of house types.
int32_t TileIndexDiff
An offset value between two tiles.
Functionality related to the temporary and persistent storage arrays for NewGRFs.
RoadType
The different roadtypes we support.
GameSettings _settings_game
Game settings of a running game or the scenario editor.
std::set< Station *, StationCompare > StationList
List of stations.
Class for storing amounts of cargo.
Specification of a cargo type.
uint8_t town_council_tolerance
minimum required town ratings to be allowed to demolish stuff
uint16_t town_noise_population[4]
population to base decision on noise evaluation (
EconomySettings economy
settings to change the economy
DifficultySettings difficulty
settings related to the difficulty
Base class for all PoolItems.
static Titem * Get(auto index)
Returns Titem with given index.
Tindex index
Index of this pool item.
Base class for all pools.
Data structure with cached data of towns.
uint32_t population
Current population of people.
uint32_t num_houses
Amount of houses.
std::array< uint32_t, HZB_END > squared_town_zone_radius
UpdateTownRadius updates this given the house count.
TrackedViewportSign sign
Location of name sign, UpdateVirtCoord updates this.
BuildingCounts< uint16_t > building_counts
The number of each type of building in the town.
PartsOfSubsidy part_of_subsidy
Is this town a source/destination of a subsidy?
EncodedString text
General text with additional information.
bool larger_town
if this is a larger town and should grow more quickly
Town(TileIndex tile=INVALID_TILE)
Creates a new town.
CompanyMask statues
which companies have a statue?
uint16_t time_until_rebuild
time until we rebuild a house
ReferenceThroughBaseContainer< std::array< int16_t, MAX_COMPANIES > > ratings
ratings of each company for this town
std::string cached_name
NOSAVE: Cache of the resolved name of the town, if not using a custom town name.
TileIndex xy
town center tile
uint8_t fund_buildings_months
fund buildings program in action?
uint16_t noise_reached
level of noise that all the airports are generating
TownLayout layout
town specific road layout
uint16_t MaxTownNoise() const
Calculate the max town noise.
static Town * GetRandom()
Return a random valid town.
ReferenceThroughBaseContainer< std::array< uint8_t, MAX_COMPANIES > > unwanted
how many months companies aren't wanted by towns (bribe)
std::string name
Custom town name. If empty, the town was not renamed and uses the generated name.
uint16_t grow_counter
counter to count when to grow, value is smaller than or equal to growth_rate
uint8_t flags
See TownFlags.
TownCache cache
Container for all cacheable data.
CompanyID exclusivity
which company has exclusivity
std::array< TransportedCargoStat< uint32_t >, NUM_CARGO > supplied
Cargo statistics about supplied cargo.
void InitializeLayout(TownLayout layout)
Assign the town layout.
bool show_zone
NOSAVE: mark town to show the local authority zone in the viewports.
uint8_t exclusive_counter
months till the exclusivity expires
void UpdateVirtCoord()
Resize the sign (label) of the town after it changes population.
CompanyMask have_ratings
which companies have a rating
uint16_t growth_rate
town growth rate
StationList stations_near
NOSAVE: List of nearby stations.
static void PostDestructor(size_t index)
Invalidating of the "nearest town cache" has to be done after removing item from the pool.
uint8_t road_build_months
fund road reconstruction in action?
std::array< TransportedCargoStat< uint16_t >, NUM_TAE > received
Cargo statistics about received cargotypes.
std::array< uint32_t, NUM_TAE > goal
Amount of cargo required for the town to grow.
Specialised ViewportSign that tracks whether it is valid for entering into a Kdtree.
basic types related to subsidies
constexpr TileIndex INVALID_TILE
The very nice invalid tile marker.
Definition of the tick-based game-timer.
static const uint TOWN_GROWTH_WINTER
The town only needs this cargo in the winter (any amount)
void ChangeTownRating(Town *t, int add, int max, DoCommandFlags 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.
TileIndexDiff GetHouseNorthPart(HouseID &house)
Determines if a given HouseID is part of a multitile house.
void ClearTownHouse(Town *t, TileIndex tile)
Clear a town house.
TownActions GetMaskOfTownActions(CompanyID cid, const Town *t)
Get a list of available town authority actions.
const CargoSpec * FindFirstCargoWithTownAcceptanceEffect(TownAcceptanceEffect effect)
Determines the first cargo with a certain town effect.
Town * ClosestTownFromTile(TileIndex tile, uint threshold)
Return the town closest (in distance or ownership) to a given tile, within a given threshold.
static const uint TOWN_GROWTH_DESERT
The town needs the cargo for growth when on desert (any amount)
TownDirectoryInvalidateWindowData
Special values for town list window for the data parameter of InvalidateWindowData.
TownFlags
This enum is used in conjunction with town->flags.
@ TOWN_HAS_CHURCH
There can be only one church by town.
@ TOWN_HAS_STADIUM
There can be only one stadium by town.
@ TOWN_IS_GROWING
Conditions for town growth are met. Grow according to Town::growth_rate.
@ TOWN_CUSTOM_GROWTH
Growth rate is controlled by GS.
TownRatingCheckType
Action types that a company must ask permission for to a town authority.
@ 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.
uint32_t GetWorldPopulation()
Get the total population, the sum of all towns in the world.
static const uint CUSTOM_TOWN_MAX_NUMBER
this is the maximum number of towns a user can specify in customisation
void UpdateTownMaxPass(Town *t)
Update the maximum amount of monthly passengers and mail for a town, based on its population.
CargoArray GetAcceptedCargoOfHouse(const HouseSpec *hs)
Get accepted cargo of a house prototype.
uint8_t GetTownActionCost(TownAction action)
Get cost factors for a TownAction.
static const uint CUSTOM_TOWN_NUMBER_DIFFICULTY
value for custom town number in difficulty settings
void ClearAllTownCachedNames()
Clear the cached_name of all towns.
RoadType GetTownRoadType()
Get the road type that towns should build at this current moment.
Town * CalcClosestTownFromTile(TileIndex tile, uint threshold=UINT_MAX)
Return the town closest to the given tile within threshold.
TownAction
Town actions of a company.
@ RoadRebuild
Rebuild the roads.
@ Bribe
Try to bribe the council.
@ AdvertiseLarge
Large advertising campaign.
@ BuildStatue
Build a statue.
@ BuyRights
Buy exclusive transport rights.
@ FundBuildings
Fund new buildings.
@ AdvertiseMedium
Medium advertising campaign.
@ AdvertiseSmall
Small advertising campaign.
CommandCost CheckforTownRating(DoCommandFlags flags, Town *t, TownRatingCheckType type)
Does the town authority allow the (destructive) action of the current company?
bool CheckTownRoadTypes()
Check if towns are able to build road.
bool GenerateTowns(TownLayout layout)
Generate a number of towns with a given layout.
static const uint16_t MAX_TOWN_GROWTH_TICKS
Max amount of original town ticks that still fit into uint16_t, about equal to UINT16_MAX / TOWN_GROW...
TownCouncilAttitudes
Settings for town council attitudes.
void SetTownRatingTestMode(bool mode)
Switch the town rating to test-mode, to allow commands to be tested without affecting current ratings...
void UpdateTownRadius(Town *t)
Update the cached town zone radii of a town, based on the number of houses.
static const uint16_t TOWN_GROWTH_RATE_NONE
Special value for Town::growth_rate to disable town growth.
CommandCost CheckIfAuthorityAllowsNewStation(TileIndex tile, DoCommandFlags flags)
Checks whether the local authority allows construction of a new station (rail, road,...
void MakeDefaultName(T *obj)
Set the default name for a depot/waypoint.
void UpdateAllTownVirtCoords()
Update the virtual coords needed to draw the town sign for all towns.
TownID GetTownIndex(Tile t)
Get the index of which town this house/street is attached to.
Types related to viewports.