From 982d50470c7e08f39e14b4ca63e74c14610f9ef3 Mon Sep 17 00:00:00 2001 From: spherallic <spherallic@gmail.com> Date: Fri, 24 May 2024 15:05:59 +0200 Subject: [PATCH] Make texture scaling actions more sensible, add multiply/divide by 2 actions --- .../Windows/LinedefEditFormSRB2.Designer.cs | 10 ++++---- .../Windows/SectorEditFormSRB2.Designer.cs | 4 ++-- .../BuilderModes/Resources/Actions.cfg | 24 +++++++++++++++++++ .../VisualModes/BaseVisualGeometrySidedef.cs | 23 ++++++++++-------- .../VisualModes/BaseVisualMode.cs | 3 +++ .../BuilderModes/VisualModes/VisualCeiling.cs | 23 ++++++++++-------- .../BuilderModes/VisualModes/VisualFloor.cs | 23 ++++++++++-------- .../VisualModes/VisualMiddle3D.cs | 14 ++--------- 8 files changed, 75 insertions(+), 49 deletions(-) diff --git a/Source/Core/Windows/LinedefEditFormSRB2.Designer.cs b/Source/Core/Windows/LinedefEditFormSRB2.Designer.cs index ae5617b96..e91b7f1a8 100644 --- a/Source/Core/Windows/LinedefEditFormSRB2.Designer.cs +++ b/Source/Core/Windows/LinedefEditFormSRB2.Designer.cs @@ -604,7 +604,7 @@ namespace CodeImp.DoomBuilder.Windows this.pfcFrontScaleTop.ButtonStep = 1; this.pfcFrontScaleTop.ButtonStepBig = 1F; this.pfcFrontScaleTop.ButtonStepFloat = 0.1F; - this.pfcFrontScaleTop.ButtonStepSmall = 0.01F; + this.pfcFrontScaleTop.ButtonStepSmall = 0.05F; this.pfcFrontScaleTop.ButtonStepsUseModifierKeys = true; this.pfcFrontScaleTop.DefaultValue = 1F; this.pfcFrontScaleTop.Field1 = "scalex_top"; @@ -624,7 +624,7 @@ namespace CodeImp.DoomBuilder.Windows this.pfcFrontScaleBottom.ButtonStep = 1; this.pfcFrontScaleBottom.ButtonStepBig = 1F; this.pfcFrontScaleBottom.ButtonStepFloat = 0.1F; - this.pfcFrontScaleBottom.ButtonStepSmall = 0.01F; + this.pfcFrontScaleBottom.ButtonStepSmall = 0.05F; this.pfcFrontScaleBottom.ButtonStepsUseModifierKeys = true; this.pfcFrontScaleBottom.DefaultValue = 1F; this.pfcFrontScaleBottom.Field1 = "scalex_bottom"; @@ -644,7 +644,7 @@ namespace CodeImp.DoomBuilder.Windows this.pfcFrontScaleMid.ButtonStep = 1; this.pfcFrontScaleMid.ButtonStepBig = 1F; this.pfcFrontScaleMid.ButtonStepFloat = 0.1F; - this.pfcFrontScaleMid.ButtonStepSmall = 0.01F; + this.pfcFrontScaleMid.ButtonStepSmall = 0.05F; this.pfcFrontScaleMid.ButtonStepsUseModifierKeys = true; this.pfcFrontScaleMid.DefaultValue = 1F; this.pfcFrontScaleMid.Field1 = "scalex_mid"; @@ -1239,7 +1239,7 @@ namespace CodeImp.DoomBuilder.Windows this.pfcBackScaleBottom.ButtonStep = 1; this.pfcBackScaleBottom.ButtonStepBig = 1F; this.pfcBackScaleBottom.ButtonStepFloat = 0.1F; - this.pfcBackScaleBottom.ButtonStepSmall = 0.01F; + this.pfcBackScaleBottom.ButtonStepSmall = 0.05F; this.pfcBackScaleBottom.ButtonStepsUseModifierKeys = true; this.pfcBackScaleBottom.DefaultValue = 1F; this.pfcBackScaleBottom.Field1 = "scalex_bottom"; @@ -1259,7 +1259,7 @@ namespace CodeImp.DoomBuilder.Windows this.pfcBackScaleMid.ButtonStep = 1; this.pfcBackScaleMid.ButtonStepBig = 1F; this.pfcBackScaleMid.ButtonStepFloat = 0.1F; - this.pfcBackScaleMid.ButtonStepSmall = 0.01F; + this.pfcBackScaleMid.ButtonStepSmall = 0.05F; this.pfcBackScaleMid.ButtonStepsUseModifierKeys = true; this.pfcBackScaleMid.DefaultValue = 1F; this.pfcBackScaleMid.Field1 = "scalex_mid"; diff --git a/Source/Core/Windows/SectorEditFormSRB2.Designer.cs b/Source/Core/Windows/SectorEditFormSRB2.Designer.cs index d828f0b84..35a5e592b 100644 --- a/Source/Core/Windows/SectorEditFormSRB2.Designer.cs +++ b/Source/Core/Windows/SectorEditFormSRB2.Designer.cs @@ -975,7 +975,7 @@ this.floorScale.ButtonStep = 1; this.floorScale.ButtonStepBig = 1F; this.floorScale.ButtonStepFloat = 0.1F; - this.floorScale.ButtonStepSmall = 0.01F; + this.floorScale.ButtonStepSmall = 0.05F; this.floorScale.ButtonStepsUseModifierKeys = true; this.floorScale.DefaultValue = 1F; this.floorScale.Field1 = "xscalefloor"; @@ -1177,7 +1177,7 @@ this.ceilScale.ButtonStep = 1; this.ceilScale.ButtonStepBig = 1F; this.ceilScale.ButtonStepFloat = 0.1F; - this.ceilScale.ButtonStepSmall = 0.01F; + this.ceilScale.ButtonStepSmall = 0.05F; this.ceilScale.ButtonStepsUseModifierKeys = true; this.ceilScale.DefaultValue = 1F; this.ceilScale.Field1 = "xscaleceiling"; diff --git a/Source/Plugins/BuilderModes/Resources/Actions.cfg b/Source/Plugins/BuilderModes/Resources/Actions.cfg index d7ae909b5..7c266476e 100755 --- a/Source/Plugins/BuilderModes/Resources/Actions.cfg +++ b/Source/Plugins/BuilderModes/Resources/Actions.cfg @@ -960,6 +960,30 @@ scaledowny default = 101; } +//sphere +scalemultiply +{ + title = "Multiply Scale by 2"; + category = "visual"; + description = "Multiplies scale of targeted or selected textures or things by 2 (UDMF only)."; + allowkeys = true; + allowmouse = true; + allowscroll = true; + repeat = true; +} + +//sphere +scaledivide +{ + title = "Divide Scale by 2"; + category = "visual"; + description = "Divides scale of targeted or selected textures or things by 2 (UDMF only)."; + allowkeys = true; + allowmouse = true; + allowscroll = true; + repeat = true; +} + textureselect { title = "Select Texture"; diff --git a/Source/Plugins/BuilderModes/VisualModes/BaseVisualGeometrySidedef.cs b/Source/Plugins/BuilderModes/VisualModes/BaseVisualGeometrySidedef.cs index dc8127407..9ef885ddb 100755 --- a/Source/Plugins/BuilderModes/VisualModes/BaseVisualGeometrySidedef.cs +++ b/Source/Plugins/BuilderModes/VisualModes/BaseVisualGeometrySidedef.cs @@ -1741,21 +1741,21 @@ namespace CodeImp.DoomBuilder.BuilderModes Sidedef.Fields.BeforeFieldsChange(); - if(incrementX != 0) + if (Math.Abs(incrementX) == 1) { - double pix = (int)Math.Round(Texture.Width * scaleX) - incrementX; - double newscaleX = Math.Round(pix / Texture.Width, 3); - scaleX = (newscaleX == 0 ? scaleX * -1 : newscaleX); - UniFields.SetFloat(Sidedef.Fields, keyX, scaleX, 1.0); + incrementX *= scaleX < 1.0 || (scaleX < 1.1 && incrementX < 0) ? 5 : 10; // Finer control at smaller (<1.0) scales + UniFields.SetFloat(Sidedef.Fields, keyX, ((scaleX * 100) + incrementX) / 100, 1.0); } + else if (Math.Abs(incrementX) == 2) + UniFields.SetFloat(Sidedef.Fields, keyX, incrementX < 0 ? scaleX / 2 : scaleX * 2, 1.0); - if(incrementY != 0) + if (Math.Abs(incrementY) == 1) { - double pix = (int)Math.Round(Texture.Height * scaleY) - incrementY; - double newscaleY = Math.Round(pix / Texture.Height, 3); - scaleY = (newscaleY == 0 ? scaleY * -1 : newscaleY); - UniFields.SetFloat(Sidedef.Fields, keyY, scaleY, 1.0); + incrementY *= scaleY < 1.0 || (scaleY < 1.1 && incrementY < 0) ? 5 : 10; // Finer control at smaller (<1.0) scales + UniFields.SetFloat(Sidedef.Fields, keyY, ((scaleY * 100) + incrementY) / 100, 1.0); } + else if (Math.Abs(incrementY) == 2) + UniFields.SetFloat(Sidedef.Fields, keyY, incrementY < 0 ? scaleY / 2 : scaleY * 2, 1.0); // Update geometry Setup(); @@ -1764,6 +1764,9 @@ namespace CodeImp.DoomBuilder.BuilderModes SectorData sd = mode.GetSectorDataEx(Sector.Sector); if(sd != null) sd.Reset(true); + scaleX = Sidedef.Fields.GetValue(keyX, 1.0); + scaleY = Sidedef.Fields.GetValue(keyY, 1.0); + mode.SetActionResult("Wall scale changed to " + scaleX.ToString("F03", CultureInfo.InvariantCulture) + ", " + scaleY.ToString("F03", CultureInfo.InvariantCulture) + " (" + (int)Math.Round(Texture.Width / scaleX) + " x " + (int)Math.Round(Texture.Height / scaleY) + ")."); } diff --git a/Source/Plugins/BuilderModes/VisualModes/BaseVisualMode.cs b/Source/Plugins/BuilderModes/VisualModes/BaseVisualMode.cs index f8baf3e60..01a2c19ac 100644 --- a/Source/Plugins/BuilderModes/VisualModes/BaseVisualMode.cs +++ b/Source/Plugins/BuilderModes/VisualModes/BaseVisualMode.cs @@ -3554,6 +3554,9 @@ namespace CodeImp.DoomBuilder.BuilderModes [BeginAction("scaledownx")] public void ScaleTextureDownX() { ScaleTexture(-1, 0); } [BeginAction("scaleupy")] public void ScaleTextureUpY() { ScaleTexture(0, 1); } [BeginAction("scaledowny")] public void ScaleTextureDownY() { ScaleTexture(0, -1); } + //sphere + [BeginAction("scalemultiply")] public void ScaleTextureMultiply() { ScaleTexture(2, 2); } + [BeginAction("scaledivide")] public void ScaleTextureDivide() { ScaleTexture(-2, -2); } //mxd private void ScaleTexture(int incrementx, int incrementy) diff --git a/Source/Plugins/BuilderModes/VisualModes/VisualCeiling.cs b/Source/Plugins/BuilderModes/VisualModes/VisualCeiling.cs index 0b880c7bc..d4af9ed97 100755 --- a/Source/Plugins/BuilderModes/VisualModes/VisualCeiling.cs +++ b/Source/Plugins/BuilderModes/VisualModes/VisualCeiling.cs @@ -324,21 +324,24 @@ namespace CodeImp.DoomBuilder.BuilderModes s.Fields.BeforeFieldsChange(); - if(incrementX != 0) + if (Math.Abs(incrementX) == 1) { - double pix = (int)Math.Round(Texture.Width * scaleX) - incrementX; - double newscaleX = Math.Round(pix / Texture.Width, 3); - scaleX = (newscaleX == 0 ? scaleX * -1 : newscaleX); - UniFields.SetFloat(s.Fields, "xscaleceiling", scaleX, 1.0); + incrementX *= scaleX < 1.0 || (scaleX < 1.1 && incrementX < 0) ? 5 : 10; // Finer control at smaller (<1.0) scales + UniFields.SetFloat(s.Fields, "xscaleceiling", ((scaleX * 100) + incrementX) / 100, 1.0); } + else if (Math.Abs(incrementX) == 2) + UniFields.SetFloat(s.Fields, "xscaleceiling", incrementX < 0 ? scaleX / 2 : scaleX * 2, 1.0); - if(incrementY != 0) + if (Math.Abs(incrementY) == 1) { - double pix = (int)Math.Round(Texture.Height * scaleY) - incrementY; - double newscaleY = Math.Round(pix / Texture.Height, 3); - scaleY = (newscaleY == 0 ? scaleY * -1 : newscaleY); - UniFields.SetFloat(s.Fields, "yscaleceiling", scaleY, 1.0); + incrementY *= scaleY < 1.0 || (scaleY < 1.1 && incrementY < 0) ? 5 : 10; // Finer control at smaller (<1.0) scales + UniFields.SetFloat(s.Fields, "yscaleceiling", ((scaleY * 100) + incrementY) / 100, 1.0); } + else if (Math.Abs(incrementY) == 2) + UniFields.SetFloat(s.Fields, "yscaleceiling", incrementY < 0 ? scaleY / 2 : scaleY * 2, 1.0); + + scaleX = s.Fields.GetValue("xscaleceiling", 1.0); + scaleY = s.Fields.GetValue("yscaleceiling", 1.0); mode.SetActionResult("Ceiling scale changed to " + scaleX.ToString("F03", CultureInfo.InvariantCulture) + ", " + scaleY.ToString("F03", CultureInfo.InvariantCulture) + " (" + (int)Math.Round(Texture.Width / scaleX) + " x " + (int)Math.Round(Texture.Height / scaleY) + ")."); } diff --git a/Source/Plugins/BuilderModes/VisualModes/VisualFloor.cs b/Source/Plugins/BuilderModes/VisualModes/VisualFloor.cs index 4141ea3e2..ddae08d31 100755 --- a/Source/Plugins/BuilderModes/VisualModes/VisualFloor.cs +++ b/Source/Plugins/BuilderModes/VisualModes/VisualFloor.cs @@ -278,21 +278,24 @@ namespace CodeImp.DoomBuilder.BuilderModes s.Fields.BeforeFieldsChange(); - if(incrementX != 0) + if (Math.Abs(incrementX) == 1) { - double pix = (int)Math.Round(Texture.Width * scaleX) - incrementX; - double newscaleX = Math.Round(pix / Texture.Width, 3); - scaleX = (newscaleX == 0 ? scaleX * -1 : newscaleX); - UniFields.SetFloat(s.Fields, "xscalefloor", scaleX, 1.0); + incrementX *= scaleX < 1.0 || (scaleX < 1.1 && incrementX < 0) ? 5 : 10; // Finer control at smaller (<1.0) scales + UniFields.SetFloat(s.Fields, "xscalefloor", ((scaleX * 100) + incrementX) / 100, 1.0); } + else if (Math.Abs(incrementX) == 2) + UniFields.SetFloat(s.Fields, "xscalefloor", incrementX < 0 ? scaleX / 2 : scaleX * 2, 1.0); - if(incrementY != 0) + if (Math.Abs(incrementY) == 1) { - double pix = (int)Math.Round(Texture.Height * scaleY) - incrementY; - double newscaleY = Math.Round(pix / Texture.Height, 3); - scaleY = (newscaleY == 0 ? scaleY * -1 : newscaleY); - UniFields.SetFloat(s.Fields, "yscalefloor", scaleY, 1.0); + incrementY *= scaleY < 1.0 || (scaleY < 1.1 && incrementY < 0) ? 5 : 10; // Finer control at smaller (<1.0) scales + UniFields.SetFloat(s.Fields, "yscalefloor", ((scaleY * 100) + incrementY) / 100, 1.0); } + else if (Math.Abs(incrementY) == 2) + UniFields.SetFloat(s.Fields, "yscalefloor", incrementY < 0 ? scaleY / 2 : scaleY * 2, 1.0); + + scaleX = s.Fields.GetValue("xscalefloor", 1.0); + scaleY = s.Fields.GetValue("yscalefloor", 1.0); mode.SetActionResult("Floor scale changed to " + scaleX.ToString("F03", CultureInfo.InvariantCulture) + ", " + scaleY.ToString("F03", CultureInfo.InvariantCulture) + " (" + (int)Math.Round(Texture.Width / scaleX) + " x " + (int)Math.Round(Texture.Height / scaleY) + ")."); } diff --git a/Source/Plugins/BuilderModes/VisualModes/VisualMiddle3D.cs b/Source/Plugins/BuilderModes/VisualModes/VisualMiddle3D.cs index 2ff765416..07802e64c 100755 --- a/Source/Plugins/BuilderModes/VisualModes/VisualMiddle3D.cs +++ b/Source/Plugins/BuilderModes/VisualModes/VisualMiddle3D.cs @@ -516,20 +516,10 @@ namespace CodeImp.DoomBuilder.BuilderModes target.Fields.BeforeFieldsChange(); if(incrementX != 0) - { - double pix = (int)Math.Round(Texture.Width * scaleX) - incrementX; - double newscaleX = Math.Round(pix / Texture.Width, 3); - scaleX = (newscaleX == 0 ? scaleX * -1 : newscaleX); - UniFields.SetFloat(target.Fields, "scalex_mid", scaleX, 1.0); - } + UniFields.SetFloat(target.Fields, "scalex_mid", scaleX + (incrementX / 10), 1.0); if(incrementY != 0) - { - double pix = (int)Math.Round(Texture.Height * scaleY) - incrementY; - double newscaleY = Math.Round(pix / Texture.Height, 3); - scaleY = (newscaleY == 0 ? scaleY * -1 : newscaleY); - UniFields.SetFloat(target.Fields, "scaley_mid", scaleY, 1.0); - } + UniFields.SetFloat(target.Fields, "scaley_mid", scaleY + (incrementY / 10), 1.0); // Update the model sector to update all 3d floors mode.GetVisualSector(extrafloor.Linedef.Front.Sector).UpdateSectorGeometry(false); -- GitLab