60 lines
		
	
	
		
			918 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			60 lines
		
	
	
		
			918 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 
								 | 
							
								import { MaterialLoader } from 'three';
							 | 
						||
| 
								 | 
							
								import { createNodeMaterialFromType } from '../materials/Materials.js';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								const superFromTypeFunction = MaterialLoader.createMaterialFromType;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								MaterialLoader.createMaterialFromType = function ( type ) {
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									const material = createNodeMaterialFromType( type );
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									if ( material !== undefined ) {
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										return material;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									return superFromTypeFunction.call( this, type );
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class NodeMaterialLoader extends MaterialLoader {
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									constructor( manager ) {
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										super( manager );
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										this.nodes = {};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									parse( json ) {
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										const material = super.parse( json );
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										const nodes = this.nodes;
							 | 
						||
| 
								 | 
							
										const inputNodes = json.inputNodes;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										for ( const property in inputNodes ) {
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
											const uuid = inputNodes[ property ];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
											material[ property ] = nodes[ uuid ];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										return material;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									setNodes( value ) {
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										this.nodes = value;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										return this;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								export default NodeMaterialLoader;
							 |