23 std::vector<T> id_count{};
24 std::vector<T> class_count{};
59 auto operator<=>(
const TownCache &)
const =
default;
69 uint32_t townnamegrfid = 0;
70 uint16_t townnametype = 0;
71 uint32_t townnameparts = 0;
92 uint8_t PctTransported()
const
94 if (this->production == 0)
return 0;
95 return ClampTo<uint8_t>(this->transported * 256 / this->production);
107 using SuppliedCargoes = std::vector<SuppliedCargo>;
111 std::array<uint32_t, NUM_TAE>
goal{};
116 inline SuppliedCargo &GetOrCreateCargoSupplied(
CargoType cargo)
119 auto it = std::ranges::lower_bound(this->
supplied, cargo, std::less{}, &SuppliedCargo::cargo);
120 if (it == std::end(this->
supplied) || it->cargo != cargo) it = this->
supplied.emplace(it, cargo);
124 inline SuppliedCargoes::const_iterator GetCargoSupplied(
CargoType cargo)
const
127 auto it = std::ranges::lower_bound(this->
supplied, cargo, std::less{}, &SuppliedCargo::cargo);
128 if (it == std::end(this->
supplied) || it->cargo != cargo)
return std::end(
supplied);
132 inline uint8_t GetPercentTransported(
CargoType cargo_type)
const
134 auto it = this->GetCargoSupplied(cargo_type);
135 if (it == std::end(this->
supplied))
return 0;
137 return it->history[LAST_MONTH].PctTransported();
155 std::vector<PersistentStorage *> psa_list{};
184 inline const std::string &GetCachedName()
const
186 if (!this->
name.empty())
return this->
name;
187 if (this->
cached_name.empty()) this->FillCachedName();
200 void FillCachedName()
const;
207void ShowTownViewWindow(
TownID town);
208void ExpandTown(
Town *t);
210void RebuildTownKdtree();
214 TOWN_COUNCIL_LENIENT = 0,
215 TOWN_COUNCIL_TOLERANT = 1,
216 TOWN_COUNCIL_HOSTILE = 2,
217 TOWN_COUNCIL_PERMISSIVE = 3,
233 TDIWD_POPULATION_CHANGE,
287 assert(obj->name.empty() || obj->town_cn == UINT16_MAX);
308 T *lobj = T::GetIfValid(cid);
311 if (lobj !=
nullptr && obj != lobj) {
313 if (lobj->town == obj->town && lobj->IsOfType(obj)) {
315 uint i = (uint)lobj->town_cn - next;
325 }
while (
HasBit(used, 0));
336 if (cid == T::GetPoolSize()) cid = 0;
337 }
while (cid != idx);
339 obj->town_cn = (uint16_t)next;
346inline uint16_t TownTicksToGameTicks(uint16_t ticks)
354std::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 cargo)
Test whether cargo type is not INVALID_CARGO.
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.
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).
A sort-of mixin that implements 'at(pos)' and 'operator[](pos)' only for a specific type.
#define DECLARE_INCREMENT_DECREMENT_OPERATORS(enum_type)
For some enums it is useful to have pre/post increment/decrement operators.
Types for storing historical data.
std::array< T, HISTORY_RECORDS > HistoryData
Container type for storing history data.
uint64_t ValidHistoryMask
Mask of valid history records.
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.
TrackedViewportSign sign
Location of name sign, UpdateVirtCoord updates this.
BuildingCounts< uint16_t > building_counts
The number of each type of building in the town.
std::array< uint32_t, NUM_HOUSE_ZONES > squared_town_zone_radius
UpdateTownRadius updates this given the house count.
PartsOfSubsidy part_of_subsidy
Is this town a source/destination of a subsidy?
uint32_t transported
Total transported.
uint32_t production
Total produced.
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
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
SuppliedCargoes supplied
Cargo statistics about supplied cargo.
TownLayout layout
town specific road layout
uint16_t MaxTownNoise() const
Calculate the max town noise.
static Town * GetRandom()
Return a random valid town.
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
TownFlags flags
See TownFlags.
TownCache cache
Container for all cacheable data.
TypedIndexContainer< std::array< uint8_t, MAX_COMPANIES >, CompanyID > unwanted
how many months companies aren't wanted by towns (bribe)
CompanyID exclusivity
which company has exclusivity
ValidHistoryMask valid_history
Mask of valid history records.
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
TypedIndexContainer< std::array< int16_t, MAX_COMPANIES >, CompanyID > ratings
ratings of each company for this town
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.
TownRatingCheckType
Action types that a company must ask permission for to a town authority.
@ TunnelBridgeRemove
Removal of a tunnel or bridge owned by the town.
@ RoadRemove
Removal of a road owned by the town.
TileIndexDiff GetHouseNorthPart(HouseID &house)
Determines if a given HouseID is part of a multitile house.
uint GetDefaultTownsForMapSize()
Calculate the number of towns which should be on the map according to the current "town density" newg...
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.
bool GenerateTowns(TownLayout layout, std::optional< uint > number=std::nullopt)
Generate a number of towns with a given layout.
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?
HouseZone GetTownRadiusGroup(const Town *t, TileIndex tile)
Returns the bit corresponding to the town zone of the specified tile.
bool CheckTownRoadTypes()
Check if towns are able to build road.
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.
TownFlag
Flags controlling various town behaviours.
@ HasChurch
There can be only one church by town.
@ CustomGrowth
Growth rate is controlled by GS.
@ HasStadium
There can be only one stadium by town.
@ IsGrowing
Conditions for town growth are met. Grow according to Town::growth_rate.
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.