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
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;
|
|
|