@polygonjs/polygonjs
Version:
node-based WebGL 3D engine https://polygonjs.com
78 lines (77 loc) • 2.3 kB
JavaScript
"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();
}
}