Przeglądaj źródła

Adding gizmo mode

Josh Engebretson 10 lat temu
rodzic
commit
7c611a2e74

+ 8 - 0
Data/AtomicEditor/Resources/EditorData/AtomicEditor/typescript/ui/MainToolbar.ts

@@ -20,6 +20,14 @@ class MainToolbar extends Atomic.UIWidget {
 
             if (ev.target.id == "3d_translate" || ev.target.id == "3d_rotate" || ev.target.id == "3d_scale") {
 
+                var mode = 1;
+                if (ev.target.id == "3d_rotate" )
+                  mode = 2;
+                else if (ev.target.id == "3d_scale")
+                  mode = 3;
+
+                  this.sendEvent("GizmoEditModeChanged", {mode:mode});
+
                 return true;
 
             } else if (ev.target.id == "maintoolbar_play") {

+ 9 - 0
Source/AtomicEditorWork/Editors/SceneEditor3D/SceneEditor3D.cpp

@@ -27,6 +27,7 @@
 #include <ToolCore/Assets/Asset.h>
 
 #include "SceneEditor3D.h"
+#include "SceneEditor3DEvents.h"
 
 using namespace ToolCore;
 
@@ -81,6 +82,8 @@ SceneEditor3D ::SceneEditor3D(Context* context, const String &fullpath, UITabCon
     SubscribeToEvent(E_UPDATE, HANDLER(SceneEditor3D, HandleUpdate));
     SubscribeToEvent(E_EDITORACTIVENODECHANGE, HANDLER(SceneEditor3D, HandleEditorActiveNodeChange));
 
+    SubscribeToEvent(E_GIZMOEDITMODECHANGED, HANDLER(SceneEditor3D, HandleGizmoEditModeChanged));
+
     // FIXME: Set the size at the end of setup, so all children are updated accordingly
     // future size changes will be handled automatically
     IntRect rect = container_->GetContentRoot()->GetRect();
@@ -182,6 +185,12 @@ void SceneEditor3D::HandlePlayStopped(StringHash eventType, VariantMap& eventDat
     sceneView_->Enable();
 }
 
+void SceneEditor3D::HandleGizmoEditModeChanged(StringHash eventType, VariantMap& eventData)
+{
+    EditMode mode = (EditMode) eventData[GizmoEditModeChanged::P_MODE].GetFloat();
+    gizmo3D_->SetEditMode(mode);
+}
+
 bool SceneEditor3D::Save()
 {
     File file(context_);

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

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

+ 16 - 0
Source/AtomicEditorWork/Editors/SceneEditor3D/SceneEditor3DEvents.h

@@ -0,0 +1,16 @@
+
+#pragma once
+
+#include <Atomic/Core/Object.h>
+
+namespace AtomicEditor
+{
+
+/// Variable timestep scene update.
+EVENT(E_GIZMOEDITMODECHANGED, GizmoEditModeChanged)
+{
+    PARAM(P_MODE, MODE);            // int
+}
+
+
+}