|
@@ -15,21 +15,21 @@ class MemberNode extends Node {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
- * Constructs an array element node.
|
|
|
|
|
|
|
+ * Constructs a member node.
|
|
|
*
|
|
*
|
|
|
- * @param {Node} node - The array-like node.
|
|
|
|
|
|
|
+ * @param {Node} structNode - The struct node.
|
|
|
* @param {string} property - The property name.
|
|
* @param {string} property - The property name.
|
|
|
*/
|
|
*/
|
|
|
- constructor( node, property ) {
|
|
|
|
|
|
|
+ constructor( structNode, property ) {
|
|
|
|
|
|
|
|
super();
|
|
super();
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
- * The array-like node.
|
|
|
|
|
|
|
+ * The struct node.
|
|
|
*
|
|
*
|
|
|
* @type {Node}
|
|
* @type {Node}
|
|
|
*/
|
|
*/
|
|
|
- this.node = node;
|
|
|
|
|
|
|
+ this.structNode = structNode;
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
* The property name.
|
|
* The property name.
|
|
@@ -49,15 +49,66 @@ class MemberNode extends Node {
|
|
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ hasMember( builder ) {
|
|
|
|
|
+
|
|
|
|
|
+ if ( this.structNode.isMemberNode ) {
|
|
|
|
|
+
|
|
|
|
|
+ if ( this.structNode.hasMember( builder ) === false ) {
|
|
|
|
|
+
|
|
|
|
|
+ return false;
|
|
|
|
|
+
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ return this.structNode.getMemberType( builder, this.property ) !== 'void';
|
|
|
|
|
+
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
getNodeType( builder ) {
|
|
getNodeType( builder ) {
|
|
|
|
|
|
|
|
- return this.node.getMemberType( builder, this.property );
|
|
|
|
|
|
|
+ if ( this.hasMember( builder ) === false ) {
|
|
|
|
|
+
|
|
|
|
|
+ // default type if member does not exist
|
|
|
|
|
+
|
|
|
|
|
+ return 'float';
|
|
|
|
|
+
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ return this.structNode.getMemberType( builder, this.property );
|
|
|
|
|
+
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ getMemberType( builder, name ) {
|
|
|
|
|
+
|
|
|
|
|
+ if ( this.hasMember( builder ) === false ) {
|
|
|
|
|
+
|
|
|
|
|
+ // default type if member does not exist
|
|
|
|
|
+
|
|
|
|
|
+ return 'float';
|
|
|
|
|
+
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ const type = this.getNodeType( builder );
|
|
|
|
|
+ const struct = builder.getStructTypeNode( type );
|
|
|
|
|
+
|
|
|
|
|
+ return struct.getMemberType( builder, name );
|
|
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
generate( builder ) {
|
|
generate( builder ) {
|
|
|
|
|
|
|
|
- const propertyName = this.node.build( builder );
|
|
|
|
|
|
|
+ if ( this.hasMember( builder ) === false ) {
|
|
|
|
|
+
|
|
|
|
|
+ console.warn( `THREE.TSL: Member "${ this.property }" does not exist in struct.` );
|
|
|
|
|
+
|
|
|
|
|
+ const type = this.getNodeType( builder );
|
|
|
|
|
+
|
|
|
|
|
+ return builder.generateConst( type );
|
|
|
|
|
+
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ const propertyName = this.structNode.build( builder );
|
|
|
|
|
|
|
|
return propertyName + '.' + this.property;
|
|
return propertyName + '.' + this.property;
|
|
|
|
|
|