LeviLamina
Loading...
Searching...
No Matches
GameChrono.h
1#pragma once
2
3#include <chrono>
4#include <ratio>
5
6#include "ll/api/base/Macro.h"
7#include "ll/api/base/StdInt.h"
8#include "mc/world/level/Tick.h"
9
10namespace ll::chrono {
11namespace game {
12using ticks = std::chrono::duration<int64, std::ratio<1, 20>>;
13using days = std::chrono::duration<int64, std::ratio_multiply<std::ratio<24000>, ticks::period>>;
14using hours = std::chrono::duration<int64, std::ratio_divide<days::period, std::ratio<24>>>;
15using minutes = std::chrono::duration<int64, std::ratio_divide<hours::period, std::ratio<60>>>;
16using weeks = std::chrono::duration<int64, std::ratio_multiply<days::period, std::ratio<7>>>;
17using years = std::chrono::duration<int64, std::ratio_multiply<days::period, std::ratio<146097, 400>>>;
18using months = std::chrono::duration<int64, std::ratio_divide<years::period, std::ratio<12>>>;
19} // namespace game
20using game::ticks;
21
23 using duration = ticks;
24 using rep = duration::rep;
25 using period = duration::period;
26 using time_point = std::chrono::time_point<ServerClock>;
27 static constexpr bool is_steady = true;
28
29 LLNDAPI static time_point now() noexcept;
30};
31
33 using duration = ticks;
34 using rep = duration::rep;
35 using period = duration::period;
36 using time_point = std::chrono::time_point<GameTickClock>;
37 static constexpr bool is_steady = false;
38
39 LLNDAPI static time_point now() noexcept;
40
41 static constexpr time_point fromTick(Tick const& tick) noexcept {
42 return time_point(duration(static_cast<int64>(tick.tickID)));
43 }
44};
45
46} // namespace ll::chrono
47
48namespace ll::inline literals::inline chrono_literals {
49
50using namespace std::literals::chrono_literals;
51
52constexpr ll::chrono::ticks operator""_tick(::uint64 val) noexcept { return ll::chrono::ticks{val}; }
53
54} // namespace ll::inline literals::inline chrono_literals
Definition Tick.h:5
Definition GameChrono.h:32
Definition GameChrono.h:22