OpenTTD Source: TimerGameCalendar Class Reference

OpenTTD Source 14.0-RC3

Static Public Member Functions | Static Public Attributes
TimerGameCalendar Class Reference

Timer that is increased every 27ms, and counts towards ticks / days / months / years. More...

`#include <timer_game_calendar.h>`

Inheritance diagram for TimerGameCalendar:

## Static Public Member Functions
static YearMonthDay | ConvertDateToYMD (Date date)
| Converts a Date to a Year, Month & Day. More...
static Date | ConvertYMDToDate (Year year, Month month, Day day)
| Converts a tuple of Year, Month and Day to a Date. More...
static void | SetDate (Date date, DateFract fract)
| Set the date. More...
Static Public Member Functions inherited from TimerGame< struct Calendar >
static constexpr bool | IsLeapYear (Year year)
| Checks whether the given year is a leap year or not. More...
static YearMonthDay | CalendarConvertDateToYMD (Date date)
| Converts a Date to a Year, Month & Day. More...
static Date | CalendarConvertYMDToDate (Year year, Month month, Day day)
| Converts a tuple of Year, Month and Day to a Date. More...
static constexpr Year | DateToYear (Date date)
| Calculate the year of a given date. More...
static constexpr Date | DateAtStartOfYear (Year year)
| Calculate the date of the first day of a given year. More...

## Static Public Attributes
static Year | year = {}
| Current year, starting at 0. More...
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.
static uint16_t | sub_date_fract = {}
| Subpart of date_fract that we use when calendar days are slower than economy days.

## Additional Inherited Members
Public Types inherited from TimerGame< struct Calendar >
enum | Trigger
enum | Priority
using | Date = StrongType::Typedef< int32_t, DateTag< struct Calendar >, StrongType::Compare, StrongType::Integer >
using | DateFract = uint16_t
| The fraction of a date we're in, i.e. More...
using | Year = StrongType::Typedef< int32_t, struct YearTag< struct Calendar >, StrongType::Compare, StrongType::Integer >
using | Month = uint8_t
| Type for the month, note: 0 based, i.e. More...
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 ticks / days / months / years.

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).

Calendar time is used for technology and time-of-year changes, including:

- Vehicle, airport, station, object introduction and obsolescence
- NewGRF variables for visual styles or behavior based on year or time of year (e.g. variable snow line)
- Inflation, since it is tied to original game years. One interpretation of inflation is that it compensates for faster and higher capacity vehicles, another is that it compensates for more established companies. Each of these point to a different choice of calendar versus economy time, but we have to pick one so we follow a previous decision to tie inflation to original TTD game years.

Definition at line 30 of file timer_game_calendar.h.

## Member Function Documentation

## ◆ ConvertDateToYMD()

TimerGameCalendar::YearMonthDay TimerGameCalendar::ConvertDateToYMD | ( | Date | date | ) |
| static

Converts a Date to a Year, Month & Day.

Parameters

  date | the date to convert from

Returns
  YearMonthDay representation of the Date.

Definition at line 42 of file timer_game_calendar.cpp.

References TimerGame< struct Calendar >::CalendarConvertDateToYMD(), and date.

Referenced by ClickChangeDateCheat(), GetGlobalVariable(), GetSnowLine(), SetDate(), SetYearEngineAgingStops(), StartupEngines(), SurveyRecentNews(), and SurveyTimers().

## ◆ ConvertYMDToDate()

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

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

Parameters

  year | is a number between 0..MAX_YEAR
  month | is a number between 0..11
  day | is a number between 1..31

Returns
  The equivalent date.

Definition at line 55 of file timer_game_calendar.cpp.

References TimerGame< struct Calendar >::CalendarConvertYMDToDate(), month, and year.

Referenced by ClickChangeDateCheat(), GetGlobalVariable(), LoadNewGRF(), ServerNetworkAdminSocketHandler::SendWelcome(), SetStartingYear(), and StartupEngines().

## ◆ SetDate()

void TimerGameCalendar::SetDate | ( | Date | date,
|  | DateFract | fract
| ) |  |
| static

Set the date.

Parameters

  date | New date
  fract | The number of ticks that have passed on this date.

Definition at line 66 of file timer_game_calendar.cpp.

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

Referenced by ClickChangeDateCheat(), and SetStartingYear().

## Field Documentation

## ◆ year

TimerGameCalendar::Year TimerGameCalendar::year = {}
| static

Current year, starting at 0.

Calendar time is used for technology and time-of-year changes, including:

- Vehicle, airport, station, object introduction and obsolescence
- Vehicle and engine age
- NewGRF variables for visual styles or behavior based on year or time of year (e.g. variable snow line)
- Inflation, since it is tied to original game years. One interpretation of inflation is that it compensates for faster and higher capacity vehicles, another is that it compensates for more established companies. Each of these point to a different choice of calendar versus economy time, but we have to pick one so we follow a previous decision to tie inflation to original TTD game years.

Definition at line 32 of file timer_game_calendar.h.

Referenced by CalendarEnginesMonthlyLoop(), CheckBridgeAvailability(), ClickChangeDateCheat(), ConvertYMDToDate(), GetGlobalVariable(), GetMaskOfAllowedCurrencies(), VehicleScopeResolver::GetVariable(), AirportSpec::IsAvailable(), LoadNewGRF(), NetworkCheckRestartMapYear(), NewsItem::NewsItem(), ResetSignalVariant(), and SetDate().

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

- src/timer/timer_game_calendar.h
- src/timer/timer_game_calendar.cpp