Browse Source

adds a useGroupCenter var/button to allow folks to use non-itterative snapping, and defaults it to do so (maintains prior functionality envelope)

Azaezel 8 năm trước cách đây
mục cha
commit
ebdd441833

+ 4 - 3
Engine/source/gui/worldEditor/worldEditor.cpp

@@ -1805,7 +1805,7 @@ WorldEditor::WorldEditor()
    mSoftSnapDebugPoint.set(0.0f, 0.0f, 0.0f);
    
    mGridSnap = false;
-   
+   mUseGroupCenter = true;
    mFadeIcons = true;
    mFadeIconsDist = 8.f;
 }
@@ -2254,7 +2254,7 @@ void WorldEditor::on3DMouseDragged(const Gui3DMouseEvent & event)
             mGizmo->getProfile()->snapToGrid = snapToGrid;
          }
 
-         mSelected->offset(mGizmo->getOffset(), mGridSnap ? mGridPlaneSize : 0.f);
+         mSelected->offset(mGizmo->getOffset(), (!mUseGroupCenter && mGridSnap) ? mGridPlaneSize : 0.f);
 
          // Handle various sticking
          terrainSnapSelection( mSelected, event.modifier, mGizmo->getPosition() );
@@ -2686,7 +2686,8 @@ void WorldEditor::initPersistFields()
    addGroup( "Grid" );
    
       addField( "gridSnap",               TypeBool,   Offset( mGridSnap, WorldEditor ),
-         "If true, transform operations will snap to the grid." );
+         "If true, transform operations will snap to the grid.");
+      addField("useGroupCenter", TypeBool, Offset(mUseGroupCenter, WorldEditor));
    
    endGroup( "Grid" );
    

+ 1 - 0
Engine/source/gui/worldEditor/worldEditor.h

@@ -349,6 +349,7 @@ class WorldEditor : public EditTSCtrl
       F32               mDropAtScreenCenterMax;
 
       bool              mGridSnap;
+      bool              mUseGroupCenter;
       bool              mStickToGround;
       bool              mStuckToGround;            ///< Selection is stuck to the ground
       AlignmentType     mTerrainSnapAlignment;     ///< How does the stickied object align to the terrain

+ 21 - 2
Templates/Full/game/tools/worldEditor/gui/ObjectSnapOptionsWindow.ed.gui

@@ -28,7 +28,7 @@
       canMinimize = "0";
       canMaximize = "0";
       position = "400 31";
-      extent =" 175 257";
+      extent =" 175 267";
       MinExtent = "175 130";
       text = "Snap Options";
       closeCommand = "ESnapOptions.hideDialog();";
@@ -51,7 +51,7 @@
          Visible = "1";
          hovertime = "1000";
          Docking = "Client";
-         Margin = "3 22 3 3";
+         Margin = "3 32 3 3";
          Padding = "0 0 0 0";
          AnchorTop = "1";
          AnchorBottom = "0";
@@ -793,6 +793,25 @@
             canSave = "1";
             canSaveDynamicFields = "0";
          };
+      new GuiCheckBoxCtrl() {
+            text = "Use Group Center";
+            groupNum = "1";
+            useMouseEvents = "0";
+            isContainer = "0";
+            horizSizing = "right";
+            vertSizing = "top";
+            position = "4 246";
+            extent = "105 24";
+            minExtent = "8 8";
+            visible = "1";
+            active = "1";
+            command = "toggleSnappingOptions(\"byGroup\");";
+            tooltipProfile = "ToolsGuiToolTipProfile";
+            hovertime = "1000";
+            internalName = "GroupSnapButton";
+            canSave = "1";
+            canSaveDynamicFields = "0";
+         };
       new GuiTextCtrl() {
          text = "Size";
          maxLength = "1024";

+ 7 - 0
Templates/Full/game/tools/worldEditor/scripts/EditorGui.ed.cs

@@ -2056,6 +2056,7 @@ function EWorldEditor::syncGui( %this )
    ESnapOptions-->GridSize.setText( EWorldEditor.getGridSize() );
    
    ESnapOptions-->GridSnapButton.setStateOn( %this.getGridSnap() );
+   ESnapOptions-->GroupSnapButton.setStateOn( %this.UseGroupCenter );
    SnapToBar-->objectGridSnapBtn.setStateOn( %this.getGridSnap() );
    ESnapOptions-->NoSnapButton.setStateOn( !%this.stickToGround && !%this.getSoftSnap() && !%this.getGridSnap() );
 }
@@ -2458,6 +2459,12 @@ function toggleSnappingOptions( %var )
    {
       EWorldEditor.setGridSnap( !EWorldEditor.getGridSnap() );
    }
+   else if( %var $= "byGroup" )
+   {
+	   EWorldEditor.UseGroupCenter = !EWorldEditor.UseGroupCenter;
+	   ESnapOptions->GroupSnapButton.setStateOn(EWorldEditor.UseGroupCenter);
+	   error(EWorldEditor.UseGroupCenter);
+   }
    else
    { 
       // No snapping.