Files
jam-game/src/Alarm.cpp
T

61 lines
1.2 KiB
C++
Raw Normal View History

2025-07-17 21:52:37 +03:00
#include "Alarm.h"
namespace NGame {
void TAlarm::Set(TId id, std::uint32_t millis) {
auto& data = Alarms_[id];
data.Target = millis;
data.Current = 0;
}
void TAlarm::Unset(TId id) {
auto& data = Alarms_[id];
data.Target = 0;
data.Current = 0;
}
void TAlarm::Update(std::uint32_t delta) {
for (auto it = Alarms_.begin(); it != Alarms_.end(); ++it) {
auto& alarm = it->second;
if (alarm.Target) {
alarm.Current += delta;
}
if (alarm.Current >= alarm.Target) {
DueAlarms_.push(it->first);
}
}
}
bool TAlarm::Next(TId& id) {
bool repeat;
do {
repeat = false;
if (DueAlarms_.empty())
return false;
id = DueAlarms_.front();
DueAlarms_.pop();
auto& alarm = Alarms_[id];
if (alarm.Target) {
if (alarm.Current >= alarm.Target) {
alarm.Current -= alarm.Target;
}
if (alarm.Current >= alarm.Target) {
DueAlarms_.push(id);
}
} else {
alarm.Current = 0;
repeat = true;
}
} while (repeat);
return true;
}
} // namespace NGame