22 std::vector<T> id_count;
23 std::vector<T> class_count;
31static const TownID INVALID_TOWN = 0xFFFF;
50 auto operator<=>(
const TownCache &)
const =
default;
60 uint32_t townnamegrfid;
61 uint16_t townnametype;
62 uint32_t townnameparts;
85 inline uint8_t GetPercentTransported(
CargoID cid)
const
88 return this->supplied[cid].
old_act * 256 / (this->supplied[cid].
old_max + 1);
106 std::vector<PersistentStorage *> psa_list;
135 inline const std::string &GetCachedName()
const
137 if (!this->name.empty())
return this->
name;
138 if (this->cached_name.empty()) this->FillCachedName();
151 void FillCachedName()
const;
158void ShowTownViewWindow(TownID town);
159void ExpandTown(
Town *t);
161void RebuildTownKdtree();
165 TOWN_COUNCIL_LENIENT = 0,
166 TOWN_COUNCIL_TOLERANT = 1,
167 TOWN_COUNCIL_HOSTILE = 2,
168 TOWN_COUNCIL_PERMISSIVE = 3,
184 TDIWD_POPULATION_CHANGE,
257 assert(obj->name.empty() || obj->town_cn == UINT16_MAX);
278 T *lobj = T::GetIfValid(cid);
281 if (lobj !=
nullptr && obj != lobj) {
283 if (lobj->town == obj->town && lobj->IsOfType(obj)) {
285 uint i = (uint)lobj->town_cn - next;
295 }
while (
HasBit(used, 0));
306 if (cid == T::GetPoolSize()) cid = 0;
307 }
while (cid != idx);
309 obj->town_cn = (uint16_t)next;
316inline uint16_t TownTicksToGameTicks(uint16_t ticks)
324std::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 CargoID
Cargo slots to indicate a cargo type within a game.
bool IsValidCargoID(CargoID t)
Test whether cargo type is not INVALID_CARGO.
static const CargoID 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.
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).
DoCommandFlag
List of flags for a command.
Owner
Enum for all companies/owners.
@ MAX_COMPANIES
Maximum number of companies.
#define DECLARE_ENUM_AS_BIT_SET(enum_type)
Operators to allow to work with enum as with type safe bit set in C++.
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.
Tindex index
Index of this pool item.
static Titem * Get(size_t index)
Returns Titem with given index.
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.
PartOfSubsidy part_of_subsidy
Is this town a source/destination of a subsidy?
TrackedViewportSign sign
Location of name sign, UpdateVirtCoord updates this.
BuildingCounts< uint16_t > building_counts
The number of each type of building in the town.
bool larger_town
if this is a larger town and should grow more quickly
Town(TileIndex tile=INVALID_TILE)
Creates a new town.
TransportedCargoStat< uint32_t > supplied[NUM_CARGO]
Cargo statistics about supplied cargo.
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
int16_t ratings[MAX_COMPANIES]
ratings of each company for this town
TownLayout layout
town specific road layout
TransportedCargoStat< uint16_t > received[NUM_TAE]
Cargo statistics about received cargotypes.
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
uint8_t flags
See TownFlags.
TownCache cache
Container for all cacheable data.
CompanyID exclusivity
which company has exclusivity
void InitializeLayout(TownLayout layout)
Assign the town layout.
bool show_zone
NOSAVE: mark town to show the local authority zone in the viewports.
uint32_t goal[NUM_TAE]
Amount of cargo required for the town to grow.
uint8_t exclusive_counter
months till the exclusivity expires
void UpdateVirtCoord()
Resize the sign (label) of the town after it changes population.
std::string text
General text with additional information.
CompanyMask have_ratings
which companies have a rating
uint8_t unwanted[MAX_COMPANIES]
how many months companies aren't wanted by towns (bribe)
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?
Specialised ViewportSign that tracks whether it is valid for entering into a Kdtree.
Store the maximum and actually transported cargo amount for the current and the last month.
Tstorage old_max
Maximum amount last month.
Tstorage old_act
Actually transported last month.
basic types related to subsidies
PartOfSubsidy
What part of a subsidy is something?
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)
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
TownActions
Town actions of a company.
@ TACT_BUILD_STATUE
Build a statue.
@ TACT_CONSTRUCTION
All possible construction actions.
@ TACT_ROAD_REBUILD
Rebuild the roads.
@ TACT_ADVERTISE_MEDIUM
Medium advertising campaign.
@ TACT_BUY_RIGHTS
Buy exclusive transport rights.
@ TACT_BRIBE
Try to bribe the council.
@ TACT_ADVERTISE
All possible advertising actions.
@ TACT_COUNT
Number of available town actions.
@ TACT_ALL
All possible actions.
@ TACT_FUND_BUILDINGS
Fund new buildings.
@ TACT_FUNDS
All possible funding actions.
@ TACT_NONE
Empty action set.
@ TACT_ADVERTISE_LARGE
Large advertising campaign.
@ TACT_ADVERTISE_SMALL
Small advertising campaign.
const uint8_t _town_action_costs[TACT_COUNT]
Factor in the cost of each town action.
void UpdateTownMaxPass(Town *t)
Update the maximum amount of montly passengers and mail for a town, based on its population.
CargoArray GetAcceptedCargoOfHouse(const HouseSpec *hs)
Get accepted cargo of a house prototype.
static const uint CUSTOM_TOWN_NUMBER_DIFFICULTY
value for custom town number in difficulty settings
void ClearAllTownCachedNames()
Clear the cached_name of all towns.
void ChangeTownRating(Town *t, int add, int max, DoCommandFlag flags)
Changes town rating of the current company.
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.
bool CheckTownRoadTypes()
Check if towns are able to build road.
bool GenerateTowns(TownLayout layout)
Generate a number of towns with a given layout.
CommandCost CheckIfAuthorityAllowsNewStation(TileIndex tile, DoCommandFlag flags)
Checks whether the local authority allows construction of a new station (rail, 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...
CommandCost CheckforTownRating(DoCommandFlag flags, Town *t, TownRatingCheckType type)
Does the town authority allow the (destructive) action of the current company?
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.
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.