import {Ticker} from '@avocado/timing'; export class WorldTime { constructor() { this.hour = 0; this.ticker = new Ticker(1); this._state = 0; this.ticker.on('tick', () => { this._state = this.hour; }); } hour() { return this.hour; } humanReadable() { const rawHour = (this.hour + 12) % 12; const hour = Math.floor(0 === Math.floor(rawHour) ? 12 : rawHour); const minutes = String(Math.floor((rawHour - Math.floor(rawHour)) * 60)).padStart(2, '0'); if (this.hour >= 12) { return `${hour}:${minutes} pm`; } else { return `${hour}:${minutes} am`; } } patchState(patch) { this.hour = patch; } secondsPerHour() { return 60; } get state() { return this._state; } tick(elapsed) { this.hour += (elapsed / this.secondsPerHour()); this.hour = this.hour % 24; this.ticker.tick(elapsed); } }