UNPKG

@polygonjs/polygonjs

Version:

node-based WebGL 3D engine https://polygonjs.com

66 lines (65 loc) 2.15 kB
"use strict"; import { BaseSceneEventsController } from "./_BaseEventsController"; import { ACCEPTED_KEYBOARD_EVENT_TYPES, KeyboardEventType } from "../../../../core/event/KeyboardEventType"; import { JsType } from "../../../poly/registers/nodes/types/Js"; const methodNameByEventType = { [KeyboardEventType.keydown]: [JsType.ON_KEY, JsType.ON_KEYDOWN], [KeyboardEventType.keypress]: [JsType.ON_KEYPRESS], [KeyboardEventType.keyup]: [JsType.ON_KEY, JsType.ON_KEYUP] }; export class KeyboardEventsController extends BaseSceneEventsController { constructor(dispatcher) { super(dispatcher); this._requireCanvasEventListeners = true; this._currentEvents = []; this._lastProcessedFrame = -1; this.timeController = this.dispatcher.scene.timeController; this.keyboardEventsController = this.dispatcher.scene.actorsManager.keyboardEventsController; } type() { return "keyboard"; } acceptedEventTypes() { return new Set(ACCEPTED_KEYBOARD_EVENT_TYPES.map((n) => `${n}`)); } currentEvents() { return this._currentEvents; } processEvent(eventContext) { super.processEvent(eventContext); const { event } = eventContext; if (!event) { return; } const eventType = event.type; const mapForEvent = this._actorEvaluatorsByEventNames.get(eventType); if (!mapForEvent) { return; } if (this.timeController.playing()) { const frame = this.timeController.frame(); if (frame != this._lastProcessedFrame) { this._lastProcessedFrame = frame; this._currentEvents.length = 0; } this._currentEvents.push(event); } else { this._currentEvents[0] = event; } const eventEmitter = eventContext.emitter; if (!eventEmitter) { return; } const evaluatorGenerators = mapForEvent.get(eventEmitter); if (!evaluatorGenerators) { return; } const methodNames = methodNameByEventType[eventType]; if (!methodNames) { return; } for (const methodName of methodNames) { this.keyboardEventsController.addTriggeredEvaluators(evaluatorGenerators, methodName); } } }