UNPKG

@polygonjs/polygonjs

Version:

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

78 lines (77 loc) 2.3 kB
"use strict"; import { TypedEventNode } from "./_Base"; import { NodeParamsConfig, ParamConfig } from "../utils/params/ParamsConfig"; import { EVENT_EMITTERS, EVENT_EMITTER_PARAM_MENU_OPTIONS } from "../../../core/event/CoreEventEmitter"; export const EVENT_PARAM_OPTIONS = { visibleIf: { active: 1 }, callback: (node) => { BaseInputEventNodeClass.PARAM_CALLBACK_updateRegister(node); } }; export class TypedInputEventNode extends TypedEventNode { constructor() { super(...arguments); this._activeEventDatas = []; } initializeBaseNode() { super.initializeBaseNode(); const register = () => { this.scene().eventsDispatcher.registerEventNode(this); }; const unregister = () => { this.scene().eventsDispatcher.unregisterEventNode(this); }; this.lifecycle.onAfterAdded(register); this.lifecycle.onBeforeDeleted(unregister); this.params.onParamsCreated("update_register", () => { this._updateRegister(); }); } processEvent(eventContext) { if (!this.pv.active) { return; } if (!eventContext.event) { return; } this.dispatchEventToOutput(eventContext.event.type, eventContext); } static PARAM_CALLBACK_updateRegister(node) { node._updateRegister(); } _updateRegister() { this._updateActiveEventDatas(); this.scene().eventsDispatcher.updateViewerEventListeners(this); } _updateActiveEventDatas() { this._activeEventDatas = []; if (this.pv.active) { const list = this.acceptedEventTypes(); list.forEach((name) => { const param = this.params.get(name); if (param && param.value) { this._activeEventDatas.push({ type: name, emitter: EVENT_EMITTERS[this.pv.element] }); } }); } } activeEventDatas() { return this._activeEventDatas; } } class BaseInputEventParamsConfig extends NodeParamsConfig { constructor() { super(...arguments); this.active = ParamConfig.BOOLEAN(true); /** @param set which element triggers the event */ this.element = ParamConfig.INTEGER(0, { ...EVENT_EMITTER_PARAM_MENU_OPTIONS, separatorAfter: true }); } } export class BaseInputEventNodeClass extends TypedInputEventNode { acceptedEventTypes() { return /* @__PURE__ */ new Set(); } }