Source: Thing.UE/Misc/TimerCounter.js


//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;