treeItemSpecializedComponent.tsx 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. import { Camera } from "babylonjs/Cameras/camera";
  2. import { IExplorerExtensibilityGroup } from "babylonjs/Debug/debugLayer";
  3. import { AnimationGroup, TargetedAnimation } from "babylonjs/Animations/animationGroup";
  4. import { Material } from "babylonjs/Materials/material";
  5. import { Texture } from "babylonjs/Materials/Textures/texture";
  6. import { TransformNode } from "babylonjs/Meshes/transformNode";
  7. import { Light } from "babylonjs/Lights/light";
  8. import { AbstractMesh } from "babylonjs/Meshes/abstractMesh";
  9. import { PostProcess } from 'babylonjs/PostProcesses/postProcess';
  10. import { MeshTreeItemComponent } from "./entities/meshTreeItemComponent";
  11. import { CameraTreeItemComponent } from "./entities/cameraTreeItemComponent";
  12. import { LightTreeItemComponent } from "./entities/lightTreeItemComponent";
  13. import { TreeItemLabelComponent } from "./treeItemLabelComponent";
  14. import { faProjectDiagram } from '@fortawesome/free-solid-svg-icons';
  15. import { MaterialTreeItemComponent } from "./entities/materialTreeItemComponent";
  16. import { TextureTreeItemComponent } from "./entities/textureTreeItemComponent";
  17. import { TransformNodeItemComponent } from "./entities/transformNodeTreeItemComponent";
  18. import * as React from "react";
  19. import { ControlTreeItemComponent } from "./entities/gui/controlTreeItemComponent";
  20. import { Control } from "babylonjs-gui/2D/controls/control";
  21. import { AdvancedDynamicTexture } from "babylonjs-gui/2D/advancedDynamicTexture";
  22. import { AdvancedDynamicTextureTreeItemComponent } from "./entities/gui/advancedDynamicTextureTreeItemComponent";
  23. import { AnimationGroupItemComponent } from "./entities/animationGroupTreeItemComponent";
  24. import { GlobalState } from "../globalState";
  25. import { PostProcessItemComponent } from './entities/postProcessTreeItemComponent';
  26. import { RenderingPipelineItemComponent } from './entities/renderingPipelineTreeItemComponent';
  27. import { PostProcessRenderPipeline } from 'babylonjs/PostProcesses/RenderPipeline/postProcessRenderPipeline';
  28. import { SkeletonTreeItemComponent } from './entities/skeletonTreeItemComponent';
  29. import { Skeleton } from 'babylonjs/Bones/skeleton';
  30. import { BoneTreeItemComponent } from './entities/boneTreeItemComponent';
  31. import { Bone } from 'babylonjs/Bones/bone';
  32. import { ParticleSystemTreeItemComponent } from './entities/particleSystemTreeItemComponent';
  33. import { IParticleSystem } from 'babylonjs/Particles/IParticleSystem';
  34. import { SpriteManagerTreeItemComponent } from './entities/spriteManagerTreeItemComponent';
  35. import { SpriteManager } from 'babylonjs/Sprites/spriteManager';
  36. import { SpriteTreeItemComponent } from './entities/spriteTreeItemComponent';
  37. import { Sprite } from 'babylonjs/Sprites/sprite';
  38. import { TargetedAnimationItemComponent } from './entities/targetedAnimationTreeItemComponent';
  39. interface ITreeItemSpecializedComponentProps {
  40. label: string,
  41. entity?: any,
  42. extensibilityGroups?: IExplorerExtensibilityGroup[],
  43. globalState: GlobalState,
  44. onClick?: () => void
  45. }
  46. export class TreeItemSpecializedComponent extends React.Component<ITreeItemSpecializedComponentProps> {
  47. constructor(props: ITreeItemSpecializedComponentProps) {
  48. super(props);
  49. }
  50. onClick() {
  51. if (!this.props.onClick) {
  52. return;
  53. }
  54. this.props.onClick();
  55. }
  56. render() {
  57. const entity = this.props.entity;
  58. if (entity && entity.getClassName) {
  59. const className = entity.getClassName();
  60. if (className.indexOf("Mesh") !== -1) {
  61. const mesh = entity as AbstractMesh;
  62. if (mesh.isAnInstance || mesh.getTotalVertices() > 0) {
  63. return (<MeshTreeItemComponent globalState={this.props.globalState} extensibilityGroups={this.props.extensibilityGroups} mesh={mesh} onClick={() => this.onClick()} />);
  64. } else {
  65. return (<TransformNodeItemComponent extensibilityGroups={this.props.extensibilityGroups} transformNode={entity as TransformNode} onClick={() => this.onClick()} />);
  66. }
  67. }
  68. if (className.indexOf("SpriteManager") !== -1) {
  69. return (<SpriteManagerTreeItemComponent extensibilityGroups={this.props.extensibilityGroups} spriteManager={entity as SpriteManager} onClick={() => this.onClick()} />);
  70. }
  71. if (className.indexOf("Sprite") !== -1) {
  72. return (<SpriteTreeItemComponent extensibilityGroups={this.props.extensibilityGroups} sprite={entity as Sprite} onClick={() => this.onClick()} />);
  73. }
  74. if (className.indexOf("Skeleton") !== -1) {
  75. return (<SkeletonTreeItemComponent extensibilityGroups={this.props.extensibilityGroups} skeleton={entity as Skeleton} onClick={() => this.onClick()} />);
  76. }
  77. if (className.indexOf("Bone") !== -1) {
  78. return (<BoneTreeItemComponent extensibilityGroups={this.props.extensibilityGroups} bone={entity as Bone} onClick={() => this.onClick()} />);
  79. }
  80. if (className.indexOf("TransformNode") !== -1) {
  81. return (<TransformNodeItemComponent extensibilityGroups={this.props.extensibilityGroups} transformNode={entity as TransformNode} onClick={() => this.onClick()} />);
  82. }
  83. if (className.indexOf("Camera") !== -1) {
  84. return (<CameraTreeItemComponent extensibilityGroups={this.props.extensibilityGroups} camera={entity as Camera} onClick={() => this.onClick()} />);
  85. }
  86. if (className.indexOf("Light", className.length - 5) !== -1) {
  87. return (<LightTreeItemComponent globalState={this.props.globalState} extensibilityGroups={this.props.extensibilityGroups} light={entity as Light} onClick={() => this.onClick()} />);
  88. }
  89. if (className.indexOf("Material") !== -1) {
  90. return (<MaterialTreeItemComponent extensibilityGroups={this.props.extensibilityGroups} material={entity as Material} onClick={() => this.onClick()} />);
  91. }
  92. if (className.indexOf("ParticleSystem") !== -1) {
  93. return (<ParticleSystemTreeItemComponent extensibilityGroups={this.props.extensibilityGroups} system={entity as IParticleSystem} onClick={() => this.onClick()} />);
  94. }
  95. if (className === "AdvancedDynamicTexture") {
  96. return (<AdvancedDynamicTextureTreeItemComponent onSelectionChangedObservable={this.props.globalState.onSelectionChangedObservable} extensibilityGroups={this.props.extensibilityGroups} texture={entity as AdvancedDynamicTexture} onClick={() => this.onClick()} />);
  97. }
  98. if (className === "AnimationGroup") {
  99. return (<AnimationGroupItemComponent extensibilityGroups={this.props.extensibilityGroups} animationGroup={entity as AnimationGroup} onClick={() => this.onClick()} />);
  100. }
  101. if (className === "TargetedAnimation") {
  102. return (<TargetedAnimationItemComponent extensibilityGroups={this.props.extensibilityGroups} targetedAnimation={entity as TargetedAnimation} onClick={() => this.onClick()} />);
  103. }
  104. if (className.indexOf("Texture") !== -1) {
  105. return (<TextureTreeItemComponent extensibilityGroups={this.props.extensibilityGroups} texture={entity as Texture} onClick={() => this.onClick()} />);
  106. }
  107. if (className.indexOf("RenderingPipeline") !== -1) {
  108. return (<RenderingPipelineItemComponent extensibilityGroups={this.props.extensibilityGroups} renderPipeline={entity as PostProcessRenderPipeline} onClick={() => this.onClick()} />);
  109. }
  110. if (className.indexOf("PostProcess") !== -1) {
  111. return (<PostProcessItemComponent extensibilityGroups={this.props.extensibilityGroups} postProcess={entity as PostProcess} onClick={() => this.onClick()} />);
  112. }
  113. if (entity._host) {
  114. return (<ControlTreeItemComponent extensibilityGroups={this.props.extensibilityGroups} control={entity as Control} onClick={() => this.onClick()} />);
  115. }
  116. }
  117. return (
  118. <div className="meshTools">
  119. <TreeItemLabelComponent label={entity.name} onClick={() => this.onClick()} icon={faProjectDiagram} color="cornflowerblue" />
  120. </div>
  121. );
  122. }
  123. }