1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- import Node, { addNodeClass } from './Node.js';
- import { cond } from '../math/CondNode.js';
- import { ShaderNode, nodeProxy, getCurrentStack, setCurrentStack } from '../shadernode/ShaderNode.js';
- class StackNode extends Node {
- constructor( parent = null ) {
- super();
- this.nodes = [];
- this.outputNode = null;
- this.parent = parent;
- this._currentCond = null;
- this.isStackNode = true;
- }
- getNodeType( builder ) {
- return this.outputNode ? this.outputNode.getNodeType( builder ) : 'void';
- }
- add( node ) {
- this.nodes.push( node );
- return this;
- }
- if( boolNode, method ) {
- const methodNode = new ShaderNode( method );
- this._currentCond = cond( boolNode, methodNode );
- return this.add( this._currentCond );
- }
- elseif( boolNode, method ) {
- const methodNode = new ShaderNode( method );
- const ifNode = cond( boolNode, methodNode );
- this._currentCond.elseNode = ifNode;
- this._currentCond = ifNode;
- return this;
- }
- else( method ) {
- this._currentCond.elseNode = new ShaderNode( method );
- return this;
- }
- build( builder, ...params ) {
- const previousStack = getCurrentStack();
- setCurrentStack( this );
- for ( const node of this.nodes ) {
- node.build( builder, 'void' );
- }
- setCurrentStack( previousStack );
- return this.outputNode ? this.outputNode.build( builder, ...params ) : super.build( builder, ...params );
- }
- }
- export default StackNode;
- export const stack = nodeProxy( StackNode );
- addNodeClass( 'StackNode', StackNode );
|