Просмотр исходного кода

Merge pull request #753 from raheelx/ShiftClone

Shift clone
JoshEngebretson 9 лет назад
Родитель
Сommit
b43b1bfd98

+ 17 - 8
Source/AtomicEditor/Editors/SceneEditor3D/Gizmo3D.cpp

@@ -37,10 +37,10 @@
 namespace AtomicEditor
 {
 
-
-    Gizmo3D::Gizmo3D(Context* context) : Object(context),
-        dragging_(false),
-        cloning_(false)
+Gizmo3D::Gizmo3D(Context* context) : Object(context),
+    dragging_(false),
+    cloning_(false),
+    startClone_(false)
 {
     ResourceCache* cache = GetSubsystem<ResourceCache>();
 
@@ -185,10 +185,8 @@ void Gizmo3D::Use()
     Ray cameraRay = view3D_->GetCameraRay();
     float scale = gizmoNode_->GetScale().x_;
 
-    // Clones an object when it's dragged while holding down Shift
-    bool dragShift = input->GetMouseButtonDown(MOUSEB_LEFT) && input->GetKeyDown(KEY_SHIFT);
-
-    if (dragShift && !cloning_)
+    // Clones an object when it's dragged/rotated/scaled while holding down Shift
+    if (startClone_ && !cloning_)
     {
         cloning_ = true;
         selection_->Copy();
@@ -205,6 +203,7 @@ void Gizmo3D::Use()
             dragging_ = false;
         }
 
+        startClone_ = false;
         cloning_ = false;
 
         CalculateGizmoAxes();
@@ -429,6 +428,16 @@ void Gizmo3D::Drag()
 
     float scale = gizmoNode_->GetScale().x_;
 
+    Input* input = GetSubsystem<Input>();
+
+    //Activates cloning when any of these modes is used while holding shift
+    if (editMode_ == EDIT_MOVE ||
+        editMode_ == EDIT_ROTATE ||
+        editMode_ == EDIT_SCALE)
+    {
+        startClone_ = input->GetKeyDown(KEY_SHIFT);
+    }
+
     if (editMode_ == EDIT_MOVE)
     {
         Vector3 adjust(0, 0, 0);

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

@@ -185,6 +185,7 @@ private:
 
     bool dragging_;
     bool cloning_;
+    bool startClone_;
 
     // snap settings
     float snapTranslationX_;