DataTypeLib.js 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. export const typeToLengthLib = {
  2. // gpu
  3. string: 1,
  4. float: 1,
  5. bool: 1,
  6. vec2: 2,
  7. vec3: 3,
  8. vec4: 4,
  9. color: 3,
  10. mat2: 1,
  11. mat3: 1,
  12. mat4: 1,
  13. // cpu
  14. String: 1,
  15. Number: 1,
  16. Vector2: 2,
  17. Vector3: 3,
  18. Vector4: 4,
  19. Color: 3,
  20. // cpu: other stuff
  21. Material: 1,
  22. Object3D: 1,
  23. CodeNode: 1,
  24. Texture: 1,
  25. URL: 1,
  26. node: 1
  27. };
  28. export const defaultLength = 1;
  29. export function getLengthFromType( type ) {
  30. return typeToLengthLib[ type ] || defaultLength;
  31. }
  32. export function getLengthFromNode( value ) {
  33. const type = getTypeFromNode( value );
  34. return getLengthFromType( type );
  35. }
  36. export const typeToColorLib = {
  37. // gpu
  38. string: '#ff0000',
  39. float: '#eeeeee',
  40. bool: '#0060ff',
  41. mat2: '#d0dc8b',
  42. mat3: '#d0dc8b',
  43. mat4: '#d0dc8b',
  44. // cpu
  45. String: '#ff0000',
  46. Number: '#eeeeee',
  47. // cpu: other stuff
  48. Material: '#228b22',
  49. Object3D: '#00a1ff',
  50. CodeNode: '#ff00ff',
  51. Texture: '#ffa500',
  52. URL: '#ff0080'
  53. };
  54. export function getColorFromType( type ) {
  55. return typeToColorLib[ type ] || null;
  56. }
  57. export function getColorFromNode( value ) {
  58. const type = getTypeFromNode( value );
  59. return getColorFromType( type );
  60. }
  61. function getTypeFromNode( value ) {
  62. if ( value ) {
  63. if ( value.isMaterial ) return 'Material';
  64. return value.nodeType === 'ArrayBuffer' ? 'URL' : ( value.nodeType || getTypeFromValue( value.value ) );
  65. }
  66. }
  67. function getTypeFromValue( value ) {
  68. if ( value && value.isScriptableValueNode ) value = value.value;
  69. if ( ! value ) return;
  70. if ( value.isNode && value.nodeType === 'string' ) return 'string';
  71. if ( value.isNode && value.nodeType === 'ArrayBuffer' ) return 'URL';
  72. for ( const type of Object.keys( typeToLengthLib ).reverse() ) {
  73. if ( value[ 'is' + type ] === true ) return type;
  74. }
  75. }
  76. export function setInputAestheticsFromType( element, type ) {
  77. element.setInput( getLengthFromType( type ) );
  78. const color = getColorFromType( type );
  79. if ( color ) {
  80. element.setInputColor( color );
  81. }
  82. return element;
  83. }
  84. export function setOutputAestheticsFromNode( element, node ) {
  85. if ( ! node ) {
  86. element.setOutput( 0 );
  87. return element;
  88. }
  89. return setOutputAestheticsFromType( element, getTypeFromNode( node ) );
  90. }
  91. export function setOutputAestheticsFromType( element, type ) {
  92. if ( ! type ) {
  93. element.setOutput( 1 );
  94. return element;
  95. }
  96. if ( type == 'void' ) {
  97. element.setOutput( 0 );
  98. return element;
  99. }
  100. element.setOutput( getLengthFromType( type ) );
  101. const color = getColorFromType( type );
  102. if ( color ) {
  103. element.setOutputColor( color );
  104. }
  105. return element;
  106. }