From 2b40a08f13ae6ba90d229b14172fa1c9d464c185 Mon Sep 17 00:00:00 2001
From: biwa <6475593+biwa@users.noreply.github.com>
Date: Fri, 29 Sep 2023 20:44:04 +0200
Subject: [PATCH] Visual Mode: fixed a problem where floors/ceilings could not
 be changed in size if the user tried to change their texture offset in a
 non-UDMF map

---
 .../BuilderModes/VisualModes/BaseVisualGeometrySector.cs | 8 +++++---
 .../VisualModes/BaseVisualGeometrySidedef.cs             | 4 +++-
 .../Plugins/BuilderModes/VisualModes/BaseVisualSlope.cs  | 2 +-
 .../Plugins/BuilderModes/VisualModes/BaseVisualThing.cs  | 2 +-
 .../Plugins/BuilderModes/VisualModes/BaseVisualVertex.cs | 2 +-
 .../BuilderModes/VisualModes/IVisualEventReceiver.cs     | 2 +-
 .../BuilderModes/VisualModes/NullVisualEventReceiver.cs  | 2 +-
 Source/Plugins/BuilderModes/VisualModes/VisualCeiling.cs | 9 ++++++---
 Source/Plugins/BuilderModes/VisualModes/VisualFloor.cs   | 9 ++++++---
 9 files changed, 25 insertions(+), 15 deletions(-)

diff --git a/Source/Plugins/BuilderModes/VisualModes/BaseVisualGeometrySector.cs b/Source/Plugins/BuilderModes/VisualModes/BaseVisualGeometrySector.cs
index 32e52bf16..7e12a6a34 100755
--- a/Source/Plugins/BuilderModes/VisualModes/BaseVisualGeometrySector.cs
+++ b/Source/Plugins/BuilderModes/VisualModes/BaseVisualGeometrySector.cs
@@ -848,15 +848,15 @@ namespace CodeImp.DoomBuilder.BuilderModes
 		}
 
 		// Texture offset change
-		public virtual void OnChangeTextureOffset(int horizontal, int vertical, bool doSurfaceAngleCorrection)
+		public virtual bool OnChangeTextureOffset(int horizontal, int vertical, bool doSurfaceAngleCorrection)
 		{
-			if(horizontal == 0 && vertical == 0) return; //mxd
+			if(horizontal == 0 && vertical == 0) return false; //mxd
 			
 			//mxd
 			if(!General.Map.UDMF) 
 			{
 				General.Interface.DisplayStatus(StatusType.Warning, "Floor/ceiling texture offsets cannot be changed in this map format!");
-				return;
+				return false;
 			}
 
 			if((General.Map.UndoRedo.NextUndo == null) || (General.Map.UndoRedo.NextUndo.TicketID != undoticket))
@@ -914,6 +914,8 @@ namespace CodeImp.DoomBuilder.BuilderModes
 			}
 
 			if(vs != null) vs.UpdateSectorGeometry(false);
+
+			return true;
 		}
 
 		//mxd
diff --git a/Source/Plugins/BuilderModes/VisualModes/BaseVisualGeometrySidedef.cs b/Source/Plugins/BuilderModes/VisualModes/BaseVisualGeometrySidedef.cs
index 17956029f..eed8e5890 100755
--- a/Source/Plugins/BuilderModes/VisualModes/BaseVisualGeometrySidedef.cs
+++ b/Source/Plugins/BuilderModes/VisualModes/BaseVisualGeometrySidedef.cs
@@ -1660,7 +1660,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
 		}
 		
 		// Texture offset change
-		public virtual void OnChangeTextureOffset(int horizontal, int vertical, bool doSurfaceAngleCorrection)
+		public virtual bool OnChangeTextureOffset(int horizontal, int vertical, bool doSurfaceAngleCorrection)
 		{
 			if((General.Map.UndoRedo.NextUndo == null) || (General.Map.UndoRedo.NextUndo.TicketID != undoticket))
 				undoticket = mode.CreateUndo("Change texture offsets");
@@ -1695,6 +1695,8 @@ namespace CodeImp.DoomBuilder.BuilderModes
 			//mxd. Update linked effects
 			SectorData sd = mode.GetSectorDataEx(Sector.Sector);
 			if(sd != null) sd.Reset(true);
+
+			return true;
 		}
 
 		//mxd
