From c425b2bdc932c91c78901131986434017da6e792 Mon Sep 17 00:00:00 2001
From: biwa <6475593+biwa@users.noreply.github.com>
Date: Sat, 5 Feb 2022 18:40:08 +0100
Subject: [PATCH] Visual Mode: added actions to lower and raise map elements by
 the current grid size (no defaults bound). Resolves #699

---
 .../BuilderModes/Resources/Actions.cfg        | 21 ++++++++++++++
 .../VisualModes/BaseVisualMode.cs             | 28 +++++++++++++++++--
 2 files changed, 47 insertions(+), 2 deletions(-)

diff --git a/Source/Plugins/BuilderModes/Resources/Actions.cfg b/Source/Plugins/BuilderModes/Resources/Actions.cfg
index 07e8eab71..69996d067 100755
--- a/Source/Plugins/BuilderModes/Resources/Actions.cfg
+++ b/Source/Plugins/BuilderModes/Resources/Actions.cfg
@@ -654,6 +654,27 @@ raisesector128
 	repeat = true;
 }
 
+lowermapelementbygridsize
+{
+	title = "Lower Floor/Ceiling/Thing by grid size";
+	category = "visual";
+	description = "Lowers the targeted or selected floors/ceilings by the current grid size. This also lowers selected or targeted things.";
+	allowkeys = true;
+	allowmouse = true;
+	allowscroll = true;
+	repeat = true;
+}
+
+raisemapelementbygridsize
+{
+	title = "Raise Floor/Ceiling/Thing by grid size";
+	category = "visual";
+	description = "Raises the targeted or selected floors/ceilings by the current grid size. This also raises selected or targeted things.";
+	allowkeys = true;
+	allowmouse = true;
+	allowscroll = true;
+	repeat = true;
+}
 
 //mxd
 lowersectortonearest
diff --git a/Source/Plugins/BuilderModes/VisualModes/BaseVisualMode.cs b/Source/Plugins/BuilderModes/VisualModes/BaseVisualMode.cs
index ff2fa8bb0..60e2c1528 100755
--- a/Source/Plugins/BuilderModes/VisualModes/BaseVisualMode.cs
+++ b/Source/Plugins/BuilderModes/VisualModes/BaseVisualMode.cs
@@ -2720,9 +2720,33 @@ namespace CodeImp.DoomBuilder.BuilderModes
 			PostAction();
 	    }
 
+		[BeginAction("raisemapelementbygridsize")]
+		public void RaiseMapElementByGridSize()
+		{
+			PreAction(UndoGroup.SectorHeightChange);
+			List<IVisualEventReceiver> objs = GetSelectedObjects(true, true, true, true, true);
+			bool hasvisualslopehandles = objs.Any(o => o is VisualSlope);
+			foreach (IVisualEventReceiver i in objs) // If slope handles are selected only apply the action to them
+				if (!hasvisualslopehandles || (hasvisualslopehandles && i is VisualSlope))
+					i.OnChangeTargetHeight(General.Map.Grid.GridSize);
+			PostAction();
+		}
 
-        //mxd
-        [BeginAction("raisesectortonearest")]
+		[BeginAction("lowermapelementbygridsize")]
+		public void LowerMapElementByGridSize()
+		{
+			PreAction(UndoGroup.SectorHeightChange);
+			List<IVisualEventReceiver> objs = GetSelectedObjects(true, true, true, true, true);
+			bool hasvisualslopehandles = objs.Any(o => o is VisualSlope);
+			foreach (IVisualEventReceiver i in objs) // If slope handles are selected only apply the action to them
+				if (!hasvisualslopehandles || (hasvisualslopehandles && i is VisualSlope))
+					i.OnChangeTargetHeight(-General.Map.Grid.GridSize);
+			PostAction();
+		}
+
+
+		//mxd
+		[BeginAction("raisesectortonearest")]
 		public void RaiseSectorToNearest() 
 		{
 			List<VisualSidedefSlope> selectedhandles = GetSelectedSlopeHandles();
-- 
GitLab