Skip to content

Event System

Scene includes a built-in type-safe event system for decoupled communication within scenes.

class EventScene extends Scene {
protected initialize(): void {
// Listen to events
this.eventSystem.on('player_died', this.onPlayerDied.bind(this));
this.eventSystem.on('enemy_spawned', this.onEnemySpawned.bind(this));
this.eventSystem.on('level_complete', this.onLevelComplete.bind(this));
}
private onPlayerDied(data: any): void {
console.log('Player died event');
}
private onEnemySpawned(data: any): void {
console.log('Enemy spawned event');
}
private onLevelComplete(data: any): void {
console.log('Level complete event');
}
}
public triggerGameEvent(): void {
// Send event (synchronous)
this.eventSystem.emitSync('custom_event', {
message: "This is a custom event",
timestamp: Date.now()
});
// Send event (asynchronous)
this.eventSystem.emit('async_event', {
data: "Async event data"
});
}
MethodDescription
on(event, callback)Listen to event
once(event, callback)Listen once (auto-unsubscribe)
off(event, callback)Stop listening
emitSync(event, data)Send event (synchronous)
emit(event, data)Send event (asynchronous)
clear()Clear all event listeners
class EventHandlingScene extends Scene {
protected initialize(): void {
this.setupEventListeners();
}
private setupEventListeners(): void {
this.eventSystem.on('game_pause', this.onGamePause.bind(this));
this.eventSystem.on('game_resume', this.onGameResume.bind(this));
this.eventSystem.on('player_input', this.onPlayerInput.bind(this));
}
private onGamePause(): void {
// Pause game logic
this.systems.forEach(system => {
if (system instanceof GameLogicSystem) {
system.enabled = false;
}
});
}
private onGameResume(): void {
// Resume game logic
this.systems.forEach(system => {
if (system instanceof GameLogicSystem) {
system.enabled = true;
}
});
}
private onPlayerInput(data: any): void {
// Handle player input
}
}

Clean up event listeners on scene unload to avoid memory leaks:

public unload(): void {
// Clear all event listeners
this.eventSystem.clear();
}
CategoryExample Events
Game Stategame_start, game_pause, game_over
Player Actionsplayer_died, player_jump, player_attack
Enemy Actionsenemy_spawned, enemy_killed
Level Progresslevel_start, level_complete
UI Interactionbutton_click, menu_open