10#ifndef TIMER_GAME_COMMON_H
11#define TIMER_GAME_COMMON_H
65 int32_t year_as_int = year.base();
66 return year_as_int % 4 == 0 && (year_as_int % 100 != 0 || year_as_int % 400 == 0);
80 return Year{date.base() / 366};
90 int32_t year_as_int = year.base();
91 int32_t number_of_leap_years = (year == 0) ? 0 : ((year_as_int - 1) / 4 - (year_as_int - 1) / 100 + (year_as_int - 1) / 400 + 1);
94 return Date{(365 * year_as_int) + number_of_leap_years};
127 TPeriod(
Trigger trigger,
Priority priority) : trigger(trigger), priority(priority)
130 bool operator < (
const TPeriod &other)
const
132 if (this->trigger != other.trigger)
return this->trigger < other.trigger;
133 return this->priority < other.priority;
136 bool operator == (
const TPeriod &other)
const
138 return this->trigger == other.trigger && this->priority == other.priority;
176 static constexpr typename TimerGame<T>::Year
MAX_YEAR{5000000};
179 static constexpr typename TimerGame<T>::Year
MIN_YEAR{0};
193 static constexpr typename TimerGame<T>::Date
MIN_DATE{0};
Template class for time constants shared by both Calendar and Economy time.
static constexpr TimerGame< T >::Year DEF_START_YEAR
The default starting year.
static constexpr TimerGame< T >::Date MIN_DATE
The date on January 1, year 0.
static constexpr TimerGame< T >::Year DEF_END_YEAR
The default scoring end year.
static constexpr TimerGame< T >::Year ORIGINAL_MAX_YEAR
The maximum year of the original TTD.
static constexpr int MONTHS_IN_YEAR
months per year
static constexpr TimerGame< T >::Year ORIGINAL_END_YEAR
The original ending year.
static constexpr TimerGame< T >::Year INVALID_YEAR
Representation of an invalid year.
static constexpr TimerGame< T >::Year MIN_YEAR
The absolute minimum year in OTTD.
static constexpr TimerGame< T >::Date INVALID_DATE
Representation of an invalid date.
static constexpr int SECONDS_PER_DAY
approximate seconds per day, not for precise calculations
static constexpr TimerGame< T >::Date MAX_DATE
The date of the last day of the max year.
static constexpr int DAYS_IN_YEAR
days per year
static constexpr TimerGame< T >::Year ORIGINAL_BASE_YEAR
The minimum starting year/base year of the original TTD.
static constexpr TimerGame< T >::Date DAYS_TILL_ORIGINAL_BASE_YEAR
The date of the first day of the original base year.
static constexpr TimerGame< T >::Year MAX_YEAR
MAX_YEAR, nicely rounded value of the number of years that can be encoded in a single 32 bits date,...
static constexpr int DAYS_IN_LEAP_YEAR
sometimes, you need one day more...
Template class for all TimerGame based timers.
static constexpr Year DateToYear(Date date)
Calculate the year of a given date.
static YearMonthDay CalendarConvertDateToYMD(Date date)
Converts a Date to a Year, Month & Day.
static constexpr Date DateAtStartOfYear(Year year)
Calculate the date of the first day of a given year.
Trigger
Trigger reasons for the timer based triggers.
@ Quarter
Triggered every first of January, April, July and October.
@ Week
Triggers every Tuesday.
uint16_t DateFract
The fraction of a date we're in, i.e.
static Date CalendarConvertYMDToDate(Year year, Month month, Day day)
Converts a tuple of Year, Month and Day to a Date.
Priority
Different levels of priority to run the timers in.
@ None
These timers can be executed in any order; there is no Random() in them, so order is not relevant.
uint8_t Day
Type for the day of the month, note: 1 based, first day of a month is 1.
uint8_t Month
Type for the month, note: 0 based, i.e.
static constexpr bool IsLeapYear(Year year)
Checks whether the given year is a leap year or not.
Type (helpers) for making a strong typedef that is a distinct type.
Defines the internal data of a functional industry.
Mix-in which makes the new Typedef comparable with itself and its base type.
Mix-in which makes the new Typedef behave more like an integer.
Templated helper to make a type-safe 'typedef' representing a single POD value.
Struct about subsidies, offered and awarded.
The type to store our dates in.
Data structure to convert between Date and triplet (year, month, and day).
Month month
Month (0..11).
Type for the year, note: 0 based, i.e.