gradientNodePropertyComponent.tsx 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. import * as React from "react";
  2. import { LineContainerComponent } from '../../sharedComponents/lineContainerComponent';
  3. import { GradientBlockColorStep, GradientBlock } from 'babylonjs/Materials/Node/Blocks/gradientBlock';
  4. import { GradientStepComponent } from './gradientStepComponent';
  5. import { ButtonLineComponent } from '../../sharedComponents/buttonLineComponent';
  6. import { Color3 } from 'babylonjs/Maths/math.color';
  7. import { IPropertyComponentProps } from './propertyComponentProps';
  8. import { GenericPropertyTabComponent } from './genericNodePropertyComponent';
  9. export class GradientPropertyTabComponent extends React.Component<IPropertyComponentProps> {
  10. constructor(props: IPropertyComponentProps) {
  11. super(props)
  12. }
  13. forceRebuild() {
  14. this.props.globalState.onUpdateRequiredObservable.notifyObservers();
  15. this.props.globalState.onRebuildRequiredObservable.notifyObservers();
  16. }
  17. deleteStep(step: GradientBlockColorStep) {
  18. let gradientBlock = this.props.block as GradientBlock;
  19. let index = gradientBlock.colorSteps.indexOf(step);
  20. if (index > -1) {
  21. gradientBlock.colorSteps.splice(index, 1);
  22. this.forceRebuild();
  23. this.forceUpdate();
  24. }
  25. }
  26. addNewStep() {
  27. let gradientBlock = this.props.block as GradientBlock;
  28. let newStep = new GradientBlockColorStep(1.0, Color3.White());
  29. gradientBlock.colorSteps.push(newStep);
  30. this.forceRebuild();
  31. this.forceUpdate();
  32. }
  33. checkForReOrder() {
  34. let gradientBlock = this.props.block as GradientBlock;
  35. gradientBlock.colorSteps.sort((a, b) => {
  36. if (a.step === b.step) {
  37. return 0;
  38. }
  39. if (a.step > b.step) {
  40. return 1;
  41. }
  42. return -1;
  43. });
  44. this.forceUpdate();
  45. }
  46. render() {
  47. let gradientBlock = this.props.block as GradientBlock;
  48. return (
  49. <div>
  50. <GenericPropertyTabComponent globalState={this.props.globalState} block={this.props.block}/>
  51. <LineContainerComponent title="STEPS">
  52. <ButtonLineComponent label="Add new step" onClick={() => this.addNewStep()} />
  53. {
  54. gradientBlock.colorSteps.map((c, i) => {
  55. return (
  56. <GradientStepComponent globalState={this.props.globalState}
  57. onCheckForReOrder={() => this.checkForReOrder()}
  58. onUpdateStep={() => this.forceRebuild()}
  59. key={"step-" + i} lineIndex={i} step={c} onDelete={() => this.deleteStep(c)}/>
  60. )
  61. })
  62. }
  63. </LineContainerComponent>
  64. </div>
  65. );
  66. }
  67. }