OpenTTD Source 20241222-master-gc72542431a
TimerGameEconomy Class Reference

Timer that is increased every 27ms, and counts towards economy time units, expressed in days / months / years. More...

#include <timer_game_economy.h>

Inheritance diagram for TimerGameEconomy:
TimerGame< struct Economy >

Static Public Member Functions

static YearMonthDay ConvertDateToYMD (Date date)
 Converts a Date to a Year, Month & Day.
 
static Date ConvertYMDToDate (Year year, Month month, Day day)
 Converts a tuple of Year, Month and Day to a Date.
 
static void SetDate (Date date, DateFract fract)
 Set the date.
 
static bool UsingWallclockUnits (bool newgame=false)
 Check if we are using wallclock units.
 
- Static Public Member Functions inherited from TimerGame< struct Economy >
static constexpr bool IsLeapYear (Year year)
 Checks whether the given year is a leap year or not.
 
static YearMonthDay CalendarConvertDateToYMD (Date date)
 Converts a Date to a Year, Month & Day.
 
static Date CalendarConvertYMDToDate (Year year, Month month, Day day)
 Converts a tuple of Year, Month and Day to a Date.
 
static constexpr Year DateToYear (Date date)
 Calculate the year of a given date.
 
static constexpr Date DateAtStartOfYear (Year year)
 Calculate the date of the first day of a given year.
 

Static Public Attributes

static Year year = {}
 Current year, starting at 0.
 
static Month month = {}
 Current month (0..11).
 
static Date date = {}
 Current date in days (day counter).
 
static DateFract date_fract = {}
 Fractional part of the day.
 

Additional Inherited Members

- Public Types inherited from TimerGame< struct Economy >
enum  Trigger
 
enum  Priority
 
using Date = StrongType::Typedef< int32_t, DateTag< struct Economy >, StrongType::Compare, StrongType::Integer >
 
using DateFract = uint16_t
 The fraction of a date we're in, i.e.
 
using Year = StrongType::Typedef< int32_t, struct YearTag< struct Economy >, StrongType::Compare, StrongType::Integer >
 
using Month = uint8_t
 Type for the month, note: 0 based, i.e.
 
using Day = uint8_t
 Type for the day of the month, note: 1 based, first day of a month is 1.
 
using TElapsed = uint
 

Detailed Description

Timer that is increased every 27ms, and counts towards economy time units, expressed in days / months / years.

For now, this is kept in sync with the calendar date, so the amount of days in a month depends on the month and year (leap-years). There are always 74 ticks in a day (and with 27ms, this makes 1 day 1.998 seconds).

Economy time is used for the regular pace of the game, including:

  • Industry and house production/consumption
  • Industry production changes, closure, and spawning
  • Town growth
  • Company age and periodical finance stats
  • Vehicle age and profit statistics, both individual and group
  • Vehicle aging, depreciation, reliability, and renewal
  • Payment intervals for running and maintenance costs, loan interest, etc.
  • Cargo payment "time" calculation
  • Local authority and station ratings change intervals

Definition at line 33 of file timer_game_economy.h.

Member Function Documentation

◆ ConvertDateToYMD()

TimerGameEconomy::YearMonthDay TimerGameEconomy::ConvertDateToYMD ( Date  date)
static

Converts a Date to a Year, Month & Day.

Parameters
datethe date to convert from
Returns
YearMonthDay representation of the Date.

Definition at line 46 of file timer_game_economy.cpp.

References TimerGame< struct Economy >::CalendarConvertDateToYMD(), date, EconomyTime::DAYS_IN_ECONOMY_MONTH, EconomyTime::DAYS_IN_ECONOMY_YEAR, and UsingWallclockUnits().

Referenced by SubsidyListWindow::DrawWidget(), SetDate(), SetDateWindow::SetDateWindow(), and SurveyTimers().

◆ ConvertYMDToDate()

TimerGameEconomy::Date TimerGameEconomy::ConvertYMDToDate ( Year  year,
Month  month,
Day  day 
)
static

Converts a tuple of Year, Month and Day to a Date.

Parameters
yearis a number between 0..MAX_YEAR
monthis a number between 0..11
dayis a number between 1..31
Returns
The equivalent date.

