diff --git a/Source/Core/Controls/ButtonsNumericTextbox.cs b/Source/Core/Controls/ButtonsNumericTextbox.cs index 918384ac..fa0d277a 100644 --- a/Source/Core/Controls/ButtonsNumericTextbox.cs +++ b/Source/Core/Controls/ButtonsNumericTextbox.cs @@ -41,6 +41,7 @@ namespace CodeImp.DoomBuilder.Controls private StepsList steps; private int stepsize = 1; private float stepsizeFloat = 1.0f; //mxd + private bool wrapsteps; //mxd #endregion @@ -54,7 +55,8 @@ namespace CodeImp.DoomBuilder.Controls override public string Text { get { return textbox.Text; } set { textbox.Text = value; } } internal NumericTextbox Textbox { get { return textbox; } } public StepsList StepValues { get { return steps; } set { steps = value; } } - + public bool ButtonStepsWrapAround { get { return wrapsteps; } set { wrapsteps = value; } } + #endregion #region ================== Constructor / Disposer @@ -111,9 +113,9 @@ namespace CodeImp.DoomBuilder.Controls if(steps != null) { if(buttons.Value < 0) - textbox.Text = steps.GetNextHigher(textbox.GetResult(0)).ToString(); + textbox.Text = steps.GetNextHigherWrap(textbox.GetResult(0), wrapsteps).ToString(); //mxd else if(buttons.Value > 0) - textbox.Text = steps.GetNextLower(textbox.GetResult(0)).ToString(); + textbox.Text = steps.GetNextLowerWrap(textbox.GetResult(0), wrapsteps).ToString(); //mxd } else if(textbox.AllowDecimal) { diff --git a/Source/Core/Controls/NumericTextbox.cs b/Source/Core/Controls/NumericTextbox.cs index afbe9bbb..2974e8c2 100644 --- a/Source/Core/Controls/NumericTextbox.cs +++ b/Source/Core/Controls/NumericTextbox.cs @@ -193,7 +193,8 @@ namespace CodeImp.DoomBuilder.Controls public bool CheckIsRelative() { // Prefixed with ++, --, * or /? - return (this.Text.StartsWith("++") || this.Text.StartsWith("--") || this.Text.StartsWith("*") || this.Text.StartsWith("/")); //mxd + return ( (this.Text.Length > 2 && (this.Text.StartsWith("++") || this.Text.StartsWith("--"))) || + (this.Text.Length > 1 && (this.Text.StartsWith("*") || this.Text.StartsWith("/"))) ); //mxd } // This determines the result value diff --git a/Source/Core/Controls/SectorSlopeControl.cs b/Source/Core/Controls/SectorSlopeControl.cs index 191f78fa..8102e932 100644 --- a/Source/Core/Controls/SectorSlopeControl.cs +++ b/Source/Core/Controls/SectorSlopeControl.cs @@ -54,11 +54,6 @@ namespace CodeImp.DoomBuilder.Controls #region ================== Methods public void SetValues(float anglexy, float anglez, float offset, bool first) { - blockUpdate = true; - - //dbg - //if(first) Console.WriteLine("First: anglexy=" + anglexy + "; anglez=" + anglez + "; offset=" + offset); - if (first) { // Set values this.anglexy = anglexy; @@ -70,8 +65,6 @@ namespace CodeImp.DoomBuilder.Controls if(!float.IsNaN(this.anglez) && this.anglez != anglez) this.anglez = float.NaN; if(!float.IsNaN(this.offset) && this.offset != offset) this.offset = float.NaN; } - - blockUpdate = false; } public void SetOffset(float offset, bool first) { @@ -197,6 +190,7 @@ namespace CodeImp.DoomBuilder.Controls } private void cbuselineangles_CheckedChanged(object sender, EventArgs e) { + sloperotation.ButtonStepsWrapAround = cbuselineangles.Checked; if(blockUpdate) return; if(OnUseLineAnglesChanged != null) OnUseLineAnglesChanged(this, EventArgs.Empty); } diff --git a/Source/Core/General/StepsList.cs b/Source/Core/General/StepsList.cs index b6f1696b..f541759e 100644 --- a/Source/Core/General/StepsList.cs +++ b/Source/Core/General/StepsList.cs @@ -65,14 +65,32 @@ namespace CodeImp.DoomBuilder return base[low]; } + //mxd. This returns a step higher, or lowest step if level is already the highest possible value + public int GetNextHigherWrap(int level, bool wraparound) + { + int result = GetNextHigher(level); + if(!wraparound) return result; + return (result == level ? this[0] : result); + } + + //mxd. This returns a step lower, or highest step if level is already the lowest possible value + public int GetNextLowerWrap(int level, bool wraparound) + { + int result = GetNextLower(level); + if(!wraparound) return result; + return (result == level ? this[this.Count - 1] : result); + } + //mxd. This returns a step higher for UDMF relative light range (-255..255) - public int GetNextHigher(int level, bool absolute) { + public int GetNextHigher(int level, bool absolute) + { if(absolute || level >= 0) return GetNextHigher(level); return -GetNextLower(Math.Abs(level)); } //mxd. This returns a step lower for UDMF relative light range (-255..255) - public int GetNextLower(int level, bool absolute) { + public int GetNextLower(int level, bool absolute) + { if(absolute || level > 0) return GetNextLower(level); return -GetNextHigher(Math.Abs(level)); } diff --git a/Source/Core/Windows/SectorEditForm.Designer.cs b/Source/Core/Windows/SectorEditForm.Designer.cs index c87aaa7a..0bf58d4a 100644 --- a/Source/Core/Windows/SectorEditForm.Designer.cs +++ b/Source/Core/Windows/SectorEditForm.Designer.cs @@ -160,12 +160,12 @@ namespace CodeImp.DoomBuilder.Windows // groupfloorceiling.BackColor = System.Drawing.Color.Transparent; groupfloorceiling.Controls.Add(label7); + groupfloorceiling.Controls.Add(label5); + groupfloorceiling.Controls.Add(label6); groupfloorceiling.Controls.Add(this.heightoffset); groupfloorceiling.Controls.Add(this.brightness); groupfloorceiling.Controls.Add(this.ceilingheight); - groupfloorceiling.Controls.Add(label6); groupfloorceiling.Controls.Add(label9); - groupfloorceiling.Controls.Add(label5); groupfloorceiling.Controls.Add(label2); groupfloorceiling.Controls.Add(this.sectorheightlabel); groupfloorceiling.Controls.Add(label4); @@ -199,6 +199,7 @@ namespace CodeImp.DoomBuilder.Windows this.heightoffset.AllowRelative = false; this.heightoffset.ButtonStep = 8; this.heightoffset.ButtonStepFloat = 1F; + this.heightoffset.ButtonStepsWrapAround = false; this.heightoffset.Location = new System.Drawing.Point(99, 95); this.heightoffset.Name = "heightoffset"; this.heightoffset.Size = new System.Drawing.Size(88, 24); @@ -209,10 +210,11 @@ namespace CodeImp.DoomBuilder.Windows // brightness // this.brightness.AllowDecimal = false; - this.brightness.AllowNegative = true; + this.brightness.AllowNegative = false; this.brightness.AllowRelative = true; this.brightness.ButtonStep = 8; this.brightness.ButtonStepFloat = 1F; + this.brightness.ButtonStepsWrapAround = false; this.brightness.Location = new System.Drawing.Point(99, 154); this.brightness.Name = "brightness"; this.brightness.Size = new System.Drawing.Size(73, 24); @@ -227,6 +229,7 @@ namespace CodeImp.DoomBuilder.Windows this.ceilingheight.AllowRelative = true; this.ceilingheight.ButtonStep = 8; this.ceilingheight.ButtonStepFloat = 1F; + this.ceilingheight.ButtonStepsWrapAround = false; this.ceilingheight.Location = new System.Drawing.Point(99, 35); this.ceilingheight.Name = "ceilingheight"; this.ceilingheight.Size = new System.Drawing.Size(88, 24); @@ -311,6 +314,7 @@ namespace CodeImp.DoomBuilder.Windows this.floorheight.AllowRelative = true; this.floorheight.ButtonStep = 8; this.floorheight.ButtonStepFloat = 1F; + this.floorheight.ButtonStepsWrapAround = false; this.floorheight.Location = new System.Drawing.Point(99, 65); this.floorheight.Name = "floorheight"; this.floorheight.Size = new System.Drawing.Size(88, 24); diff --git a/Source/Core/Windows/SectorEditForm.resx b/Source/Core/Windows/SectorEditForm.resx index c55e153e..e0a9f880 100644 --- a/Source/Core/Windows/SectorEditForm.resx +++ b/Source/Core/Windows/SectorEditForm.resx @@ -135,9 +135,6 @@ False - - False - False @@ -150,10 +147,10 @@ 17, 17 - + False - + False diff --git a/Source/Core/Windows/SectorEditFormUDMF.Designer.cs b/Source/Core/Windows/SectorEditFormUDMF.Designer.cs index 54b4b66c..bab64462 100644 --- a/Source/Core/Windows/SectorEditFormUDMF.Designer.cs +++ b/Source/Core/Windows/SectorEditFormUDMF.Designer.cs @@ -190,10 +190,11 @@ // brightness // this.brightness.AllowDecimal = false; - this.brightness.AllowNegative = true; + this.brightness.AllowNegative = false; this.brightness.AllowRelative = true; this.brightness.ButtonStep = 8; this.brightness.ButtonStepFloat = 1F; + this.brightness.ButtonStepsWrapAround = false; this.brightness.Location = new System.Drawing.Point(125, 84); this.brightness.Name = "brightness"; this.brightness.Size = new System.Drawing.Size(81, 24); @@ -208,6 +209,7 @@ this.desaturation.AllowRelative = false; this.desaturation.ButtonStep = 1; this.desaturation.ButtonStepFloat = 0.1F; + this.desaturation.ButtonStepsWrapAround = false; this.desaturation.Location = new System.Drawing.Point(125, 142); this.desaturation.Name = "desaturation"; this.desaturation.Size = new System.Drawing.Size(81, 24); @@ -255,6 +257,7 @@ this.gravity.AllowRelative = true; this.gravity.ButtonStep = 1; this.gravity.ButtonStepFloat = 0.1F; + this.gravity.ButtonStepsWrapAround = false; this.gravity.Location = new System.Drawing.Point(125, 112); this.gravity.Name = "gravity"; this.gravity.Size = new System.Drawing.Size(81, 24); @@ -310,10 +313,10 @@ groupfloorceiling.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); groupfloorceiling.Controls.Add(label15); - groupfloorceiling.Controls.Add(this.heightoffset); - groupfloorceiling.Controls.Add(this.ceilingheight); groupfloorceiling.Controls.Add(label6); groupfloorceiling.Controls.Add(label5); + groupfloorceiling.Controls.Add(this.heightoffset); + groupfloorceiling.Controls.Add(this.ceilingheight); groupfloorceiling.Controls.Add(this.sectorheightlabel); groupfloorceiling.Controls.Add(this.sectorheight); groupfloorceiling.Controls.Add(this.floorheight); @@ -343,6 +346,7 @@ this.heightoffset.AllowRelative = false; this.heightoffset.ButtonStep = 8; this.heightoffset.ButtonStepFloat = 1F; + this.heightoffset.ButtonStepsWrapAround = false; this.heightoffset.Location = new System.Drawing.Point(89, 79); this.heightoffset.Name = "heightoffset"; this.heightoffset.Size = new System.Drawing.Size(88, 24); @@ -357,6 +361,7 @@ this.ceilingheight.AllowRelative = true; this.ceilingheight.ButtonStep = 8; this.ceilingheight.ButtonStepFloat = 1F; + this.ceilingheight.ButtonStepsWrapAround = false; this.ceilingheight.Location = new System.Drawing.Point(89, 19); this.ceilingheight.Name = "ceilingheight"; this.ceilingheight.Size = new System.Drawing.Size(88, 24); @@ -413,6 +418,7 @@ this.floorheight.AllowRelative = true; this.floorheight.ButtonStep = 8; this.floorheight.ButtonStepFloat = 1F; + this.floorheight.ButtonStepsWrapAround = false; this.floorheight.Location = new System.Drawing.Point(89, 49); this.floorheight.Name = "floorheight"; this.floorheight.Size = new System.Drawing.Size(88, 24); @@ -524,7 +530,7 @@ // // floorAngleControl // - this.floorAngleControl.Angle = -270; + this.floorAngleControl.Angle = -540; this.floorAngleControl.AngleOffset = 90; this.floorAngleControl.Location = new System.Drawing.Point(186, 132); this.floorAngleControl.Name = "floorAngleControl"; @@ -559,6 +565,7 @@ this.floorAlpha.AllowRelative = false; this.floorAlpha.ButtonStep = 1; this.floorAlpha.ButtonStepFloat = 0.1F; + this.floorAlpha.ButtonStepsWrapAround = false; this.floorAlpha.Location = new System.Drawing.Point(118, 173); this.floorAlpha.Name = "floorAlpha"; this.floorAlpha.Size = new System.Drawing.Size(62, 24); @@ -583,6 +590,7 @@ this.floorRotation.AllowRelative = true; this.floorRotation.ButtonStep = 5; this.floorRotation.ButtonStepFloat = 1F; + this.floorRotation.ButtonStepsWrapAround = false; this.floorRotation.Location = new System.Drawing.Point(118, 143); this.floorRotation.Name = "floorRotation"; this.floorRotation.Size = new System.Drawing.Size(62, 24); @@ -619,6 +627,7 @@ this.floorBrightness.AllowRelative = true; this.floorBrightness.ButtonStep = 16; this.floorBrightness.ButtonStepFloat = 1F; + this.floorBrightness.ButtonStepsWrapAround = false; this.floorBrightness.Location = new System.Drawing.Point(118, 113); this.floorBrightness.Name = "floorBrightness"; this.floorBrightness.Size = new System.Drawing.Size(62, 24); @@ -721,7 +730,7 @@ // // ceilAngleControl // - this.ceilAngleControl.Angle = -270; + this.ceilAngleControl.Angle = -540; this.ceilAngleControl.AngleOffset = 90; this.ceilAngleControl.Location = new System.Drawing.Point(186, 132); this.ceilAngleControl.Name = "ceilAngleControl"; @@ -756,6 +765,7 @@ this.ceilAlpha.AllowRelative = false; this.ceilAlpha.ButtonStep = 1; this.ceilAlpha.ButtonStepFloat = 0.1F; + this.ceilAlpha.ButtonStepsWrapAround = false; this.ceilAlpha.Location = new System.Drawing.Point(118, 173); this.ceilAlpha.Name = "ceilAlpha"; this.ceilAlpha.Size = new System.Drawing.Size(62, 24); @@ -780,6 +790,7 @@ this.ceilRotation.AllowRelative = true; this.ceilRotation.ButtonStep = 5; this.ceilRotation.ButtonStepFloat = 1F; + this.ceilRotation.ButtonStepsWrapAround = false; this.ceilRotation.Location = new System.Drawing.Point(118, 143); this.ceilRotation.Name = "ceilRotation"; this.ceilRotation.Size = new System.Drawing.Size(62, 24); @@ -817,6 +828,7 @@ this.ceilBrightness.AllowRelative = true; this.ceilBrightness.ButtonStep = 16; this.ceilBrightness.ButtonStepFloat = 1F; + this.ceilBrightness.ButtonStepsWrapAround = false; this.ceilBrightness.Location = new System.Drawing.Point(118, 113); this.ceilBrightness.Name = "ceilBrightness"; this.ceilBrightness.Size = new System.Drawing.Size(62, 24); diff --git a/Source/Core/Windows/SectorEditFormUDMF.cs b/Source/Core/Windows/SectorEditFormUDMF.cs index c89026d3..2433bcad 100644 --- a/Source/Core/Windows/SectorEditFormUDMF.cs +++ b/Source/Core/Windows/SectorEditFormUDMF.cs @@ -646,10 +646,12 @@ namespace CodeImp.DoomBuilder.Windows } private void cbUseCeilLineAngles_CheckedChanged(object sender, EventArgs e) { + ceilRotation.ButtonStepsWrapAround = cbUseCeilLineAngles.Checked; ceilRotation.StepValues = (cbUseCeilLineAngles.Checked ? anglesteps : null); } private void cbUseFloorLineAngles_CheckedChanged(object sender, EventArgs e) { + floorRotation.ButtonStepsWrapAround = cbUseFloorLineAngles.Checked; floorRotation.StepValues = (cbUseFloorLineAngles.Checked ? anglesteps : null); } @@ -700,14 +702,6 @@ namespace CodeImp.DoomBuilder.Windows s.Brightness = sectorprops[s].Brightness; //update values } else { - //clamp value? - int val = brightness.GetResult(0); - int clampedVal = General.Clamp(val, 0, 255); - if(val != clampedVal) { - brightness.Text = clampedVal.ToString(); - return; - } - foreach(Sector s in sectors) s.Brightness = General.Clamp(brightness.GetResult(sectorprops[s].Brightness), General.Map.FormatInterface.MinBrightness, General.Map.FormatInterface.MaxBrightness); } @@ -1002,85 +996,45 @@ namespace CodeImp.DoomBuilder.Windows private void SetupSlopes(Sector s, bool first) { if(s.CeilingSlope.GetLengthSq() > 0) { - float anglexy = (float) Math.Round(Angle2D.RadToDeg(s.CeilingSlope.GetAngleXY()), 1); - float anglez = (float)(Math.Round(-Angle2D.RadToDeg(s.CeilingSlope.GetAngleZ()) + 90, 1) % 90 + 90); + float anglexy = (float)Math.Round(Angle2D.RadToDeg(s.CeilingSlope.GetAngleXY()), 1); + float anglez = (float)(270 - Math.Round(Angle2D.RadToDeg(s.CeilingSlope.GetAngleZ()), 1)); + float offset = (float)Math.Round(GetSlopeOffset(s, s.CeilingSlopeOffset, ceilingslopecontrol.PivotMode, false), 1); if (anglexy == 180.0f) { anglexy = 0; anglez = -anglez; } - ceilingslopecontrol.SetValues(anglexy, anglez, (float)Math.Round(-s.CeilingSlopeOffset, 1), first); + ceilingslopecontrol.SetValues(anglexy, anglez, offset, first); } else { ceilingslopecontrol.SetValues(0f, 0f, s.CeilHeight, first); } if(s.FloorSlope.GetLengthSq() > 0) { - //dbg - Console.WriteLine("1 anglez=" + Angle2D.RadToDeg(s.FloorSlope.GetAngleZ())); - Console.WriteLine("2 anglez=" + Math.Round(Angle2D.RadToDeg(s.FloorSlope.GetAngleZ()) - 90, 1)); - Console.WriteLine("3 anglez=" + (float)(Math.Round(Angle2D.RadToDeg(s.FloorSlope.GetAngleZ()) - 90, 1) % 90)); - - float anglexy = (float) Math.Round(Angle2D.RadToDeg(s.FloorSlope.GetAngleXY()), 1); + float anglexy = (float)Math.Round(Angle2D.RadToDeg(s.FloorSlope.GetAngleXY()), 1); float anglez = (float)(Math.Round(Angle2D.RadToDeg(s.FloorSlope.GetAngleZ()) - 90, 1)); + float offset = (float)Math.Round(GetSlopeOffset(s, -s.FloorSlopeOffset, floorslopecontrol.PivotMode, true), 1); if (anglexy == 180.0f) { anglexy = 0; anglez = -anglez; } - floorslopecontrol.SetValues(anglexy, anglez, (float)Math.Round(-s.FloorSlopeOffset, 1), first); + floorslopecontrol.SetValues(anglexy, anglez, offset, first); } else { - //dbg - Console.WriteLine("Default anglez=" + Angle2D.RadToDeg(s.FloorSlope.GetAngleZ())); - floorslopecontrol.SetValues(0f, 0f, s.FloorHeight, first); } } - /*private float GetSlopeOffset(Sector target, float offset, bool floor) { - //float offset = (float)Math.Round((floor ? target.FloorSlopeOffset : target.CeilingSlopeOffset), 1); - if(float.IsNaN(offset)) { - float storedoffset = (floor ? sectorprops[target].FloorSlopeOffset : sectorprops[target].CeilingSlopeOffset); - if(float.IsNaN(storedoffset)) { - //return an offset based on sector's floor/ceiling height - return (floor ? target.FloorHeight : target.CeilHeight); - } else { - //restore initial value - return storedoffset; - } - } else { - //use current value - return offset; - } - }*/ - private float GetSlopeOffset(Sector target, float offset, SlopePivotMode mode, bool floor) { float validoffset; if (mode == SlopePivotMode.ORIGIN) { if (float.IsNaN(offset)) { - //float storedoffset = (floor ? sectorprops[target].FloorSlopeOffset : sectorprops[target].CeilingSlopeOffset); validoffset = (floor ? sectorprops[target].FloorSlopeOffset : sectorprops[target].CeilingSlopeOffset); - /*if(float.IsNaN(storedoffset)) { - //return an offset based on sector's floor/ceiling height - validoffset = (floor ? target.FloorHeight : target.CeilHeight); - } else { - //restore initial value - validoffset = storedoffset; - }*/ - - //dbg - if(!floor) Console.WriteLine("1: validoffset=" + validoffset); } else { //use current value validoffset = offset; - - //dbg - if(!floor) Console.WriteLine("2: validoffset=" + validoffset); } } else { //use virtual value validoffset = (floor ? sectorprops[target].VirtualFloorSlopeOffset : sectorprops[target].VirtualCeilingSlopeOffset); - - //dbg - if(!floor) Console.WriteLine("3: validoffset=" + validoffset); } switch(mode) { @@ -1117,12 +1071,6 @@ namespace CodeImp.DoomBuilder.Windows { anglexy = (float.IsNaN(ceilingslopecontrol.AngleXY) ? sectorprops[s].CeilingSlopeAngleXY : ceilingslopecontrol.AngleXY); anglez = (float.IsNaN(ceilingslopecontrol.AngleZ) ? sectorprops[s].CeilingSlopeAngleZ : ceilingslopecontrol.AngleZ + 90); - - /*if (s.CeilingSlope.GetLengthSq() > 0) { - s.CeilingSlopeOffset = SetSlopeOffset(ceilingslopecontrol.Offset, sectorprops[i].CeilingSlopeOffset, i); - } else { - s.CeilingSlopeOffset = s.CeilHeight; - }*/ if (anglexy == 0 && anglez == 90) { s.CeilingSlope = new Vector3D(); } else { @@ -1197,28 +1145,41 @@ namespace CodeImp.DoomBuilder.Windows s.FloorSlopeOffset = GetSlopeOffset(s, -floorslopecontrol.Offset, floorslopecontrol.PivotMode, true); s.UpdateNeeded = true; } + General.Map.IsChanged = true; if(OnValuesChanged != null) OnValuesChanged(this, EventArgs.Empty); } private void ceilingslopecontrol_OnResetClicked(object sender, EventArgs e) { + ceilingslopecontrol.SetOffset(General.GetByIndex(sectors, 0).CeilHeight, true); + foreach(Sector s in sectors) { s.CeilingSlope = new Vector3D(); s.CeilingSlopeOffset = float.NaN; s.UpdateNeeded = true; + ceilingslopecontrol.SetOffset(s.CeilHeight, false); } + + ceilingslopecontrol.UpdateOffset(); + General.Map.IsChanged = true; if(OnValuesChanged != null) OnValuesChanged(this, EventArgs.Empty); } private void floorslopecontrol_OnResetClicked(object sender, EventArgs e) { + floorslopecontrol.SetOffset(General.GetByIndex(sectors, 0).FloorHeight, true); + foreach(Sector s in sectors) { s.FloorSlope = new Vector3D(); s.FloorSlopeOffset = float.NaN; s.UpdateNeeded = true; + floorslopecontrol.SetOffset(s.FloorHeight, false); } + + floorslopecontrol.UpdateOffset(); + General.Map.IsChanged = true; if(OnValuesChanged != null) OnValuesChanged(this, EventArgs.Empty); }