namespace easy_data {
class Cooldown {
float next_time=0;
bool ready(float interval) {
if(!math::is_finite(interval)||interval<=0||interval>3600)return false;
float now=time::seconds();if(now<next_time)return false;
next_time=now+interval;return true;
}
void reset() { next_time=0; }
}
class PositionSnapshot {
vec3 position;
float timestamp=0;
bool valid=false;
void clear() {valid=false;position=vec3();timestamp=0;}
bool publish(const vec3 &in point) {
clear();
if(!math::is_finite(point.x)||!math::is_finite(point.y)||!math::is_finite(point.z)
||math::abs(point.x)>10000000||math::abs(point.y)>10000000||math::abs(point.z)>10000000)return false;
position=point;timestamp=time::seconds();valid=true;return true;
}
bool fresh(float max_age) const {
float age=time::seconds()-timestamp;
return valid&&math::is_finite(max_age)&&max_age>=0&&age>=0&&age<=max_age;
}
}
}
Easy Universal / Примеры и шаблоны