Definition at line 66 of file timer_game_economy.cpp.

References TimerGame< struct Economy >::CalendarConvertYMDToDate(), EconomyTime::DAYS_IN_ECONOMY_MONTH, month, TimerGameConst< struct Economy >::MONTHS_IN_YEAR, UsingWallclockUnits(), and year.

Referenced by ChangeTimekeepingUnits(), LoadNewGRF(), and SetDateWindow::OnClick().

◆ SetDate()

void TimerGameEconomy::SetDate ( Date  date,
DateFract  fract 
)
static

Set the date.

Parameters
dateThe new date
fractThe number of ticks that have passed on this date.

Definition at line 81 of file timer_game_economy.cpp.

References ConvertDateToYMD(), date, date_fract, Ticks::DAY_TICKS, month, and year.

Referenced by AfterLoadGame(), ChangeTimekeepingUnits(), ClickChangeDateCheat(), and SetStartingYear().

◆ UsingWallclockUnits()

bool TimerGameEconomy::UsingWallclockUnits ( bool  newgame = false)
static

Check if we are using wallclock units.

Parameters
newgameShould we check the settings for a new game (since we are in the main menu)?
Returns
True if the game is using wallclock units, or false if the game is using calendar units.

Definition at line 97 of file timer_game_economy.cpp.

References _settings_game, _settings_newgame, GameSettings::economy, and EconomySettings::timekeeping_units.

Referenced by CanChangeTimetableMode(), ChangeTimekeepingUnits(), ClickChangeDateCheat(), ConvertDateToYMD(), ConvertYMDToDate(), DrawAircraftPurchaseInfo(), StationViewWindow::DrawCargoRatings(), DrawCategories(), CompanyInfrastructureWindow::DrawCountLine(), BaseGraphWindow::DrawGraph(), IndustryViewWindow::DrawInfo(), BaseVehicleListWindow::DrawVehicleListItems(), CompanyInfrastructureWindow::DrawWidget(), VehicleGroupWindow::DrawWidget(), SubsidyListWindow::DrawWidget(), TownViewWindow::DrawWidget(), VehicleDetailsWindow::DrawWidget(), FormatString(), GenerateDefaultSaveName(), GetDefaultServiceInterval(), GetMaxCategoriesWidth(), GetServiceIntervalClamped(), GetVelocityUnits(), MakePerformanceDetailPanels(), Vehicle::NeedsServicing(), VehicleDetailsWindow::OnClick(), BuildAirportWindow::OnPaint(), VehicleDetailsWindow::OnPaint(), VehicleDetailsWindow::OnTooltip(), ServiceIntervalSettingsValueText(), CompanyWindow::SetStringParameters(), SettingHelpWallclock(), SettingsValueVelocityUnit(), SettingTitleWallclock(), TownActionBuyRights(), TownActionRoadRebuild(), UpdateAllServiceInterval(), CompanyInfrastructureWindow::UpdateWidgetSize(), and VehicleDetailsWindow::UpdateWidgetSize().

Field Documentation

◆ date

◆ date_fract

◆ month

◆ year

TimerGameEconomy::Year TimerGameEconomy::year = {}
static

Current year, starting at 0.

Economy time is used for the regular pace of the game, including:

  • Industry and house production/consumption
  • Industry production changes, closure, and spawning
  • Town growth
  • Company age and financial statistics
  • Vehicle financial statistics
  • Vehicle aging, depreciation, reliability, and renewal
  • Payment intervals for running and maintenance costs, loan interest, etc.
  • Cargo payment "time" calculation
  • Local authority and station ratings change intervals

Definition at line 36 of file timer_game_economy.h.

Referenced by AfterLoadGame(), ChangeIndustryProduction(), ConvertYMDToDate(), DoCreateNewIndustry(), DoStartupNewCompany(), CompanyFinancesWindow::DrawWidget(), InitializeWindowsAndCaches(), LoadNewGRF(), TimetableWindow::OnClick(), OnStartScenario(), SetDate(), UpdateIndustryStatistics(), BaseGraphWindow::UpdateStatistics(), and IndustryProductionGraphWindow::UpdateStatistics().


The documentation for this class was generated from the following files: