UNPKG

@polygonjs/polygonjs

Version:

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

83 lines (77 loc) 2.5 kB
/** * Activates events for the viewer * * @param * For instance, this can be useful after a raycast node to set an 'active' class on the html canvas, so that the cursor reflect what the mouse is hovering over. * */ import {TypedEventNode} from './_Base'; import {EventConnectionPoint, EventConnectionPointType} from '../utils/io/connections/Event'; import {NodeParamsConfig, ParamConfig} from '../utils/params/ParamsConfig'; import {EventContext} from '../../../core/event/EventContextType'; class ViewerParamsConfig extends NodeParamsConfig { /** @param sets the class of the viewer */ className = ParamConfig.STRING('active'); } const ParamsConfig = new ViewerParamsConfig(); export class ViewerEventNode extends TypedEventNode<ViewerParamsConfig> { override paramsConfig = ParamsConfig; static override type() { return 'viewer'; } override initializeNode() { this.io.inputs.setNamedInputConnectionPoints([ // class new EventConnectionPoint( 'setCss', EventConnectionPointType.BASE, this._process_trigger_setClass.bind(this) ), new EventConnectionPoint( 'unSetCss', EventConnectionPointType.BASE, this._process_trigger_unsetClass.bind(this) ), // controls // new EventConnectionPoint( // 'createControls', // EventConnectionPointType.BASE, // this._process_trigger_createControls.bind(this) // ), // new EventConnectionPoint( // 'disposeControls', // EventConnectionPointType.BASE, // this._process_trigger_disposeControls.bind(this) // ), ]); } private _getViewer(context: EventContext<Event>) { if (context.viewer) { return context.viewer; } else { return this.scene().viewersRegister.firstViewer(); } } private _process_trigger_setClass(context: EventContext<Event>) { const canvas = this._getViewer(context)?.canvas(); if (canvas) { canvas.classList.add(this.pv.className); } } private _process_trigger_unsetClass(context: EventContext<Event>) { const canvas = this._getViewer(context)?.canvas(); if (canvas) { canvas.classList.remove(this.pv.className); } } // private _process_trigger_createControls(context: EventContext<Event>) { // this.scene().viewersRegister.traverseViewers((v) => { // v.controlsController()?.create_controls(); // }); // } // private _process_trigger_disposeControls(context: EventContext<Event>) { // this.scene().viewersRegister.traverseViewers((v) => { // v.controlsController()?.dispose_controls(); // }); // } }