OpenTTD

- Main Page
- Related Pages
- Modules
- Namespaces
- Data Structures
- Files

- File List
- Globals

Functions | Variables
subsidy.cpp File Reference

Handling of subsidies. More...

`#include "stdafx.h"`
`#include "company_func.h"`
`#include "industry.h"`
`#include "town.h"`
`#include "news_func.h"`
`#include "ai/ai.hpp"`
`#include "station_base.h"`
`#include "strings_func.h"`
`#include "window_func.h"`
`#include "subsidy_base.h"`
`#include "subsidy_func.h"`
`#include "core/pool_func.hpp"`
`#include "core/random_func.hpp"`
`#include "game/game.hpp"`
`#include "command_func.h"`
`#include "string_func.h"`
`#include "table/strings.h"`
`#include "safeguards.h"`

Go to the source code of this file.

## Functions
Pair | SetupSubsidyDecodeParam (const Subsidy *s, bool mode)
| Setup the string parameters for printing the subsidy at the screen, and compute the news reference for the subsidy.
static void | SetPartOfSubsidyFlag (SourceType type, SourceID index, PartOfSubsidy flag)
| Sets a flag indicating that given town/industry is part of subsidised route.
void | RebuildSubsidisedSourceAndDestinationCache ()
| Perform a full rebuild of the subsidies cache.
void | DeleteSubsidyWith (SourceType type, SourceID index)
| Delete the subsidies associated with a given cargo source type and id.
static bool | CheckSubsidyDuplicate (CargoID cargo, SourceType src_type, SourceID src, SourceType dst_type, SourceID dst)
| Check whether a specific subsidy already exists.
static bool | CheckSubsidyDistance (SourceType src_type, SourceID src, SourceType dst_type, SourceID dst)
| Checks if the source and destination of a subsidy are inside the distance limit.
void | CreateSubsidy (CargoID cid, SourceType src_type, SourceID src, SourceType dst_type, SourceID dst)
| Creates a subsidy with the given parameters.
CommandCost | CmdCreateSubsidy (TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const char *text)
| Create a new subsidy.
bool | FindSubsidyPassengerRoute ()
| Tries to create a passenger subsidy between two towns.
bool | FindSubsidyCargoDestination (CargoID cid, SourceType src_type, SourceID src)
| Tries to find a suitable destination for the given source and cargo.
bool | FindSubsidyTownCargoRoute ()
| Tries to create a cargo subsidy with a town as source.
bool | FindSubsidyIndustryCargoRoute ()
| Tries to create a cargo subsidy with an industry as source.
void | SubsidyMonthlyLoop ()
| Perform the monthly update of open subsidies, and try to create a new one.
bool | CheckSubsidised (CargoID cargo_type, CompanyID company, SourceType src_type, SourceID src, const Station *st)
| Tests whether given delivery is subsidised and possibly awards the subsidy to delivering company.

## Variables
SubsidyPool | _subsidy_pool ("Subsidy")
| Pool for the subsidies.

## Detailed Description

Handling of subsidies.

Definition in file subsidy.cpp.

## Function Documentation

bool CheckSubsidised | ( | CargoID | cargo_type,
|  | CompanyID | company,
|  | SourceType | src_type,
|  | SourceID | src,
|  | const Station * | st
| ) |  |

Tests whether given delivery is subsidised and possibly awards the subsidy to delivering company.

Parameters

  cargo_type | type of cargo
  company | company delivering the cargo
  src_type | type of src
  src | index of source
  st | station where the cargo is delivered to

Returns
  is the delivery subsidised?

Definition at line 548 of file subsidy.cpp.

