InspectorFrame.ts 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194
  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. import DataBinding = require("./DataBinding");
  10. // inspectors
  11. import MaterialInspector = require("./MaterialInspector");
  12. import ModelInspector = require("./ModelInspector");
  13. import NodeInspector = require("./NodeInspector");
  14. import AssemblyInspector = require("./AssemblyInspector");
  15. import PrefabInspector = require("./PrefabInspector");
  16. class InspectorFrame extends ScriptWidget {
  17. nodeInspector: NodeInspector;
  18. scene: Atomic.Scene = null;
  19. sceneEditor: Editor.SceneEditor3D;
  20. constructor() {
  21. super();
  22. this.gravity = Atomic.UI_GRAVITY_TOP_BOTTOM;
  23. this.load("AtomicEditor/editor/ui/inspectorframe.tb.txt");
  24. var container = this.getWidget("inspectorcontainer");
  25. this.subscribeToEvent(EditorEvents.EditResource, (data) => this.handleEditResource(data));
  26. this.subscribeToEvent("ProjectUnloaded", (data) => this.handleProjectUnloaded(data));
  27. this.subscribeToEvent("NodeRemoved", (ev: Atomic.NodeRemovedEvent) => this.handleNodeRemoved(ev));
  28. this.subscribeToEvent(EditorEvents.ActiveSceneEditorChange, (data) => this.handleActiveSceneEditorChanged(data));
  29. }
  30. handleActiveSceneEditorChanged(event: EditorEvents.ActiveSceneEditorChangeEvent) {
  31. if (this.scene)
  32. this.unsubscribeFromEvents(this.scene);
  33. this.sceneEditor = null;
  34. this.scene = null;
  35. if (!event.sceneEditor)
  36. return;
  37. this.sceneEditor = event.sceneEditor;
  38. this.scene = event.sceneEditor.scene;
  39. if (this.scene) {
  40. this.subscribeToEvent(this.scene, "SceneNodeSelected", (event: Editor.SceneNodeSelectedEvent) => this.handleSceneNodeSelected(event));
  41. }
  42. }
  43. handleSceneNodeSelected(ev: Editor.SceneNodeSelectedEvent) {
  44. var selection = this.sceneEditor.selection;
  45. if (selection.selectedNodeCount == 1) {
  46. this.inspectNode(selection.getSelectedNode(0));
  47. } else {
  48. this.closeNodeInspector();
  49. }
  50. return;
  51. }
  52. handleProjectUnloaded(data) {
  53. this.closeNodeInspector();
  54. var container = this.getWidget("inspectorcontainer");
  55. container.deleteAllChildren();
  56. }
  57. handleEditResource(ev: EditorEvents.EditResourceEvent) {
  58. var path = ev.path;
  59. var db = ToolCore.getAssetDatabase();
  60. var asset = db.getAssetByPath(path);
  61. if (asset) {
  62. this.inspectAsset(asset);
  63. }
  64. }
  65. closeNodeInspector() {
  66. if (this.nodeInspector) {
  67. this.nodeInspector.saveState();
  68. var container = this.getWidget("inspectorcontainer");
  69. container.deleteAllChildren();
  70. this.nodeInspector = null;
  71. }
  72. }
  73. inspectAsset(asset: ToolCore.Asset) {
  74. var container = this.getWidget("inspectorcontainer");
  75. container.deleteAllChildren();
  76. if (asset.importerTypeName == "ModelImporter") {
  77. var inspector = new ModelInspector();
  78. container.addChild(inspector);
  79. inspector.inspect(asset);
  80. }
  81. if (asset.importerTypeName == "MaterialImporter") {
  82. var cache = Atomic.getResourceCache();
  83. var material = <Atomic.Material>cache.getResource("Material", asset.path);
  84. if (!material) {
  85. return;
  86. }
  87. var materialInspector = new MaterialInspector();
  88. container.addChild(materialInspector);
  89. materialInspector.inspect(asset, material);
  90. }
  91. if (asset.importerTypeName == "NETAssemblyImporter") {
  92. var assemblyInspector = new AssemblyInspector();
  93. container.addChild(assemblyInspector);
  94. assemblyInspector.inspect(asset);
  95. }
  96. if (asset.importerTypeName == "PrefabImporter") {
  97. var prefabInspector = new PrefabInspector();
  98. container.addChild(prefabInspector);
  99. prefabInspector.inspect(asset);
  100. }
  101. }
  102. handleNodeRemoved(ev: Atomic.NodeRemovedEvent) {
  103. if (this.nodeInspector && this.nodeInspector.node != ev.node)
  104. return;
  105. this.closeNodeInspector();
  106. }
  107. inspectNode(node: Atomic.Node) {
  108. if (!node) return;
  109. this.closeNodeInspector();
  110. var container = this.getWidget("inspectorcontainer");
  111. container.deleteAllChildren();
  112. var inspector = new NodeInspector();
  113. container.addChild(inspector);
  114. inspector.inspect(node);
  115. this.nodeInspector = inspector;
  116. }
  117. }
  118. export = InspectorFrame;