gradientNodePropertyComponent.tsx 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  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 { GeneralPropertyTabComponent } 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.props.globalState.onUpdateRequiredObservable.notifyObservers();
  45. this.forceUpdate();
  46. }
  47. render() {
  48. let gradientBlock = this.props.block as GradientBlock;
  49. return (
  50. <div>
  51. <GeneralPropertyTabComponent globalState={this.props.globalState} block={this.props.block}/>
  52. <LineContainerComponent title="STEPS">
  53. <ButtonLineComponent label="Add new step" onClick={() => this.addNewStep()} />
  54. {
  55. gradientBlock.colorSteps.map((c, i) => {
  56. return (
  57. <GradientStepComponent globalState={this.props.globalState}
  58. onCheckForReOrder={() => this.checkForReOrder()}
  59. onUpdateStep={() => this.forceRebuild()}
  60. key={"step-" + i} lineIndex={i} step={c} onDelete={() => this.deleteStep(c)}/>
  61. )
  62. })
  63. }
  64. </LineContainerComponent>
  65. </div>
  66. );
  67. }
  68. }