58 lines
1.4 KiB
C++
58 lines
1.4 KiB
C++
#pragma once
|
|
|
|
#include <extra2d/core/service_interface.h>
|
|
#include <extra2d/core/service_locator.h>
|
|
#include <extra2d/utils/timer.h>
|
|
|
|
namespace extra2d {
|
|
|
|
/**
|
|
* @brief 计时器服务接口
|
|
*/
|
|
class ITimerService : public IService {
|
|
public:
|
|
virtual ~ITimerService() = default;
|
|
|
|
virtual u32 add(f32 delay, Timer::Fn fn) = 0;
|
|
virtual u32 addRepeat(f32 interval, Timer::Fn fn) = 0;
|
|
virtual void cancel(u32 timerId) = 0;
|
|
virtual void pauseTimer(u32 timerId) = 0;
|
|
virtual void resumeTimer(u32 timerId) = 0;
|
|
virtual void clear() = 0;
|
|
virtual size_t count() const = 0;
|
|
};
|
|
|
|
/**
|
|
* @brief 计时器服务实现
|
|
*/
|
|
class TimerService : public ITimerService {
|
|
public:
|
|
TimerService();
|
|
~TimerService() override = default;
|
|
|
|
ServiceInfo info() const override;
|
|
|
|
bool init() override;
|
|
void shutdown() override;
|
|
void update(f32 dt) override;
|
|
|
|
u32 add(f32 delay, Timer::Fn fn) override;
|
|
u32 addRepeat(f32 interval, Timer::Fn fn) override;
|
|
void cancel(u32 timerId) override;
|
|
void pauseTimer(u32 timerId) override;
|
|
void resumeTimer(u32 timerId) override;
|
|
void clear() override;
|
|
size_t count() const override;
|
|
|
|
TimerManager& mgr() { return mgr_; }
|
|
const TimerManager& mgr() const { return mgr_; }
|
|
|
|
private:
|
|
TimerManager mgr_;
|
|
|
|
// 服务注册元数据
|
|
E2D_AUTO_REGISTER_SERVICE(ITimerService, TimerService);
|
|
};
|
|
|
|
}
|