OpenTTD Source: src/timer/timer_game_tick.h Source File

OpenTTD Source 15.0-beta1

timer_game_tick.h
Go to the documentation of this file.
1/*
2 * This file is part of OpenTTD.
3 * 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.
4 * 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.
5 * 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/>.
6 */
7
10#ifndef TIMER_GAME_TICK_H
11#define TIMER_GAME_TICK_H
12
13#include "../gfx_type.h"
14
15#include <chrono>
16
22 class TimerGameTick {
23public:
24 using Ticks = int32_t;
25 using TickCounter = uint64_t;
26
27 enum Priority {
28 NONE,
29
30 /* For all other priorities, the order is important.
31 * For safety, you can only setup a single timer on a single priority. */
32 COMPETITOR_TIMEOUT,
33 };
34
35 struct TPeriod {
36 Priority priority;
37 uint value;
38
39 TPeriod(Priority priority, uint value) : priority(priority), value(value)
40 {}
41
42 bool operator < (const TPeriod &other) const
43 {
44 /* Sort by priority before value, such that changes in value for priorities other than NONE do not change the container order */
45 if (this->priority != other.priority) return this->priority < other.priority;
46 return this->value < other.value;
47 }
48
49 bool operator == (const TPeriod &other) const
50 {
51 return this->priority == other.priority && this->value == other.value;
52 }
53 };
54
55 using TElapsed = uint;
56 struct TStorage {
57 uint elapsed;
58 };
59
60 static TickCounter counter;
61};
62
66 class Ticks {
67public:
68 static constexpr TimerGameTick::Ticks INVALID_TICKS = -1;
69
75 static constexpr TimerGameTick::Ticks DAY_TICKS = 74;
76 static constexpr TimerGameTick::Ticks TICKS_PER_SECOND = 1000 / MILLISECONDS_PER_TICK;
77
78 static constexpr TimerGameTick::Ticks STATION_RATING_TICKS = 185;
79 static constexpr TimerGameTick::Ticks STATION_ACCEPTANCE_TICKS = 250;
80 static constexpr TimerGameTick::Ticks STATION_LINKGRAPH_TICKS = 504;
81 static constexpr TimerGameTick::Ticks CARGO_AGING_TICKS = 185;
82 static constexpr TimerGameTick::Ticks INDUSTRY_PRODUCE_TICKS = 256;
83 static constexpr TimerGameTick::Ticks TOWN_GROWTH_TICKS = 70;
84 static constexpr TimerGameTick::Ticks INDUSTRY_CUT_TREE_TICKS = INDUSTRY_PRODUCE_TICKS * 2;
85};
86
87#endif /* TIMER_GAME_TICK_H */
Ticks
Storage class for Ticks constants.
Definition timer_game_tick.h:66
Ticks::DAY_TICKS
static constexpr TimerGameTick::Ticks DAY_TICKS
1 day is 74 ticks; TimerGameCalendar::date_fract used to be uint16_t and incremented by 885.
Definition timer_game_tick.h:75
Ticks::INDUSTRY_CUT_TREE_TICKS
static constexpr TimerGameTick::Ticks INDUSTRY_CUT_TREE_TICKS
Cycle duration for lumber mill's extra action.
Definition timer_game_tick.h:84
Ticks::INVALID_TICKS
static constexpr TimerGameTick::Ticks INVALID_TICKS
Representation of an invalid number of ticks.
Definition timer_game_tick.h:68
Ticks::STATION_LINKGRAPH_TICKS
static constexpr TimerGameTick::Ticks STATION_LINKGRAPH_TICKS
Cycle duration for cleaning dead links.
Definition timer_game_tick.h:80
Ticks::CARGO_AGING_TICKS
static constexpr TimerGameTick::Ticks CARGO_AGING_TICKS
Cycle duration for aging cargo.
Definition timer_game_tick.h:81
Ticks::INDUSTRY_PRODUCE_TICKS
static constexpr TimerGameTick::Ticks INDUSTRY_PRODUCE_TICKS
Cycle duration for industry production.
Definition timer_game_tick.h:82
Ticks::TOWN_GROWTH_TICKS
static constexpr TimerGameTick::Ticks TOWN_GROWTH_TICKS
Cycle duration for towns trying to grow (this originates from the size of the town array in TTD).
Definition timer_game_tick.h:83
Ticks::TICKS_PER_SECOND
static constexpr TimerGameTick::Ticks TICKS_PER_SECOND
Estimation of how many ticks fit in a single second.
Definition timer_game_tick.h:76
Ticks::STATION_ACCEPTANCE_TICKS
static constexpr TimerGameTick::Ticks STATION_ACCEPTANCE_TICKS
Cycle duration for updating station acceptance.
Definition timer_game_tick.h:79
Ticks::STATION_RATING_TICKS
static constexpr TimerGameTick::Ticks STATION_RATING_TICKS
Cycle duration for updating station rating.
Definition timer_game_tick.h:78
TimerGameTick
Timer that represents the game-ticks.
Definition timer_game_tick.h:22
TimerGameTick::TickCounter
uint64_t TickCounter
The type that the tick counter is stored in.
Definition timer_game_tick.h:25
TimerGameTick::counter
static TickCounter counter
Monotonic counter, in ticks, since start of game.
Definition timer_game_tick.h:60
TimerGameTick::Priority
Priority
Definition timer_game_tick.h:27
TimerGameTick::NONE
@ NONE
These timers can be executed in any order; the order is not relevant.
Definition timer_game_tick.h:28
TimerGameTick::Ticks
int32_t Ticks
The type to store ticks in.
Definition timer_game_tick.h:24
MILLISECONDS_PER_TICK
static const uint MILLISECONDS_PER_TICK
The number of milliseconds per game tick.
Definition gfx_type.h:325
TimerGameTick::TPeriod
Definition timer_game_tick.h:35
TimerGameTick::TStorage
Definition timer_game_tick.h:56