Timer
定时器
/** 定时器模块 */
class Timer {
/** 记录上一次调用 tick 的 Game.time 以保证每 tick 只能执行一次 tick */
#lastTick: number = -1
#tasks: {[tick: number]: {func: (...args) => any, params: any[]}[]} = {}
/**
* 添加定时任务
*/
add(tick: number, func: (...args) => any, params: any[]) {
assertWithMsg(tick > Game.time, `无法添加发生在当前 tick 或之前的定时任务`)
if ( !(tick in this.#tasks) )
this.#tasks[tick] = []
this.#tasks[tick].push({ func, params })
}
/**
* 在当前 tick 运行一次
*
* 注意: 本函数每 tick 只能运行一次, 否则会报错.
*/
tick() {
// 检验为本 tick 第一次调用
assertWithMsg(this.#lastTick === -1 || this.#lastTick !== Game.time, `定时器在 ${Game.time} 被重复调用 tick 函数`)
if ( !(Game.time in this.#tasks) ) return
for ( const { func, params } of this.#tasks[Game.time] ) {
func.apply(undefined, params)
}
delete this.#tasks[Game.time]
this.#lastTick = Game.time
return OK
}
}Last updated