@polygonjs/polygonjs
Version:
node-based WebGL 3D engine https://polygonjs.com
83 lines (77 loc) • 2.5 kB
text/typescript
/**
* 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();
// });
// }
}