three 基础库
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

91 lines
1.6 KiB

import Node from '../core/Node.js';
import FloatNode from '../inputs/FloatNode.js';
import Vector2Node from '../inputs/Vector2Node.js';
import Vector3Node from '../inputs/Vector3Node.js';
import Vector4Node from '../inputs/Vector4Node.js';
import ColorNode from '../inputs/ColorNode.js';
import TextureNode from '../inputs/TextureNode.js';
import { NodeUpdateType } from '../core/constants.js';
class ReferenceNode extends Node {
constructor( property, inputType, object = null ) {
super();
this.property = property;
this.inputType = inputType;
this.object = object;
this.node = null;
this.updateType = NodeUpdateType.Object;
this.setNodeType( inputType );
}
setNodeType( inputType ) {
let node = null;
let type = inputType;
if ( type === 'float' ) {
node = new FloatNode();
} else if ( type === 'vec2' ) {
node = new Vector2Node( null );
} else if ( type === 'vec3' ) {
node = new Vector3Node( null );
} else if ( type === 'vec4' ) {
node = new Vector4Node( null );
} else if ( type === 'color' ) {
node = new ColorNode( null );
type = 'vec3';
} else if ( type === 'texture' ) {
node = new TextureNode();
type = 'vec4';
}
this.node = node;
this.type = type;
this.inputType = inputType;
}
getNodeType() {
return this.inputType;
}
update( frame ) {
const object = this.object !== null ? this.object : frame.object;
const value = object[ this.property ];
this.node.value = value;
}
generate( builder, output ) {
return this.node.build( builder, output );
}
}
export default ReferenceNode;