Skip to content

@web-engine-dev/timer

Game-aware timer system for web-engine.

Features

  • Game-Time Aware: Respects pause and time scale
  • Timer Types: Duration, interval, frame-based
  • Pooled Timers: Efficient timer allocation
  • Timer Groups: Manage timers by category
  • Callbacks: Flexible callback system

Installation

bash
npm install @web-engine-dev/timer
# or
pnpm add @web-engine-dev/timer

Quick Start

typescript
import { TimerManager, Timer } from '@web-engine-dev/timer';

// Create timer manager
const timers = new TimerManager();

// Create timer
const timer = timers.after(2.0, () => {
  console.log('2 seconds passed!');
});

// Repeating timer
const interval = timers.every(0.5, () => {
  spawnEnemy();
});

// Update each frame
timers.update(deltaTime);

API Overview

Timer Manager

typescript
const timers = new TimerManager({
  timeScaleAware: true,
});

// One-shot timer
timers.after(duration, callback);

// Repeating timer
timers.every(interval, callback, count?);

// Frame-based timer
timers.afterFrames(60, callback);

// Update all timers
timers.update(deltaTime);

// Pause/resume all
timers.pause();
timers.resume();

Timer Control

typescript
const timer = timers.after(5.0, onComplete);

// Check state
timer.elapsed; // Time passed
timer.remaining; // Time left
timer.progress; // 0 to 1
timer.isRunning;
timer.isPaused;
timer.isComplete;

// Control
timer.pause();
timer.resume();
timer.reset();
timer.cancel();

Timer Groups

typescript
const uiTimers = timers.createGroup('ui');
const gameplayTimers = timers.createGroup('gameplay');

// Add timers to groups
uiTimers.after(1.0, showTutorial);
gameplayTimers.every(5.0, spawnEnemy);

// Pause/clear by group
uiTimers.pauseAll();
gameplayTimers.clearAll();

Chained Timers

typescript
timers
  .after(1.0, () => {
    showMessage('Get ready!');
  })
  .then(1.0, () => {
    showMessage('Set!');
  })
  .then(1.0, () => {
    showMessage('Go!');
    startGame();
  });

Cooldowns

typescript
const fireCooldown = new Cooldown(0.5);

function tryFire() {
  if (fireCooldown.isReady()) {
    fire();
    fireCooldown.trigger();
  }
}

// Update
fireCooldown.update(deltaTime);

Proprietary software. All rights reserved.