@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/timerQuick 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);