UNPKG

@polygonjs/polygonjs

Version:

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

96 lines (95 loc) 3.56 kB
"use strict"; import { EventConnectionPoint, EventConnectionPointType } from "../utils/io/connections/Event"; import { NodeParamsConfig, ParamConfig } from "../utils/params/ParamsConfig"; import { TypedInputEventNode, EVENT_PARAM_OPTIONS } from "./_BaseInput"; import { isBooleanTrue } from "../../../core/BooleanValue"; import { stringMatchMask } from "../../../core/String"; import { EventInputType } from "../../poly/registers/nodes/types/Event"; import { CoreEventEmitter, EVENT_EMITTERS } from "../../../core/event/CoreEventEmitter"; import { ACCEPTED_KEYBOARD_EVENT_TYPES } from "../../../core/event/KeyboardEventType"; class KeyboardEventParamsConfig extends NodeParamsConfig { constructor() { super(...arguments); /** @param toggle on to allow any event to be listened to */ this.active = ParamConfig.BOOLEAN(true, { callback: (node, param) => { KeyboardEventNode.PARAM_CALLBACK_updateRegister(node); }, separatorAfter: true }); /** @param set which element triggers the event */ this.element = ParamConfig.INTEGER(EVENT_EMITTERS.indexOf(CoreEventEmitter.CANVAS), { menu: { entries: EVENT_EMITTERS.map((name, value) => { return { name, value }; }) }, separatorAfter: true, ...EVENT_PARAM_OPTIONS }); /** @param toggle on to listen to keydown events */ this.keydown = ParamConfig.BOOLEAN(1, EVENT_PARAM_OPTIONS); /** @param toggle on to listen to keypress events */ this.keypress = ParamConfig.BOOLEAN(0, EVENT_PARAM_OPTIONS); /** @param toggle on to listen to keyup events */ this.keyup = ParamConfig.BOOLEAN(0, EVENT_PARAM_OPTIONS); /** @param space separated list of accepted key codes. If this is empty then any key is accepted. */ this.keyCodes = ParamConfig.STRING("Digit1 KeyE ArrowDown", EVENT_PARAM_OPTIONS); /** @param requires ctrlKey */ this.ctrlKey = ParamConfig.BOOLEAN(0, EVENT_PARAM_OPTIONS); /** @param requires altKey */ this.altKey = ParamConfig.BOOLEAN(0, EVENT_PARAM_OPTIONS); /** @param requires shiftKey */ this.shiftKey = ParamConfig.BOOLEAN(0, EVENT_PARAM_OPTIONS); /** @param requires metaKey */ this.metaKey = ParamConfig.BOOLEAN(0, EVENT_PARAM_OPTIONS); } } const ParamsConfig = new KeyboardEventParamsConfig(); export class KeyboardEventNode extends TypedInputEventNode { constructor() { super(...arguments); this.paramsConfig = ParamsConfig; } static type() { return EventInputType.KEYBOARD; } acceptedEventTypes() { return /* @__PURE__ */ new Set([...ACCEPTED_KEYBOARD_EVENT_TYPES]); } initializeNode() { this.io.outputs.setNamedOutputConnectionPoints( ACCEPTED_KEYBOARD_EVENT_TYPES.map((event_type) => { return new EventConnectionPoint(event_type, EventConnectionPointType.KEYBOARD); }) ); } setElement(element) { this.p.element.set(EVENT_EMITTERS.indexOf(element)); } processEvent(eventContext) { if (!this.pv.active) { return; } const event = eventContext.event; if (!event) { return; } if (event.ctrlKey != isBooleanTrue(this.pv.ctrlKey)) { return; } if (event.shiftKey != isBooleanTrue(this.pv.shiftKey)) { return; } if (event.altKey != isBooleanTrue(this.pv.altKey)) { return; } if (event.metaKey != isBooleanTrue(this.pv.metaKey)) { return; } if (!stringMatchMask(event.code, this.pv.keyCodes)) { return; } this.dispatchEventToOutput(event.type, eventContext); } }