1#include <CS2Kit/Core/Scheduler.hpp>
9int64_t Scheduler::GetCurrentTimeMs()
const
11 return std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::steady_clock::now().time_since_epoch())
15uint64_t Scheduler::Delay(int64_t delayMs, std::function<
void()> callback)
17 uint64_t
id = _nextId++;
18 _timers.push_back({id, GetCurrentTimeMs() + delayMs, 0, std::move(callback)});
22uint64_t Scheduler::Repeat(int64_t intervalMs, std::function<
void()> callback)
24 uint64_t
id = _nextId++;
25 _timers.push_back({id, GetCurrentTimeMs() + intervalMs, intervalMs, std::move(callback)});
29uint64_t Scheduler::DelayAndRepeat(int64_t delayMs, int64_t intervalMs, std::function<
void()> callback)
31 uint64_t
id = _nextId++;
32 _timers.push_back({id, GetCurrentTimeMs() + delayMs, intervalMs, std::move(callback)});
36uint64_t Scheduler::NextTick(std::function<
void()> callback)
38 return Delay(0, std::move(callback));
41void Scheduler::Cancel(uint64_t
id)
43 _timers.erase(std::remove_if(_timers.begin(), _timers.end(), [
id](
const Timer& t) { return t.Id == id; }),
47void Scheduler::CancelAll()
52void Scheduler::OnGameFrame()
57 int64_t now = GetCurrentTimeMs();
61 std::vector<uint64_t> toFire;
62 for (
const auto& t : _timers)
64 if (now >= t.NextFireTime)
65 toFire.push_back(t.Id);
68 for (uint64_t
id : toFire)
71 auto it = std::find_if(_timers.begin(), _timers.end(), [
id](
const Timer& t) { return t.Id == id; });
72 if (it == _timers.end())
76 int64_t interval = it->Interval;
77 auto callback = it->Callback;
83 it = std::find_if(_timers.begin(), _timers.end(), [
id](
const Timer& t) { return t.Id == id; });
84 if (it == _timers.end())
88 it->NextFireTime = now + interval;