Übersicht

Event-System

Leichtgewichtiger Pub/Sub EventEmitter, der in der gesamten Engine verwendet wird.

Die Engine enthält einen leichtgewichtigen EventEmitter für entkoppelte Kommunikation zwischen Systemen. Er wird intern für Resize-Events, Ressourcenlade-Fortschritt, Eingabe-Events und mehr verwendet — und steht auch für deine eigenen Spiel-Events zur Verfügung.

EventEmitter

import { EventEmitter } from '@mavonengine/core'

class MySystem extends EventEmitter {
  doSomething() {
    this.trigger('my-event', { value: 42 })
  }
}

const system = new MySystem()
system.on('my-event', (data) => {
  console.log(data.value) // 42
})

API

MethodeBeschreibung
on(event, callback)Ein Event abonnieren
trigger(event, data?)Ein Event mit optionalen Daten auslösen

EventEmitterMixin

Wenn du EventEmitter nicht direkt erweitern kannst (z.B. weil deine Klasse bereits etwas anderes erweitert), verwende den Mixin:

import { EventEmitterMixin, Actor } from '@mavonengine/core'

class MyActor extends EventEmitterMixin(Actor) {
  doSomething() {
    this.trigger('state-changed', { state: 'idle' })
  }
}

Engine-Events

Verschiedene Engine-Systeme senden Events, die du abonnieren kannst:

Sizes (Fenster-Resize)

import { Game } from '@mavonengine/core'

const game = Game.instance()
game.sizes.on('resize', () => {
  console.log(game.sizes.width, game.sizes.height)
})

Resources (Asset-Laden)

game.resources.on('progress', ({ loaded, total }) => {
  console.log(`${loaded} / ${total} Assets geladen`)
})

game.resources.on('loaded', () => {
  console.log('Alle Assets bereit')
})

InputManager (Tastatur)

game.input.on('keydown', (event) => { /* ... */ })
game.input.on('keyup', (event) => { /* ... */ })