InspectorFrame.ts 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205
  1. //
  2. // Copyright (c) 2014-2015, THUNDERBEAST GAMES LLC All rights reserved
  3. // LICENSE: Atomic Game Engine Editor and Tools EULA
  4. // Please see LICENSE_ATOMIC_EDITOR_AND_TOOLS.md in repository root for
  5. // license information: https://github.com/AtomicGameEngine/AtomicGameEngine
  6. //
  7. import EditorEvents = require("editor/EditorEvents");
  8. import ScriptWidget = require("ui/ScriptWidget");
  9. // inspectors
  10. import MaterialInspector = require("./MaterialInspector");
  11. import ModelInspector = require("./ModelInspector");
  12. import AssemblyInspector = require("./AssemblyInspector");
  13. import PrefabInspector = require("./PrefabInspector");
  14. import SelectionInspector = require("./SelectionInspector");
  15. // make sure these are hooked in
  16. import "./SelectionEditTypes";
  17. import "./SelectionSectionCoreUI";
  18. class InspectorFrame extends ScriptWidget {
  19. scene: Atomic.Scene = null;
  20. sceneEditor: Editor.SceneEditor3D;
  21. selectionInspector: SelectionInspector;
  22. constructor() {
  23. super();
  24. this.gravity = Atomic.UI_GRAVITY_TOP_BOTTOM;
  25. this.load("AtomicEditor/editor/ui/inspectorframe.tb.txt");
  26. var container = this.getWidget("inspectorcontainer");
  27. this.subscribeToEvent(EditorEvents.EditResource, (data) => this.handleEditResource(data));
  28. this.subscribeToEvent("ProjectUnloaded", (data) => this.handleProjectUnloaded(data));
  29. this.subscribeToEvent(EditorEvents.ActiveSceneEditorChange, (data) => this.handleActiveSceneEditorChanged(data));
  30. }
  31. handleActiveSceneEditorChanged(event: EditorEvents.ActiveSceneEditorChangeEvent) {
  32. if (this.sceneEditor == event.sceneEditor) {
  33. return;
  34. }
  35. if (this.scene)
  36. this.unsubscribeFromEvents(this.scene);
  37. this.closeSelectionInspector();
  38. this.sceneEditor = null;
  39. this.scene = null;
  40. if (!event.sceneEditor)
  41. return;
  42. this.sceneEditor = event.sceneEditor;
  43. this.scene = event.sceneEditor.scene;
  44. if (this.scene) {
  45. this.subscribeToEvent(this.scene, "SceneNodeSelected", (event: Editor.SceneNodeSelectedEvent) => this.handleSceneNodeSelected(event));
  46. // add the current selection
  47. var selection = this.sceneEditor.selection;
  48. for (var i = 0; i < selection.getSelectedNodeCount(); i++) {
  49. this.handleSceneNodeSelected( { node: selection.getSelectedNode(i), scene: this.scene, selected: true, quiet: true} );
  50. }
  51. }
  52. }
  53. closeSelectionInspector() {
  54. if (!this.selectionInspector)
  55. return;
  56. var container = this.getWidget("inspectorcontainer");
  57. container.deleteAllChildren();
  58. this.selectionInspector = null;
  59. }
  60. handleSceneNodeSelected(ev: Editor.SceneNodeSelectedEvent) {
  61. var selection = this.sceneEditor.selection;
  62. if (this.selectionInspector) {
  63. if (ev.selected) {
  64. this.selectionInspector.addNode(ev.node);
  65. } else {
  66. this.selectionInspector.removeNode(ev.node);
  67. }
  68. } else if (ev.selected) {
  69. var container = this.getWidget("inspectorcontainer");
  70. container.deleteAllChildren();
  71. var inspector = this.selectionInspector = new SelectionInspector(this.sceneEditor);
  72. inspector.addNode(ev.node);
  73. container.addChild(inspector);
  74. }
  75. // close last, so state is saved
  76. if (!selection.selectedNodeCount) {
  77. this.closeSelectionInspector();
  78. }
  79. }
  80. handleProjectUnloaded(data) {
  81. this.closeSelectionInspector();
  82. var container = this.getWidget("inspectorcontainer");
  83. container.deleteAllChildren();
  84. }
  85. handleEditResource(ev: EditorEvents.EditResourceEvent) {
  86. var path = ev.path;
  87. var db = ToolCore.getAssetDatabase();
  88. var asset = db.getAssetByPath(path);
  89. if (asset) {
  90. this.inspectAsset(asset);
  91. }
  92. }
  93. inspectAsset(asset: ToolCore.Asset) {
  94. this.closeSelectionInspector();
  95. var container = this.getWidget("inspectorcontainer");
  96. container.deleteAllChildren();
  97. if (asset.importerTypeName == "ModelImporter") {
  98. var inspector = new ModelInspector();
  99. container.addChild(inspector);
  100. inspector.inspect(asset);
  101. }
  102. if (asset.importerTypeName == "MaterialImporter") {
  103. var cache = Atomic.getResourceCache();
  104. var material = <Atomic.Material>cache.getResource("Material", asset.path);
  105. if (!material) {
  106. return;
  107. }
  108. var materialInspector = new MaterialInspector();
  109. container.addChild(materialInspector);
  110. materialInspector.inspect(asset, material);
  111. }
  112. if (asset.importerTypeName == "NETAssemblyImporter") {
  113. var assemblyInspector = new AssemblyInspector();
  114. container.addChild(assemblyInspector);
  115. assemblyInspector.inspect(asset);
  116. }
  117. if (asset.importerTypeName == "PrefabImporter") {
  118. var prefabInspector = new PrefabInspector();
  119. container.addChild(prefabInspector);
  120. prefabInspector.inspect(asset);
  121. }
  122. }
  123. }
  124. export = InspectorFrame;