Browse Source

Add setting to use camera position instead of zoom on mwheel

Chris Friesen 11 years ago
parent
commit
970baf9697

+ 2 - 0
Bin/Data/Scripts/Editor.as

@@ -131,6 +131,7 @@ void LoadConfig()
         if (cameraElem.HasAttribute("fov")) viewFov = cameraElem.GetFloat("fov");
         if (cameraElem.HasAttribute("speed")) cameraBaseSpeed = cameraElem.GetFloat("speed");
         if (cameraElem.HasAttribute("limitrotation")) limitRotation = cameraElem.GetBool("limitrotation");
+        if (cameraElem.HasAttribute("mousewheelcameraposition")) mouseWheelCameraPosition = cameraElem.GetBool("mousewheelcameraposition");
         if (cameraElem.HasAttribute("viewportmode")) viewportMode = cameraElem.GetUInt("viewportmode");
         UpdateViewParameters();
     }
@@ -242,6 +243,7 @@ void SaveConfig()
     cameraElem.SetFloat("fov", viewFov);
     cameraElem.SetFloat("speed", cameraBaseSpeed);
     cameraElem.SetBool("limitrotation", limitRotation);
+    cameraElem.SetBool("mousewheelcameraposition", mouseWheelCameraPosition);
     cameraElem.SetUInt("viewportmode", viewportMode);
 
     objectElem.SetFloat("newnodedistance", newNodeDistance);

+ 10 - 0
Bin/Data/Scripts/Editor/EditorSettings.as

@@ -37,6 +37,9 @@ void UpdateEditorSettingsDialog()
     CheckBox@ limitRotationToggle = settingsDialog.GetChild("LimitRotationToggle", true);
     limitRotationToggle.checked = limitRotation;
 
+    CheckBox@ mouseWheelCameraPositionToggle = settingsDialog.GetChild("MouseWheelCameraPositionToggle", true);
+    mouseWheelCameraPositionToggle.checked = mouseWheelCameraPosition;
+
     LineEdit@ distanceEdit = settingsDialog.GetChild("DistanceEdit", true);
     distanceEdit.text = String(newNodeDistance);
 
@@ -102,6 +105,7 @@ void UpdateEditorSettingsDialog()
         SubscribeToEvent(speedEdit, "TextChanged", "EditCameraSpeed");
         SubscribeToEvent(speedEdit, "TextFinished", "EditCameraSpeed");
         SubscribeToEvent(limitRotationToggle, "Toggled", "EditLimitRotation");
+        SubscribeToEvent(mouseWheelCameraPositionToggle, "Toggled", "EditMouseWheelCameraPosition");
         SubscribeToEvent(distanceEdit, "TextChanged", "EditNewNodeDistance");
         SubscribeToEvent(distanceEdit, "TextFinished", "EditNewNodeDistance");
         SubscribeToEvent(moveStepEdit, "TextChanged", "EditMoveStep");
@@ -186,6 +190,12 @@ void EditLimitRotation(StringHash eventType, VariantMap& eventData)
     limitRotation = edit.checked;
 }
 
+void EditMouseWheelCameraPosition(StringHash eventType, VariantMap& eventData)
+{
+    CheckBox@ edit = eventData["Element"].GetPtr();
+    mouseWheelCameraPosition = edit.checked;
+}
+
 void EditNewNodeDistance(StringHash eventType, VariantMap& eventData)
 {
     LineEdit@ edit = eventData["Element"].GetPtr();

+ 8 - 2
Bin/Data/Scripts/Editor/EditorView.as

@@ -15,6 +15,7 @@ int  viewportBorderOffset = 2; // used to center borders over viewport seams,  s
 int  viewportBorderWidth = 4; // width of a viewport resize border
 IntRect viewportArea; // the area where the editor viewport is. if we ever want to have the viewport not take up the whole screen this abstracts that
 IntRect viewportUIClipBorder = IntRect(27, 60, 0, 0); // used to clip viewport borders, the borders are ugly when going behind the transparent toolbars
+bool mouseWheelCameraPosition = false;
 
 const uint VIEWPORT_BORDER_H     = 0x00000001;
 const uint VIEWPORT_BORDER_H1    = 0x00000002;
@@ -1136,8 +1137,13 @@ void UpdateView(float timeStep)
         }
         if (input.mouseMoveWheel != 0 && ui.GetElementAt(ui.cursor.position) is null)
         {
-            float zoom = camera.zoom + -input.mouseMoveWheel *.1 * speedMultiplier;
-            camera.zoom = Clamp(zoom, .1, 30);
+            if (mouseWheelCameraPosition)
+                cameraNode.TranslateRelative(Vector3(0, 0, -cameraBaseSpeed) * -input.mouseMoveWheel*20 * timeStep * speedMultiplier);
+            else
+            {
+                float zoom = camera.zoom + -input.mouseMoveWheel *.1 * speedMultiplier;
+                camera.zoom = Clamp(zoom, .1, 30);
+            }
         }
     }
 

+ 9 - 0
Bin/Data/UI/EditorSettingsDialog.xml

@@ -77,6 +77,15 @@
                         <attribute name="Text" value="Limit camera pitch" />
                     </element>
                 </element>
+                <element style="ListRow">
+                    <attribute name="Layout Spacing" value="8" />
+                    <element type="CheckBox">
+                        <attribute name="Name" value="MouseWheelCameraPositionToggle" />
+                    </element>
+                    <element type="Text">
+                        <attribute name="Text" value="Mouse wheel camera position" />
+                    </element>
+                </element>
                 <element type="BorderImage" style="EditorDivider" />
                 <element style="ListRow">
                     <attribute name="Layout Spacing" value="20" />