VoltMod
C++23 framework for CS2 server plugins
Loading...
Searching...
No Matches
Scheduler.hpp
Go to the documentation of this file.
1#pragma once
2
5#include <cstdint>
6#include <functional>
7
8namespace VoltMod
9{
10
11/**
12 * @brief One-shot delays and repeating timers, run on the game thread.
13 *
14 * Dropping a registration's @ref Subscription cancels its timer, one-shots included, so a callback
15 * never outlives the state it captured.
16 */
18{
19public:
20 Scheduler() = default;
21
22 /** Run @p callback once after @p delayMs milliseconds. */
23 [[nodiscard]] Subscription Delay(int64_t delayMs, std::function<void()> callback);
24
25 /** Run @p callback every @p intervalMs milliseconds. */
26 [[nodiscard]] Subscription Repeat(int64_t intervalMs, std::function<void()> callback);
27
28 /** Run @p callback on the very next game frame. */
29 [[nodiscard]] Subscription NextTick(std::function<void()> callback);
30
31 /** Run @p callback every game frame. */
32 [[nodiscard]] Subscription EveryFrame(std::function<void()> callback);
33
34 /** Called every frame by the runtime. */
35 void OnGameFrame();
36
37private:
38 struct Timer
39 {
40 int64_t NextFireTime;
41 int64_t Interval;
42 std::function<void()> Callback;
43 uint64_t Id;
44 };
45
46 int64_t GetCurrentTimeMs() const;
47 Subscription AddTimer(int64_t nextFireTime, int64_t interval, std::function<void()> callback);
48
50};
51
52} // namespace VoltMod
One-shot delays and repeating timers, run on the game thread.
Definition Scheduler.hpp:18
Subscription NextTick(std::function< void()> callback)
Definition Scheduler.cpp:30
Subscription Repeat(int64_t intervalMs, std::function< void()> callback)
Definition Scheduler.cpp:25
Subscription EveryFrame(std::function< void()> callback)
Definition Scheduler.cpp:35
Subscription Delay(int64_t delayMs, std::function< void()> callback)
Definition Scheduler.cpp:20
Owns one registration and releases it on destruction.
static std::string ReadFile(const std::filesystem::path &path)
Definition Loader.cpp:56