UNPKG

@polygonjs/polygonjs

Version:

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

69 lines (62 loc) 2.3 kB
/** * sends a trigger from a button param * * */ import {TRIGGER_CONNECTION_NAME, TypedJsNode} from './_Base'; import {NodeParamsConfig, ParamConfig} from '../utils/params/ParamsConfig'; import {JsConnectionPoint, JsConnectionPointType} from '../utils/io/connections/Js'; import {BaseNodeType} from '../_Base'; import {JsType} from '../../poly/registers/nodes/types/Js'; import {ActorBuilderNode} from '../../scene/utils/ActorsManager'; import {ActorSopNode} from '../sop/Actor'; import {JsLinesCollectionController} from './code/utils/JsLinesCollectionController'; import {nodeMethodName} from './code/assemblers/actor/ActorAssemblerUtils'; import {EvaluatorMethodName} from './code/assemblers/actor/ActorEvaluator'; class OnManualTriggerJsParamsConfig extends NodeParamsConfig { trigger = ParamConfig.BUTTON(null, { cook: false, callback: (node: BaseNodeType) => { OnManualTriggerJsNode.PARAM_CALLBACK_sendTrigger(node as OnManualTriggerJsNode); }, }); } const ParamsConfig = new OnManualTriggerJsParamsConfig(); export class OnManualTriggerJsNode extends TypedJsNode<OnManualTriggerJsParamsConfig> { override readonly paramsConfig = ParamsConfig; static override type() { return JsType.ON_MANUAL_TRIGGER; } override isTriggering() { return true; } override initializeNode() { this.io.outputs.setNamedOutputConnectionPoints([ new JsConnectionPoint(TRIGGER_CONNECTION_NAME, JsConnectionPointType.TRIGGER), ]); } static PARAM_CALLBACK_sendTrigger(node: OnManualTriggerJsNode) { node._triggerWithNode(); } override setTriggeringLines( shadersCollectionController: JsLinesCollectionController, triggeredMethods: string ): void { shadersCollectionController.addTriggeringLines(this, [triggeredMethods], { gatherable: false, triggeringMethodName: nodeMethodName(this) as EvaluatorMethodName, }); } private _triggerWithNode() { const functionNode = this.functionNode(); if (!functionNode) { console.warn('no function node found'); return; } const actorNode = functionNode as ActorSopNode as ActorBuilderNode; if (!actorNode.compilationController.evaluatorGenerator()) { console.warn('no evaluator found'); } this.scene().actorsManager.manualTriggerController.runTriggerFromFunctionNode(actorNode, nodeMethodName(this)); } }