aboutsummaryrefslogtreecommitdiffstats
path: root/frontend/ts/timer.ts
blob: 013d4982df9d6e53e962d08f245c8beca80e0221 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
export default class Timer {
  divTimer!: HTMLElement;

  interval!: any;
  async start(playerIndex: number, finishTime: number): Promise<void> {
    return new Promise(resolve => {
      if (this.interval !== undefined)
        this.stop();

      this.divTimer = document.getElementById(`${playerIndex}-player-time`) as HTMLElement;

      this.interval = setInterval(() => {
        this.updateDisplay(finishTime - Date.now(), resolve);
      }, 1000);
    })
  }

  updateDisplay(time: number, resolve: Function): void {
    let secondsElapsed = Math.floor(time / 1000);
    if (secondsElapsed <= 0) {
      resolve();
      clearInterval(this.interval);
      this.divTimer.innerHTML = '0';
    } else {
      this.divTimer.innerHTML = secondsElapsed.toString();
    }
  }
  
  stop(): void {
    this.divTimer.innerHTML = '';
    clearInterval(this.interval);
    this.interval = undefined;
  }
}