@polygonjs/polygonjs
Version:
node-based WebGL 3D engine https://polygonjs.com
50 lines (49 loc) • 1.37 kB
JavaScript
;
import { addToSetAtEntry } from "../../../../core/MapUtils";
import { PolyEventName } from "../../../poly/utils/PolyEventName";
export class PolySceneEvent extends Event {
constructor(type) {
super(type);
}
get type() {
return super.type;
}
}
export const SCENE_EVENT_CREATED_EVENT_CONTEXT = {
event: new PolySceneEvent(PolyEventName.SCENE_CREATED)
};
export const SCENE_EVENT_READY_EVENT_CONTEXT = {
event: new PolySceneEvent(PolyEventName.SCENE_READY)
};
export const SCENE_EVENT_PLAY_EVENT_CONTEXT = {
event: new PolySceneEvent(PolyEventName.SCENE_PLAY)
};
export const SCENE_EVENT_PAUSE_EVENT_CONTEXT = {
event: new PolySceneEvent(PolyEventName.SCENE_PAUSE)
};
export class SceneEventsController {
constructor() {
this._observersByEventType = /* @__PURE__ */ new Map();
}
dispatch(eventContext) {
const event = eventContext.event;
if (!event) {
return;
}
const set = this._observersByEventType.get(event.type);
if (!set) {
return;
}
set.forEach((node) => {
node.processEvent(eventContext);
});
}
removeObserverFromAllEventTypes(eventNode) {
this._observersByEventType.forEach((nodes, eventType) => {
nodes.delete(eventNode);
});
}
addObserver(eventNode, eventType) {
addToSetAtEntry(this._observersByEventType, eventType, eventNode);
}
}