textureNodeWidget.tsx 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. import * as React from "react";
  2. import { TextureNodeModel } from './textureNodeModel';
  3. import { TextureLineComponent } from "../../../sharedComponents/textureLineComponent"
  4. import { Nullable } from 'babylonjs/types';
  5. import { GlobalState } from '../../../globalState';
  6. import { PortHelper } from '../portHelper';
  7. /**
  8. * GenericNodeWidgetProps
  9. */
  10. export interface ITextureNodeWidgetProps {
  11. node: Nullable<TextureNodeModel>;
  12. globalState: GlobalState;
  13. }
  14. /**
  15. * Used to display a node block for the node editor
  16. */
  17. export class TextureNodeWidget extends React.Component<ITextureNodeWidgetProps> {
  18. /**
  19. * Creates a GenericNodeWidget
  20. * @param props
  21. */
  22. constructor(props: ITextureNodeWidgetProps) {
  23. super(props);
  24. this.state = {};
  25. if (this.props.node) {
  26. this.props.node.addListener({
  27. selectionChanged: () => {
  28. let selected = (this.props.node as any).selected;
  29. this.props.globalState.onSelectionChangedObservable.notifyObservers(selected ? this.props.node : null);
  30. }
  31. });
  32. }
  33. }
  34. render() {
  35. // Input/Output ports
  36. var outputPorts = PortHelper.GenerateOutputPorts(this.props.node, false);
  37. var inputPorts = PortHelper.GenerateInputPorts(this.props.node, ["uv"]);
  38. return (
  39. <div className={"diagramBlock"}>
  40. <div className="header">
  41. {this.props.node!.block!.name}
  42. </div>
  43. <div className="inputs">
  44. {inputPorts}
  45. </div>
  46. <div className="outputs">
  47. {outputPorts}
  48. </div>
  49. {
  50. this.props.node && this.props.node.texture &&
  51. <TextureLineComponent ref="textureView" width={200} height={180} texture={this.props.node.texture} hideChannelSelect={true} />
  52. }
  53. </div>
  54. );
  55. }
  56. }