Delay.ts 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. class Delay {
  2. private delays: { duration: number; elapsed: number; resolve: (() => void) | null; }[] = [];
  3. private paused: boolean = false;
  4. // 创建一个新的延迟
  5. public start(seconds: number): Promise<void> {
  6. const duration = seconds;
  7. return new Promise((resolve) => {
  8. this.delays.push({
  9. duration: duration,
  10. elapsed: 0,
  11. resolve: resolve
  12. });
  13. });
  14. }
  15. public pause(): void {
  16. this.paused = true;
  17. }
  18. public resume(): void {
  19. this.paused = false;
  20. }
  21. //更新所有延迟的状态,传入更新时间间隔(秒)
  22. public update(deltaTime: number): void {
  23. if (this.paused) return;
  24. for (let i = this.delays.length - 1; i >= 0; i--) {
  25. const delay = this.delays[i];
  26. delay.elapsed += deltaTime; // 累加已过时间
  27. if (delay.elapsed >= delay.duration) {
  28. if (delay.resolve) {
  29. delay.resolve(); // 解析 Promise
  30. delay.resolve = null; // 清空引用
  31. }
  32. this.delays.splice(i, 1); // 从数组中移除已完成的延迟对象
  33. }
  34. }
  35. }
  36. //取消所有延迟
  37. public cancelAll(): void {
  38. this.delays.forEach(delay => { delay.resolve = null; });
  39. this.delays = []; //清空所有延迟
  40. }
  41. //检查是否有活动的延迟
  42. public isActive(): boolean {
  43. return this.delays.length > 0;
  44. }
  45. }
  46. export default function get_new_delay(): Delay {
  47. return new Delay();
  48. }