commonCameraPropertyGridComponent.tsx 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. import * as React from "react";
  2. import { Camera } from "babylonjs/Cameras/camera";
  3. import { Observable } from "babylonjs/Misc/observable";
  4. import { PropertyChangedEvent } from "../../../../propertyChangedEvent";
  5. import { SliderLineComponent } from "../../../lines/sliderLineComponent";
  6. import { LineContainerComponent } from "../../../lineContainerComponent";
  7. import { FloatLineComponent } from "../../../lines/floatLineComponent";
  8. import { TextLineComponent } from "../../../lines/textLineComponent";
  9. import { OptionsLineComponent } from "../../../lines/optionsLineComponent";
  10. import { LockObject } from "../lockObject";
  11. import { GlobalState } from '../../../../globalState';
  12. import { CustomPropertyGridComponent } from '../customPropertyGridComponent';
  13. import { ButtonLineComponent } from '../../../lines/buttonLineComponent';
  14. import { TextInputLineComponent } from '../../../lines/textInputLineComponent';
  15. import { AnimationGridComponent } from '../animations/animationPropertyGridComponent';
  16. import { HexLineComponent } from '../../../lines/hexLineComponent';
  17. interface ICommonCameraPropertyGridComponentProps {
  18. globalState: GlobalState;
  19. camera: Camera;
  20. lockObject: LockObject;
  21. onPropertyChangedObservable?: Observable<PropertyChangedEvent>;
  22. }
  23. export class CommonCameraPropertyGridComponent extends React.Component<ICommonCameraPropertyGridComponentProps, { mode: number }> {
  24. constructor(props: ICommonCameraPropertyGridComponentProps) {
  25. super(props);
  26. this.state = { mode: this.props.camera.mode };
  27. }
  28. render() {
  29. const camera = this.props.camera;
  30. var modeOptions = [
  31. { label: "Perspective", value: Camera.PERSPECTIVE_CAMERA },
  32. { label: "Orthographic", value: Camera.ORTHOGRAPHIC_CAMERA }
  33. ];
  34. return (
  35. <div>
  36. <CustomPropertyGridComponent globalState={this.props.globalState} target={camera}
  37. lockObject={this.props.lockObject}
  38. onPropertyChangedObservable={this.props.onPropertyChangedObservable} />
  39. <LineContainerComponent globalState={this.props.globalState} title="GENERAL">
  40. <TextLineComponent label="ID" value={camera.id} />
  41. <TextInputLineComponent lockObject={this.props.lockObject} label="Name" target={camera} propertyName="name" onPropertyChangedObservable={this.props.onPropertyChangedObservable}/>
  42. <TextLineComponent label="Unique ID" value={camera.uniqueId.toString()} />
  43. <TextLineComponent label="Class" value={camera.getClassName()} />
  44. <FloatLineComponent lockObject={this.props.lockObject} label="Near plane" target={camera} propertyName="minZ" onPropertyChangedObservable={this.props.onPropertyChangedObservable} />
  45. <FloatLineComponent lockObject={this.props.lockObject} label="Far plane" target={camera} propertyName="maxZ" onPropertyChangedObservable={this.props.onPropertyChangedObservable} />
  46. <SliderLineComponent label="Inertia" target={camera} propertyName="inertia" minimum={0} maximum={1} step={0.01} onPropertyChangedObservable={this.props.onPropertyChangedObservable} />
  47. <HexLineComponent isInteger lockObject={this.props.lockObject} label="Layer mask" target={camera} propertyName="layerMask" onPropertyChangedObservable={this.props.onPropertyChangedObservable} />
  48. <OptionsLineComponent label="Mode" options={modeOptions} target={camera} propertyName="mode" onPropertyChangedObservable={this.props.onPropertyChangedObservable} onSelect={(value) => this.setState({ mode: value })} />
  49. {
  50. camera.mode === Camera.PERSPECTIVE_CAMERA &&
  51. <SliderLineComponent label="Field of view" target={camera} useEuler={this.props.globalState.onlyUseEulers} propertyName="fov" minimum={0.1} maximum={Math.PI} step={0.1} onPropertyChangedObservable={this.props.onPropertyChangedObservable} />
  52. }
  53. {
  54. camera.mode === Camera.ORTHOGRAPHIC_CAMERA &&
  55. <FloatLineComponent lockObject={this.props.lockObject} label="Left" target={camera} propertyName="orthoLeft" onPropertyChangedObservable={this.props.onPropertyChangedObservable} />
  56. }
  57. {
  58. camera.mode === Camera.ORTHOGRAPHIC_CAMERA &&
  59. <FloatLineComponent lockObject={this.props.lockObject} label="Top" target={camera} propertyName="orthoTop" onPropertyChangedObservable={this.props.onPropertyChangedObservable} />
  60. }
  61. {
  62. camera.mode === Camera.ORTHOGRAPHIC_CAMERA &&
  63. <FloatLineComponent lockObject={this.props.lockObject} label="Right" target={camera} propertyName="orthoRight" onPropertyChangedObservable={this.props.onPropertyChangedObservable} />
  64. }
  65. {
  66. camera.mode === Camera.ORTHOGRAPHIC_CAMERA &&
  67. <FloatLineComponent lockObject={this.props.lockObject} label="Bottom" target={camera} propertyName="orthoBottom" onPropertyChangedObservable={this.props.onPropertyChangedObservable} />
  68. }
  69. <ButtonLineComponent label="Dispose" onClick={() => {
  70. camera.dispose();
  71. this.props.globalState.onSelectionChangedObservable.notifyObservers(null);
  72. }} />
  73. </LineContainerComponent>
  74. <AnimationGridComponent globalState={this.props.globalState} animatable={camera} scene={camera.getScene()} lockObject={this.props.lockObject} />
  75. </div>
  76. );
  77. }
  78. }