Browse Source

Handle node removed in scene editor and view to clear gizmo and other selection renderers

Josh Engebretson 10 years ago
parent
commit
2c9abb949b

+ 5 - 0
Source/AtomicEditor/Editors/SceneEditor3D/Gizmo3D.cpp

@@ -41,6 +41,11 @@ Gizmo3D::Gizmo3D(Context* context) : Object(context)
 
     editMode_ = EDIT_MOVE;
     lastEditMode_ = EDIT_SELECT;
+
+    gizmo_->SetMaterial(0, cache->GetResource<Material>("AtomicEditor/Materials/RedUnlit.xml"));
+    gizmo_->SetMaterial(1, cache->GetResource<Material>("AtomicEditor/Materials/GreenUnlit.xml"));
+    gizmo_->SetMaterial(2, cache->GetResource<Material>("AtomicEditor/Materials/BlueUnlit.xml"));
+
 }
 
 Gizmo3D::~Gizmo3D()

+ 17 - 0
Source/AtomicEditor/Editors/SceneEditor3D/SceneEditor3D.cpp

@@ -7,6 +7,7 @@
 
 #include <Atomic/IO/Log.h>
 #include <Atomic/Core/CoreEvents.h>
+#include <Atomic/Scene/SceneEvents.h>
 #include <Atomic/Scene/Scene.h>
 #include <Atomic/Graphics/Camera.h>
 
@@ -93,6 +94,8 @@ SceneEditor3D ::SceneEditor3D(Context* context, const String &fullpath, UITabCon
     SubscribeToEvent(E_EDITORPLAYSTARTED, HANDLER(SceneEditor3D, HandlePlayStarted));
     SubscribeToEvent(E_EDITORPLAYSTOPPED, HANDLER(SceneEditor3D, HandlePlayStopped));
 
+    SubscribeToEvent(scene_, E_NODEREMOVED, HANDLER(SceneEditor3D, HandleNodeRemoved));
+
 }
 
 SceneEditor3D::~SceneEditor3D()
@@ -173,8 +176,22 @@ void SceneEditor3D::SetFocus()
 void SceneEditor3D::SelectNode(Node* node)
 {
     selectedNode_ = node;
+    if (!node)
+        gizmo3D_->Hide();
+    else
+        gizmo3D_->Show();
+
+
 }
 
+void SceneEditor3D::HandleNodeRemoved(StringHash eventType, VariantMap& eventData)
+{
+    Node* node = (Node*) (eventData[NodeRemoved::P_NODE].GetPtr());
+    if (node == selectedNode_)
+        SelectNode(0);
+}
+
+
 void SceneEditor3D::HandleUpdate(StringHash eventType, VariantMap& eventData)
 {
     Vector<Node*> editNodes;

+ 1 - 0
Source/AtomicEditor/Editors/SceneEditor3D/SceneEditor3D.h

@@ -61,6 +61,7 @@ private:
     void HandlePlayStarted(StringHash eventType, VariantMap& eventData);
     void HandlePlayStopped(StringHash eventType, VariantMap& eventData);
     void HandleGizmoEditModeChanged(StringHash eventType, VariantMap& eventData);
+    void HandleNodeRemoved(StringHash eventType, VariantMap& eventData);
 
     SharedPtr<Scene> scene_;
 

+ 10 - 0
Source/AtomicEditor/Editors/SceneEditor3D/SceneView3D.cpp

@@ -9,6 +9,7 @@
 
 #include <Atomic/IO/Log.h>
 #include <Atomic/Core/CoreEvents.h>
+#include <Atomic/Scene/SceneEvents.h>
 #include <Atomic/Scene/Scene.h>
 #include <Atomic/Scene/PrefabComponent.h>
 #include <Atomic/Graphics/Camera.h>
@@ -97,6 +98,8 @@ SceneView3D ::SceneView3D(Context* context, SceneEditor3D *sceneEditor) :
     SubscribeToEvent(E_EDITORACTIVENODECHANGE, HANDLER(SceneView3D, HandleEditorActiveNodeChange));
     SubscribeToEvent(E_POSTRENDERUPDATE, HANDLER(SceneView3D, HandlePostRenderUpdate));
 
+    SubscribeToEvent(scene_, E_NODEREMOVED, HANDLER(SceneView3D, HandleNodeRemoved));
+
     SubscribeToEvent(E_MOUSEMOVE, HANDLER(SceneView3D,HandleMouseMove));
 
     SubscribeToEvent(this, E_DRAGENTERWIDGET, HANDLER(SceneView3D, HandleDragEnterWidget));
@@ -426,6 +429,13 @@ void SceneView3D::HandleEditorActiveNodeChange(StringHash eventType, VariantMap&
     SelectNode(node);
 }
 
+void SceneView3D::HandleNodeRemoved(StringHash eventType, VariantMap& eventData)
+{
+    Node* node = (Node*) (eventData[NodeRemoved::P_NODE].GetPtr());
+    if (node == selectedNode_)
+        SelectNode(0);
+}
+
 void SceneView3D::UpdateDragNode(int mouseX, int mouseY)
 {
     if (dragNode_.Null())

+ 1 - 0
Source/AtomicEditor/Editors/SceneEditor3D/SceneView3D.h

@@ -65,6 +65,7 @@ private:
     void HandleUpdate(StringHash eventType, VariantMap& eventData);
     void HandlePostRenderUpdate(StringHash eventType, VariantMap& eventData);
     void HandleEditorActiveNodeChange(StringHash eventType, VariantMap& eventData);
+    void HandleNodeRemoved(StringHash eventType, VariantMap& eventData);
 
     void DrawNodeDebug(Node* node, DebugRenderer* debug, bool drawNode = true);