JoinNode.js 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. /**
  2. * @author sunag / http://www.sunag.com.br/
  3. */
  4. import { TempNode } from '../core/TempNode.js';
  5. import { NodeUtils } from '../core/NodeUtils.js';
  6. var inputs = NodeUtils.elements;
  7. function JoinNode( x, y, z, w ) {
  8. TempNode.call( this, 'f' );
  9. this.x = x;
  10. this.y = y;
  11. this.z = z;
  12. this.w = w;
  13. };
  14. JoinNode.prototype = Object.create( TempNode.prototype );
  15. JoinNode.prototype.constructor = JoinNode;
  16. JoinNode.prototype.nodeType = "Join";
  17. JoinNode.prototype.getNumElements = function () {
  18. var i = inputs.length;
  19. while ( i -- ) {
  20. if ( this[ inputs[ i ] ] !== undefined ) {
  21. ++ i;
  22. break;
  23. }
  24. }
  25. return Math.max( i, 2 );
  26. };
  27. JoinNode.prototype.getType = function ( builder ) {
  28. return builder.getTypeFromLength( this.getNumElements() );
  29. };
  30. JoinNode.prototype.generate = function ( builder, output ) {
  31. var type = this.getType( builder ),
  32. length = this.getNumElements(),
  33. outputs = [];
  34. for ( var i = 0; i < length; i ++ ) {
  35. var elm = this[ inputs[ i ] ];
  36. outputs.push( elm ? elm.build( builder, 'f' ) : '0.0' );
  37. }
  38. var code = ( length > 1 ? builder.getConstructorFromLength( length ) : '' ) + '( ' + outputs.join( ', ' ) + ' )';
  39. return builder.format( code, type, output );
  40. };
  41. JoinNode.prototype.copy = function ( source ) {
  42. TempNode.prototype.copy.call( this, source );
  43. for ( var prop in source.inputs ) {
  44. this[ prop ] = source.inputs[ prop ];
  45. }
  46. };
  47. JoinNode.prototype.toJSON = function ( meta ) {
  48. var data = this.getJSONNode( meta );
  49. if ( ! data ) {
  50. data = this.createJSONNode( meta );
  51. data.inputs = {};
  52. var length = this.getNumElements();
  53. for ( var i = 0; i < length; i ++ ) {
  54. var elm = this[ inputs[ i ] ];
  55. if ( elm ) {
  56. data.inputs[ inputs[ i ] ] = elm.toJSON( meta ).uuid;
  57. }
  58. }
  59. }
  60. return data;
  61. };
  62. export { JoinNode };