diff --git a/Source/Plugins/BuilderModes/VisualModes/BaseVisualSlope.cs b/Source/Plugins/BuilderModes/VisualModes/BaseVisualSlope.cs
index 329adb62e..178ca0410 100644
--- a/Source/Plugins/BuilderModes/VisualModes/BaseVisualSlope.cs
+++ b/Source/Plugins/BuilderModes/VisualModes/BaseVisualSlope.cs
@@ -111,7 +111,7 @@ namespace CodeImp.DoomBuilder.VisualModes
 		public void OnSelectBegin() { }
 		public void OnEditBegin() { }
 		public void OnChangeTargetBrightness(bool up) { }
-		public void OnChangeTextureOffset(int horizontal, int vertical, bool doSurfaceAngleCorrection) { }
+		public bool OnChangeTextureOffset(int horizontal, int vertical, bool doSurfaceAngleCorrection) { return true; }
 		public void OnSelectTexture() { }
 		public void OnCopyTexture() { }
 		public void OnPasteTexture() { }
diff --git a/Source/Plugins/BuilderModes/VisualModes/BaseVisualThing.cs b/Source/Plugins/BuilderModes/VisualModes/BaseVisualThing.cs
index 50e07947b..8fe8ac841 100755
--- a/Source/Plugins/BuilderModes/VisualModes/BaseVisualThing.cs
+++ b/Source/Plugins/BuilderModes/VisualModes/BaseVisualThing.cs
@@ -657,7 +657,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
 		public void OnSelectBegin() { }
 		public void OnEditBegin() { }
 		public void OnChangeTargetBrightness(bool up) { }
-		public void OnChangeTextureOffset(int horizontal, int vertical, bool doSurfaceAngleCorrection) { }
+		public bool OnChangeTextureOffset(int horizontal, int vertical, bool doSurfaceAngleCorrection) { return true; }
 		public void OnSelectTexture() { }
 		public void OnCopyTexture() { }
 		public void OnPasteTexture() { }
diff --git a/Source/Plugins/BuilderModes/VisualModes/BaseVisualVertex.cs b/Source/Plugins/BuilderModes/VisualModes/BaseVisualVertex.cs
index 3de36f62f..6c93f6ca4 100755
--- a/Source/Plugins/BuilderModes/VisualModes/BaseVisualVertex.cs
+++ b/Source/Plugins/BuilderModes/VisualModes/BaseVisualVertex.cs
@@ -241,7 +241,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
 		public void OnEditBegin() { }
 		public void OnMouseMove(MouseEventArgs e) { }
 		public void OnChangeTargetBrightness(bool up) { }
-		public void OnChangeTextureOffset(int horizontal, int vertical, bool doSurfaceAngleCorrection) { }
+		public bool OnChangeTextureOffset(int horizontal, int vertical, bool doSurfaceAngleCorrection) { return true; }
 		public void OnChangeScale(int incrementX, int incrementY) { }
 		public void OnSelectTexture() { }
 		public void OnCopyTexture() { }
diff --git a/Source/Plugins/BuilderModes/VisualModes/IVisualEventReceiver.cs b/Source/Plugins/BuilderModes/VisualModes/IVisualEventReceiver.cs
index cde7f2ca6..7e22f377b 100755
--- a/Source/Plugins/BuilderModes/VisualModes/IVisualEventReceiver.cs
+++ b/Source/Plugins/BuilderModes/VisualModes/IVisualEventReceiver.cs
@@ -35,7 +35,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
 		void OnMouseMove(MouseEventArgs e);
 		void OnChangeTargetHeight(int amount);
 		void OnChangeTargetBrightness(bool up);
-		void OnChangeTextureOffset(int horizontal, int vertical, bool doSurfaceAngleCorrection);
+		bool OnChangeTextureOffset(int horizontal, int vertical, bool doSurfaceAngleCorrection);
 		void OnChangeScale(int incrementX, int incrementY); //mxd
 		void OnResetTextureOffset();
 		void OnResetLocalTextureOffset(); //mxd. This should reset upper/middle/lower offsets (UDMF only)
