Zappy Server
C++ game server: world, rules, scheduler, network
Loading...
Searching...
No Matches
GameClock.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <chrono>
4#include <optional>
5#include <string>
6#include <unordered_map>
7
22class GameClock {
23 public:
25 struct Stamp {
26 std::chrono::microseconds elapsed;
27 double ticks;
28 };
29
30 explicit GameClock(int freq);
31
32 int freq() const { return _freq; }
33
35 std::chrono::microseconds elapsed() const;
36
38 double ticks() const;
39
44 float setFreq(int newFreq);
45
48 void recordJoin(const std::string& team);
49
51 std::optional<Stamp> joinOf(const std::string& team) const;
52
53 private:
54 double _ticksSince(std::chrono::steady_clock::time_point from) const;
55
56 int _freq;
57 std::chrono::steady_clock::time_point _startTime;
58 std::chrono::steady_clock::time_point _lastFreqChange;
59 double _accumTicks = 0.0;
60 std::unordered_map<std::string, Stamp> _joins;
61};
Single owner of game frequency and elapsed game time.
Definition GameClock.hpp:22
std::chrono::steady_clock::time_point _lastFreqChange
Definition GameClock.hpp:58
std::optional< Stamp > joinOf(const std::string &team) const
The join stamp for team, or nullopt if the team never joined.
Definition GameClock.cpp:37
void recordJoin(const std::string &team)
Definition GameClock.cpp:31
double _accumTicks
Definition GameClock.hpp:59
double _ticksSince(std::chrono::steady_clock::time_point from) const
Definition GameClock.cpp:14
double ticks() const
Total ticks elapsed: integral of freq over time. Fractional by nature.
Definition GameClock.cpp:20
std::chrono::steady_clock::time_point _startTime
Definition GameClock.hpp:57
float setFreq(int newFreq)
Change frequency, banking ticks accrued at the old rate first.
Definition GameClock.cpp:22
std::unordered_map< std::string, Stamp > _joins
Definition GameClock.hpp:60
int freq() const
Definition GameClock.hpp:32
std::chrono::microseconds elapsed() const
Wall-clock time since construction.
Definition GameClock.cpp:8
A clock reading: wall time and ticks since boot, captured at one instant.
Definition GameClock.hpp:25
std::chrono::microseconds elapsed
Definition GameClock.hpp:26