sendEvent<E extends Event> method

void sendEvent<E extends Event>(
  1. E event
)

Synchronously dispatches event to every listener whose registered type E is a supertype of event (subtype propagation — Liskov for events), then buffers it for readEvents until the next outer tick ends. A snapshot of the listener list is taken so subscribing or unsubscribing inside a handler does not affect the current dispatch.

Implementation

void sendEvent<E extends Event>(E event) {
  assert(
    !_disposed,
    'World.sendEvent: cannot be called after dispose. Listeners and '
    'buffers are cleared on dispose — the event would be dropped silently.',
  );
  _eventBuffer.add(event);
  for (final listener in List.of(_eventListeners)) {
    listener(event);
  }
}