diff --git a/Source/Plugins/BuilderModes/VisualModes/NullVisualEventReceiver.cs b/Source/Plugins/BuilderModes/VisualModes/NullVisualEventReceiver.cs
index e6abe0e41..cdf113a6b 100755
--- a/Source/Plugins/BuilderModes/VisualModes/NullVisualEventReceiver.cs
+++ b/Source/Plugins/BuilderModes/VisualModes/NullVisualEventReceiver.cs
@@ -34,7 +34,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
 		public void OnMouseMove(MouseEventArgs e) {	}
 		public void OnChangeTargetHeight(int amount) { }
 		public void OnChangeTargetBrightness(bool up) { }
-		public void OnChangeTextureOffset(int horizontal, int vertical, bool doSurfaceAngleCorrection) { }
+		public bool OnChangeTextureOffset(int horizontal, int vertical, bool doSurfaceAngleCorrection) { return true; }
 		public void OnChangeScale(int incrementX, int incrementY) { } //mxd
 		public void OnResetTextureOffset() { }
 		public void OnResetLocalTextureOffset() { } //mxd
diff --git a/Source/Plugins/BuilderModes/VisualModes/VisualCeiling.cs b/Source/Plugins/BuilderModes/VisualModes/VisualCeiling.cs
index a1d85c029..cae40b779 100755
--- a/Source/Plugins/BuilderModes/VisualModes/VisualCeiling.cs
+++ b/Source/Plugins/BuilderModes/VisualModes/VisualCeiling.cs
@@ -279,16 +279,19 @@ namespace CodeImp.DoomBuilder.BuilderModes
 		}
 
 		//mxd
-		public override void OnChangeTextureOffset(int horizontal, int vertical, bool doSurfaceAngleCorrection)
+		public override bool OnChangeTextureOffset(int horizontal, int vertical, bool doSurfaceAngleCorrection)
 		{
+			bool appliedoffset = false;
+
 			// Only do this when not done yet in this call
 			// Because we may be able to select the same 3D floor multiple times through multiple sectors
 			SectorData sd = mode.GetSectorData(level.sector);
 			if(!sd.CeilingChanged)
 			{
-				sd.CeilingChanged = true;
-				base.OnChangeTextureOffset(horizontal, vertical, doSurfaceAngleCorrection);
+				sd.CeilingChanged = appliedoffset = base.OnChangeTextureOffset(horizontal, vertical, doSurfaceAngleCorrection);
 			}
+
+			return appliedoffset;
 		}
 
 		// Move texture coordinates
diff --git a/Source/Plugins/BuilderModes/VisualModes/VisualFloor.cs b/Source/Plugins/BuilderModes/VisualModes/VisualFloor.cs
index 8be4c2161..40ddc9294 100755
--- a/Source/Plugins/BuilderModes/VisualModes/VisualFloor.cs
+++ b/Source/Plugins/BuilderModes/VisualModes/VisualFloor.cs
@@ -233,16 +233,19 @@ namespace CodeImp.DoomBuilder.BuilderModes
 		}
 
 		//mxd
-		public override void OnChangeTextureOffset(int horizontal, int vertical, bool doSurfaceAngleCorrection)
+		public override bool OnChangeTextureOffset(int horizontal, int vertical, bool doSurfaceAngleCorrection)
 		{
+			bool appliedoffset = false;
+
 			// Only do this when not done yet in this call
 			// Because we may be able to select the same 3D floor multiple times through multiple sectors
 			SectorData sd = mode.GetSectorData(level.sector);
 			if(!sd.FloorChanged)
 			{
-				sd.FloorChanged = true;
-				base.OnChangeTextureOffset(horizontal, vertical, doSurfaceAngleCorrection);
+				sd.FloorChanged = appliedoffset = base.OnChangeTextureOffset(horizontal, vertical, doSurfaceAngleCorrection);
 			}
+
+			return appliedoffset;
 		}
 
 		// Move texture coordinates
-- 
GitLab