References Subsidy::awarded, Subsidy::AwardTo(), SmallVector< T, S >::Begin(), Town::cache, Subsidy::cargo_type, Subsidy::dst, Subsidy::dst_type, SmallVector< T, S >::End(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_industry_pool >::Get(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_town_pool >::Get(), Station::GetCatchmentRect(), SmallVector< T, S >::Include(), Station::industries_near, INVALID_SOURCE, Subsidy::IsAwarded(), IsTileType(), MP_HOUSE, TownCache::part_of_subsidy, POS_DST, POS_SRC, BaseStation::rect, Subsidy::src, Subsidy::src_type, ST_INDUSTRY, ST_TOWN, and TileXY().

Referenced by DeliverGoods().

static bool CheckSubsidyDistance | ( | SourceType | src_type,
|  | SourceID | src,
|  | SourceType | dst_type,
|  | SourceID | dst
| ) |  |
| static

Checks if the source and destination of a subsidy are inside the distance limit.

Parameters

  src_type | Type of src.
  src | Index of source.
  dst_type | Type of dst.
  dst | Index of destination.

Returns
  True if they are inside the distance limit.

Definition at line 201 of file subsidy.cpp.

References 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<&_industry_pool >::Get(), ST_TOWN, and SUBSIDY_MAX_DISTANCE.

Referenced by FindSubsidyCargoDestination().

static bool CheckSubsidyDuplicate | ( | CargoID | cargo,
|  | SourceType | src_type,
|  | SourceID | src,
|  | SourceType | dst_type,
|  | SourceID | dst
| ) |  |
| static

Check whether a specific subsidy already exists.

Parameters

  cargo | Cargo type.
  src_type | Type of source of the cargo, affects interpretation of src.
  src | Id of the source.
  dst_type | Type of the destination of the cargo, affects interpretation of dst.
  dst | Id of the destination.

Returns
  `true` if the subsidy already exists, `false` if not.

Definition at line 180 of file subsidy.cpp.

References Subsidy::cargo_type, Subsidy::dst, Subsidy::dst_type, Subsidy::src, and Subsidy::src_type.

Referenced by FindSubsidyCargoDestination(), and FindSubsidyPassengerRoute().

CommandCost CmdCreateSubsidy | ( | TileIndex | tile,
|  | DoCommandFlag | flags,
|  | uint32 | p1,
|  | uint32 | p2,
|  | const char * | text
| ) |  |

Create a new subsidy.

Parameters

  tile | unused.
  flags | type of operation
  p1 | various bitstuffed elements p1 = (bit 0 - 7) - SourceType of source. p1 = (bit 8 - 23) - SourceID of source. p1 = (bit 24 - 31) - CargoID of subsidy.
  p2 | various bitstuffed elements p2 = (bit 0 - 7) - SourceType of destination. p2 = (bit 8 - 23) - SourceID of destination.
  text | unused.

Returns
  the cost of this operation or an error

Definition at line 252 of file subsidy.cpp.

References _current_company, Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_subsidy_pool >::CanAllocateItem(), CMD_ERROR, CreateSubsidy(), DC_EXEC, GB(), CargoSpec::Get(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_town_pool >::IsValidID(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_industry_pool >::IsValidID(), NUM_CARGO, OWNER_DEITY, ST_INDUSTRY, and ST_TOWN.

void CreateSubsidy | ( | CargoID | cid,
|  | SourceType | src_type,
|  | SourceID | src,
|  | SourceType | dst_type,
|  | SourceID | dst
| ) |  |

Creates a subsidy with the given parameters.

Parameters

  cid | Subsidised cargo.
  src_type | Type of src.
  src | Index of source.
  dst_type | Type of dst.
  dst | Index of destination.

Definition at line 217 of file subsidy.cpp.

References AddNewsItem(), Subsidy::awarded, AI::BroadcastNewEvent(), Subsidy::cargo_type, Subsidy::dst, Subsidy::dst_type, Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::index, INVALID_COMPANY, InvalidateWindowData(), Game::NewEvent(), NF_NORMAL, NT_SUBSIDIES, POS_DST, POS_SRC, Subsidy::remaining, SetPartOfSubsidyFlag(), SetupSubsidyDecodeParam(), Subsidy::src, Subsidy::src_type, SUBSIDY_OFFER_MONTHS, and WC_SUBSIDIES_LIST.

Referenced by CmdCreateSubsidy(), FindSubsidyCargoDestination(), and FindSubsidyPassengerRoute().

void DeleteSubsidyWith | ( | SourceType | type,
|  | SourceID | index
| ) |  |

Delete the subsidies associated with a given cargo source type and id.

Parameters

  type | Cargo source type of the id.
  index | Id to remove.

Definition at line 153 of file subsidy.cpp.

References Subsidy::dst, Subsidy::dst_type, InvalidateWindowData(), RebuildSubsidisedSourceAndDestinationCache(), Subsidy::src, Subsidy::src_type, and WC_SUBSIDIES_LIST.

Referenced by Town::~Town().

bool FindSubsidyCargoDestination | ( | CargoID | cid,
|  | SourceType | src_type,
|  | SourceID | src
| ) |  |

Tries to find a suitable destination for the given source and cargo.

Parameters

  cid | Subsidized cargo.
  src_type | Type of src.
  src | Index of source.

Returns
  True iff the subsidy was created.

Definition at line 417 of file subsidy.cpp.

References _town_cargoes_accepted, Industry::accepts_cargo, Town::cargo_accepted_total, Chance16(), CheckSubsidyDistance(), CheckSubsidyDuplicate(), CreateSubsidy(), Industry::GetRandom(), Town::GetRandom(), HasBit(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::index, ST_INDUSTRY, and ST_TOWN.

Referenced by FindSubsidyIndustryCargoRoute(), and FindSubsidyTownCargoRoute().

bool FindSubsidyIndustryCargoRoute | ( |  | ) |

Tries to create a cargo subsidy with an industry as source.

Returns
  True iff the subsidy was created.

Definition at line 371 of file subsidy.cpp.

References _settings_game, Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_subsidy_pool >::CanAllocateItem(), CT_INVALID, DT_MANUAL, FindSubsidyCargoDestination(), Industry::GetRandom(), HasBit(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::index, Industry::last_month_pct_transported, Industry::last_month_production, GameSettings::linkgraph, Industry::produced_cargo, ST_INDUSTRY, and SUBSIDY_MAX_PCT_TRANSPORTED.

Referenced by SubsidyMonthlyLoop().

bool FindSubsidyPassengerRoute | ( |  | ) |

Tries to create a passenger subsidy between two towns.

Returns
  True iff the subsidy was created.

Definition at line 298 of file subsidy.cpp.

References Town::cache, Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_subsidy_pool >::CanAllocateItem(), CheckSubsidyDuplicate(), CreateSubsidy(), DistanceManhattan(), Town::GetRandom(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::index, TownCache::population, ST_TOWN, SUBSIDY_MAX_DISTANCE, SUBSIDY_MAX_PCT_TRANSPORTED, SUBSIDY_PAX_MIN_POPULATION, and Town::xy.

Referenced by SubsidyMonthlyLoop().

bool FindSubsidyTownCargoRoute | ( |  | ) |

Tries to create a cargo subsidy with a town as source.

Returns
  True iff the subsidy was created.

Definition at line 328 of file subsidy.cpp.

References _settings_game, Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_subsidy_pool >::CanAllocateItem(), Town::cargo_produced, ClrBit(), CountBits(), DT_MANUAL, FindSubsidyCargoDestination(), CargoSpec::Get(), Town::GetRandom(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::index, GameSettings::linkgraph, RandomRange(), ST_TOWN, and SUBSIDY_MAX_PCT_TRANSPORTED.

Referenced by SubsidyMonthlyLoop().

void RebuildSubsidisedSourceAndDestinationCache | ( |  | ) |

Perform a full rebuild of the subsidies cache.

Definition at line 133 of file subsidy.cpp.

References Town::cache, Subsidy::dst, Subsidy::dst_type, TownCache::part_of_subsidy, Industry::part_of_subsidy, POS_DST, POS_NONE, POS_SRC, SetPartOfSubsidyFlag(), Subsidy::src, and Subsidy::src_type.

Referenced by ChangeOwnershipOfCompanyItems(), CheckCaches(), DeleteSubsidyWith(), InitializeWindowsAndCaches(), and SubsidyMonthlyLoop().

static void SetPartOfSubsidyFlag | ( | SourceType | type,
|  | SourceID | index,
|  | PartOfSubsidy | flag
| ) |  |
| inline static

Sets a flag indicating that given town/industry is part of subsidised route.

Parameters

  type | is it a town or an industry?
  index | index of town/industry
  flag | flag to set

Definition at line 123 of file subsidy.cpp.

References Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_industry_pool >::Get(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_town_pool >::Get(), ST_INDUSTRY, and ST_TOWN.

Referenced by CreateSubsidy(), and RebuildSubsidisedSourceAndDestinationCache().

Pair SetupSubsidyDecodeParam | ( | const Subsidy * | s,
|  | bool | mode
| ) |  |

Setup the string parameters for printing the subsidy at the screen, and compute the news reference for the subsidy.

Parameters

  s | Subsidy being printed.
  mode | Unit of cargo used, `true` means general name, `false` means singular form.

Returns
  Reference of the subsidy in the news system.

Definition at line 76 of file subsidy.cpp.

References Subsidy::cargo_type, Subsidy::dst, Subsidy::dst_type, CargoSpec::Get(), CargoSpec::name, CargoSpec::name_single, NR_INDUSTRY, NR_NONE, NR_TOWN, SetDParam(), Subsidy::src, Subsidy::src_type, ST_INDUSTRY, and ST_TOWN.

Referenced by Subsidy::AwardTo(), CreateSubsidy(), SubsidyListWindow::DrawWidget(), and SubsidyMonthlyLoop().

void SubsidyMonthlyLoop | ( |  | ) |

Perform the monthly update of open subsidies, and try to create a new one.

Definition at line 469 of file subsidy.cpp.

References _local_company, _settings_game, AddNewsItem(), Subsidy::awarded, AI::BroadcastNewEvent(), LinkGraphSettings::distribution_armoured, LinkGraphSettings::distribution_default, LinkGraphSettings::distribution_mail, LinkGraphSettings::distribution_pax, Subsidy::dst, DT_MANUAL, FindSubsidyIndustryCargoRoute(), FindSubsidyPassengerRoute(), FindSubsidyTownCargoRoute(), Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::index, InvalidateWindowData(), Subsidy::IsAwarded(), GameSettings::linkgraph, Game::NewEvent(), NF_NORMAL, NT_SUBSIDIES, RandomRange(), RebuildSubsidisedSourceAndDestinationCache(), Subsidy::remaining, SetupSubsidyDecodeParam(), Subsidy::src, and WC_SUBSIDIES_LIST.

Referenced by OnNewMonth().