Files
@ r27835:eabfaa878ced
Branch filter:
Location: cpp/openttd-patchpack/source/src/date_type.h - annotation
r27835:eabfaa878ced
4.6 KiB
text/x-c
Add: calendar date for Survey results
This means no heuristics is possible on around which date people
play the game.
This means no heuristics is possible on around which date people
play the game.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 | r12768:980ae0491352 r12768:980ae0491352 r12768:980ae0491352 r12768:980ae0491352 r12768:980ae0491352 r12768:980ae0491352 r12768:980ae0491352 r8140:9424f012f6a2 r8140:9424f012f6a2 r8140:9424f012f6a2 r8140:9424f012f6a2 r8140:9424f012f6a2 r27166:64e04a3ef9b1 r15173:a59afd6301a6 r27737:728d55b97775 r15173:a59afd6301a6 r15173:a59afd6301a6 r8140:9424f012f6a2 r27737:728d55b97775 r8140:9424f012f6a2 r27084:247c1f243210 r27084:247c1f243210 r8140:9424f012f6a2 r15173:a59afd6301a6 r15173:a59afd6301a6 r15173:a59afd6301a6 r25636:7c2fc0b1c9aa r8140:9424f012f6a2 r27086:4bce136e7873 r27086:4bce136e7873 r17692:fd74534e7c5b r17692:fd74534e7c5b r20253:1b5f1d3d3046 r17692:fd74534e7c5b r17692:fd74534e7c5b r17692:fd74534e7c5b r17754:3ff2ed996034 r17692:fd74534e7c5b r17692:fd74534e7c5b r8140:9424f012f6a2 r8140:9424f012f6a2 r8140:9424f012f6a2 r8140:9424f012f6a2 r27148:4e041ae27b9d r8140:9424f012f6a2 r8140:9424f012f6a2 r8140:9424f012f6a2 r27715:dbfd499d9407 r10500:73e58b8a06a6 r27715:dbfd499d9407 r8140:9424f012f6a2 r27715:dbfd499d9407 r8140:9424f012f6a2 r8140:9424f012f6a2 r13756:5a0fce0c7ab0 r13756:5a0fce0c7ab0 r13756:5a0fce0c7ab0 r13756:5a0fce0c7ab0 r27715:dbfd499d9407 r27275:44cfdb7649c7 r27788:71137956fe15 r27788:71137956fe15 r27275:44cfdb7649c7 r27788:71137956fe15 r27275:44cfdb7649c7 r13756:5a0fce0c7ab0 r13756:5a0fce0c7ab0 r27778:6b29a42dcb99 r27778:6b29a42dcb99 r27778:6b29a42dcb99 r27778:6b29a42dcb99 r27778:6b29a42dcb99 r27778:6b29a42dcb99 r27788:71137956fe15 r27778:6b29a42dcb99 r27778:6b29a42dcb99 r27778:6b29a42dcb99 r27275:44cfdb7649c7 r8140:9424f012f6a2 r27715:dbfd499d9407 r8140:9424f012f6a2 r13756:5a0fce0c7ab0 r27715:dbfd499d9407 r13756:5a0fce0c7ab0 r14032:b6a9cb715f01 r27715:dbfd499d9407 r24002:6eb7dd997787 r27715:dbfd499d9407 r14032:b6a9cb715f01 r13756:5a0fce0c7ab0 r13756:5a0fce0c7ab0 r13756:5a0fce0c7ab0 r13756:5a0fce0c7ab0 r27715:dbfd499d9407 r8140:9424f012f6a2 r27275:44cfdb7649c7 r27715:dbfd499d9407 r13756:5a0fce0c7ab0 r27715:dbfd499d9407 r27715:dbfd499d9407 r27715:dbfd499d9407 r8140:9424f012f6a2 r8140:9424f012f6a2 | /*
* This file is part of OpenTTD.
* OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
* OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
*/
/** @file date_type.h Types related to the dates in OpenTTD. */
#ifndef DATE_TYPE_H
#define DATE_TYPE_H
#include "timer/timer_game_calendar.h"
typedef int32_t Ticks; ///< The type to store ticks in
/**
* 1 day is 74 ticks; TimerGameCalendar::date_fract used to be uint16_t and incremented by 885. On
* an overflow the new day begun and 65535 / 885 = 74.
* 1 tick is approximately 27 ms.
* 1 day is thus about 2 seconds (74 * 27 = 1998) on a machine that can run OpenTTD normally
*/
static const int DAY_TICKS = 74; ///< ticks per day
static const int DAYS_IN_YEAR = 365; ///< days per year
static const int DAYS_IN_LEAP_YEAR = 366; ///< sometimes, you need one day more...
static const int MONTHS_IN_YEAR = 12; ///< months per year
static const int SECONDS_PER_DAY = 2; ///< approximate seconds per day, not for precise calculations
static const int STATION_RATING_TICKS = 185; ///< cycle duration for updating station rating
static const int STATION_ACCEPTANCE_TICKS = 250; ///< cycle duration for updating station acceptance
static const int STATION_LINKGRAPH_TICKS = 504; ///< cycle duration for cleaning dead links
static const int CARGO_AGING_TICKS = 185; ///< cycle duration for aging cargo
static const int INDUSTRY_PRODUCE_TICKS = 256; ///< cycle duration for industry production
static const int TOWN_GROWTH_TICKS = 70; ///< cycle duration for towns trying to grow. (this originates from the size of the town array in TTD
static const int INDUSTRY_CUT_TREE_TICKS = INDUSTRY_PRODUCE_TICKS * 2; ///< cycle duration for lumber mill's extra action
/*
* ORIGINAL_BASE_YEAR, ORIGINAL_MAX_YEAR and DAYS_TILL_ORIGINAL_BASE_YEAR are
* primarily used for loading newgrf and savegame data and returning some
* newgrf (callback) functions that were in the original (TTD) inherited
* format, where 'TimerGameCalendar::date == 0' meant that it was 1920-01-01.
*/
/** The minimum starting year/base year of the original TTD */
static constexpr TimerGameCalendar::Year ORIGINAL_BASE_YEAR = 1920;
/** The original ending year */
static constexpr TimerGameCalendar::Year ORIGINAL_END_YEAR = 2051;
/** The maximum year of the original TTD */
static constexpr TimerGameCalendar::Year ORIGINAL_MAX_YEAR = 2090;
/**
* Calculate the date of the first day of a given year.
* @param year the year to get the first day of.
* @return the date.
*/
static constexpr TimerGameCalendar::Date DateAtStartOfYear(TimerGameCalendar::Year year)
{
int32_t year_as_int = static_cast<int32_t>(year);
uint number_of_leap_years = (year == 0) ? 0 : ((year_as_int - 1) / 4 - (year_as_int - 1) / 100 + (year_as_int - 1) / 400 + 1);
return (DAYS_IN_YEAR * year_as_int) + number_of_leap_years;
}
/**
* Calculate the year of a given date.
* @param date The date to consider.
* @return the year.
*/
static inline TimerGameCalendar::Year DateToYear(TimerGameCalendar::Date date)
{
return static_cast<int32_t>(date) / DAYS_IN_LEAP_YEAR;
}
/**
* The date of the first day of the original base year.
*/
static constexpr TimerGameCalendar::Date DAYS_TILL_ORIGINAL_BASE_YEAR = DateAtStartOfYear(ORIGINAL_BASE_YEAR);
/** The absolute minimum & maximum years in OTTD */
static constexpr TimerGameCalendar::Year MIN_YEAR = 0;
/** The default starting year */
static constexpr TimerGameCalendar::Year DEF_START_YEAR = 1950;
/** The default scoring end year */
static constexpr TimerGameCalendar::Year DEF_END_YEAR = ORIGINAL_END_YEAR - 1;
/**
* MAX_YEAR, nicely rounded value of the number of years that can
* be encoded in a single 32 bits date, about 2^31 / 366 years.
*/
static constexpr TimerGameCalendar::Year MAX_YEAR = 5000000;
/** The date of the last day of the max year. */
static constexpr TimerGameCalendar::Date MAX_DATE = DateAtStartOfYear(MAX_YEAR + 1) - 1;
static constexpr TimerGameCalendar::Year INVALID_YEAR = -1; ///< Representation of an invalid year
static constexpr TimerGameCalendar::Date INVALID_DATE = -1; ///< Representation of an invalid date
static constexpr Ticks INVALID_TICKS = -1; ///< Representation of an invalid number of ticks
#endif /* DATE_TYPE_H */
|