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