//author : spr1ngd
//desc : timer-counter driven event caller
const UUtils = require("../UUtils");
/**
* @description 每隔固定时间(s)执行回调N次
* @class TimerCounter
*/
class TimerCounter {
#uuid = null;
#intervalSeconds = 1;
#loopTime = -1;
#callee = null;
#timer = 0;
#loopCounter = 0;
/**
* @constructor
* @param {Function} callee - 回调函数
* @param {Number} intervalSeconds - 间隔时间(s)
* @param {Integer} loopTime - 执行次数
*/
constructor(callee, intervalSeconds = 1.0, loopTime = -1) {
this.#uuid = UUtils.generateUUID();
this.#intervalSeconds = intervalSeconds;
this.#loopTime = loopTime;
this.#callee = callee;
this.#timer = 0;
this.#loopCounter = 0;
THING.UE.appDelegate.addEventListener('update', ({ delta }) => {
this.count(delta);
}, -1, this.#uuid);
}
count(delta) {
this.#timer += delta;
if (this.#timer >= this.#intervalSeconds) {
this.#callee();
this.#loopCounter++;
this.#timer -= this.#intervalSeconds;
}
if (this.#loopTime > 0) {
if (this.#loopCounter >= this.#loopTime) {
THING.UE.appDelegate.removeEventListener('update', null, this.#uuid);
}
}
}
}
module.exports = TimerCounter;