InputNode.js 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. import { Color, Matrix3, Matrix4, Vector2, Vector3, Vector4 } from 'three';
  2. import Node from './Node.js';
  3. function getValueType( value ) {
  4. if ( typeof value === 'number' ) {
  5. return 'float';
  6. } else if ( typeof value === 'boolean' ) {
  7. return 'bool';
  8. } else if ( value?.isVector2 === true ) {
  9. return 'vec2';
  10. } else if ( value?.isVector3 === true ) {
  11. return 'vec3';
  12. } else if ( value?.isVector4 === true ) {
  13. return 'vec4';
  14. } else if ( value?.isMatrix3 === true ) {
  15. return 'mat3';
  16. } else if ( value?.isMatrix4 === true ) {
  17. return 'mat4';
  18. } else if ( value?.isColor === true ) {
  19. return 'color';
  20. }
  21. return null;
  22. }
  23. function getValueFromType( type ) {
  24. if ( type === 'color' ) {
  25. return new Color();
  26. } else if ( type === 'vec2' ) {
  27. return new Vector2();
  28. } else if ( type === 'vec3' ) {
  29. return new Vector3();
  30. } else if ( type === 'vec4' ) {
  31. return new Vector4();
  32. } else if ( type === 'mat3' ) {
  33. return new Matrix3();
  34. } else if ( type === 'mat4' ) {
  35. return new Matrix4();
  36. }
  37. return null;
  38. }
  39. class InputNode extends Node {
  40. constructor( value, nodeType = null ) {
  41. super( nodeType );
  42. this.value = value;
  43. }
  44. getNodeType( /*builder*/ ) {
  45. if ( this.nodeType === null ) {
  46. return getValueType( this.value );
  47. }
  48. return this.nodeType;
  49. }
  50. getInputType( builder ) {
  51. return this.getNodeType( builder );
  52. }
  53. serialize( data ) {
  54. super.serialize( data );
  55. data.value = this.value?.toArray?.() || this.value;
  56. data.valueType = getValueType( this.value );
  57. data.nodeType = this.nodeType;
  58. }
  59. deserialize( data ) {
  60. super.deserialize( data );
  61. this.nodeType = data.nodeType;
  62. this.value = getValueFromType( data.valueType );
  63. this.value = this.value?.fromArray?.( data.value ) || data.value;
  64. }
  65. generate( /*builder, output*/ ) {
  66. console.warn('Abstract function.');
  67. }
  68. }
  69. InputNode.prototype.isInputNode = true;
  70. export default InputNode;