VoltMod
C++23 framework for CS2 server plugins
Loading...
Searching...
No Matches
Rounds.cpp
Go to the documentation of this file.
4
5namespace VoltMod
6{
7
8// The game rules live outside the entity system; their proxy entity holds the pointer.
14
16{
17 return std::unexpected(Error::NotReady("no game rules: is a map running?"));
18}
19
21{
22 if (!_bindings.TerminateRound)
23 {
24 return std::unexpected(Error::Unsupported("the CCSGameRules::TerminateRound signature did not bind"));
25 }
26 return {};
27}
28
30{
32 {
33 return available;
34 }
35 const Schema::CCSGameRules rules = GameRules(_entities);
36 if (!rules)
37 {
38 return NoGameRules();
39 }
40
41 _bindings.TerminateRound(rules.Base(), delaySeconds, static_cast<uint32_t>(reason), nullptr);
42 return {};
43}
44
46{
47 const Schema::CCSGameRules rules = GameRules(_entities);
48 if (!rules)
49 {
50 return NoGameRules();
51 }
52 rules.SetRoundTime(seconds);
53 return {};
54}
55
56std::optional<float> Rounds::TimeLeft() const
57{
58 const Schema::CCSGameRules rules = GameRules(_entities);
59 if (!rules)
60 {
61 return std::nullopt;
62 }
63 return rules.RoundStartTime() + static_cast<float>(rules.RoundTime()) - _clock.Time();
64}
65
66} // namespace VoltMod
float Time() const
Definition Clock.cpp:21
runtime.Entities: finds and creates entities. Everything it returns is valid for this frame only; see...
A live entity, valid for this frame only.
Definition Entity.hpp:29
Status SetTime(int seconds) const
Definition Rounds.cpp:45
Status End(RoundEndReason reason, float delaySeconds) const
Definition Rounds.cpp:29
std::optional< float > TimeLeft() const
Definition Rounds.cpp:56
Status Available() const
Definition Rounds.cpp:20
static std::string ReadFile(const std::filesystem::path &path)
Definition Loader.cpp:56
static Schema::CCSGameRules GameRules(EntitySystem &entities)
Definition Rounds.cpp:9
static Status NoGameRules()
Definition Rounds.cpp:15
std::expected< void, Error > Status
Definition Result.hpp:67
RoundEndReason
Definition Rounds.hpp:15
Fn< void(void *, float, uint32_t, void *)> TerminateRound
Definition Bindings.hpp:51
static Error Unsupported(std::string detail)
Definition Result.hpp:57
static Error NotReady(std::string detail)
Definition Result.hpp:50