123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 |
- class Delay {
- private delays: { duration: number; elapsed: number; resolve: (() => void) | null; }[] = [];
- private paused: boolean = false;
- // 创建一个新的延迟
- public start(seconds: number): Promise<void> {
- const duration = seconds;
- return new Promise((resolve) => {
- this.delays.push({
- duration: duration,
- elapsed: 0,
- resolve: resolve
- });
- });
- }
- public pause(): void {
- this.paused = true;
- }
- public resume(): void {
- this.paused = false;
- }
- //更新所有延迟的状态,传入更新时间间隔(秒)
- public update(deltaTime: number): void {
- if (this.paused) return;
- for (let i = this.delays.length - 1; i >= 0; i--) {
- const delay = this.delays[i];
- delay.elapsed += deltaTime; // 累加已过时间
- if (delay.elapsed >= delay.duration) {
- if (delay.resolve) {
- delay.resolve(); // 解析 Promise
- delay.resolve = null; // 清空引用
- }
- this.delays.splice(i, 1); // 从数组中移除已完成的延迟对象
- }
- }
- }
- //取消所有延迟
- public cancelAll(): void {
- this.delays.forEach(delay => { delay.resolve = null; });
- this.delays = []; //清空所有延迟
- }
- //检查是否有活动的延迟
- public isActive(): boolean {
- return this.delays.length > 0;
- }
- }
- export default function get_new_delay(): Delay {
- return new Delay();
- }
|