63 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			63 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
import { addNodeClass } from '../core/Node.js';
 | 
						|
import TempNode from '../core/TempNode.js';
 | 
						|
import { vectorComponents } from '../core/constants.js';
 | 
						|
 | 
						|
class SetNode extends TempNode {
 | 
						|
 | 
						|
	constructor( sourceNode, components, targetNode ) {
 | 
						|
 | 
						|
		super();
 | 
						|
 | 
						|
		this.sourceNode = sourceNode;
 | 
						|
		this.components = components;
 | 
						|
		this.targetNode = targetNode;
 | 
						|
 | 
						|
	}
 | 
						|
 | 
						|
	getNodeType( builder ) {
 | 
						|
 | 
						|
		return this.sourceNode.getNodeType( builder );
 | 
						|
 | 
						|
	}
 | 
						|
 | 
						|
	generate( builder ) {
 | 
						|
 | 
						|
		const { sourceNode, components, targetNode } = this;
 | 
						|
 | 
						|
		const sourceType = this.getNodeType( builder );
 | 
						|
		const targetType = builder.getTypeFromLength( components.length );
 | 
						|
 | 
						|
		const targetSnippet = targetNode.build( builder, targetType );
 | 
						|
		const sourceSnippet = sourceNode.build( builder, sourceType );
 | 
						|
 | 
						|
		const length = builder.getTypeLength( sourceType );
 | 
						|
		const snippetValues = [];
 | 
						|
 | 
						|
		for ( let i = 0; i < length; i ++ ) {
 | 
						|
 | 
						|
			const component = vectorComponents[ i ];
 | 
						|
 | 
						|
			if ( component === components[ 0 ] ) {
 | 
						|
 | 
						|
				snippetValues.push( targetSnippet );
 | 
						|
 | 
						|
				i += components.length - 1;
 | 
						|
 | 
						|
			} else {
 | 
						|
 | 
						|
				snippetValues.push( sourceSnippet + '.' + component );
 | 
						|
 | 
						|
			}
 | 
						|
 | 
						|
		}
 | 
						|
 | 
						|
		return `${ builder.getType( sourceType ) }( ${ snippetValues.join( ', ' ) } )`;
 | 
						|
 | 
						|
	}
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
export default SetNode;
 | 
						|
 | 
						|
addNodeClass( 'SetNode', SetNode );
 |