mirror of
https://git.do.srb2.org/STJr/UltimateZoneBuilder.git
synced 2024-11-28 14:42:16 +00:00
5e71585c99
Removed "Adjust heights to match relatively with surrounding sector" option from Preferences -> Pasting, because sector height adjustments are now handled by Edit Selection mode. Fixed, Sector info panel: in some cases 0 deg. floor/ceiling texture rotation was triggering texture offset/scale/rotation UI parts to be shown. Fixed even more cases when sidedefs belonging to linedefs, which were moved on top of existing linedefs, were incorrectly reassigned when applying Edit Selection and Drag Geometry modes. Fixed, Bridge mode: in some cases calculated floor/ceiling heights were not applied to the sectors created by the mode. Changed, internal: changed program's CurrentCulture to InvariantCulture.
393 lines
10 KiB
C#
393 lines
10 KiB
C#
|
|
#region ================== Copyright (c) 2007 Pascal vd Heiden
|
|
|
|
/*
|
|
* Copyright (c) 2007 Pascal vd Heiden, www.codeimp.com
|
|
* This program is released under GNU General Public License
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
*/
|
|
|
|
#endregion
|
|
|
|
#region ================== Namespaces
|
|
|
|
using System;
|
|
using System.Windows.Forms;
|
|
using CodeImp.DoomBuilder.Geometry;
|
|
|
|
#endregion
|
|
|
|
namespace CodeImp.DoomBuilder.BuilderModes
|
|
{
|
|
public partial class EditSelectionPanel : UserControl
|
|
{
|
|
#region ================== Constants
|
|
|
|
#endregion
|
|
|
|
#region ================== Variables
|
|
|
|
// Editing mode
|
|
private readonly EditSelectionMode mode;
|
|
|
|
// Input
|
|
private bool userinput;
|
|
private bool preventchanges; //mxd
|
|
|
|
// Values
|
|
private Vector2D orgpos;
|
|
private Vector2D orgsize;
|
|
private Vector2D abspos;
|
|
private Vector2D relpos;
|
|
private Vector2D abssize;
|
|
private Vector2D relsize;
|
|
private float absrotate;
|
|
|
|
#endregion
|
|
|
|
#region ================== Constructor
|
|
|
|
// Constructor
|
|
public EditSelectionPanel(EditSelectionMode mode)
|
|
{
|
|
InitializeComponent();
|
|
this.mode = mode;
|
|
|
|
//mxd
|
|
if(General.Map.UDMF)
|
|
{
|
|
preciseposition.Checked = mode.UsePrecisePosition;
|
|
preciseposition.Enabled = true;
|
|
preciseposition.CheckedChanged += preciseposition_CheckedChanged;
|
|
}
|
|
else
|
|
{
|
|
preciseposition.Checked = false;
|
|
preciseposition.Enabled = false;
|
|
}
|
|
|
|
//mxd. Otherwise the focus will go to one of TextBoxes
|
|
// and stay there forever preventing tab collapsing when in collapsed mode
|
|
label1.Focus();
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region ================== Methods
|
|
|
|
// This sets the original size
|
|
public void ShowOriginalValues(Vector2D pos, Vector2D size)
|
|
{
|
|
// Set values
|
|
this.orgpos = pos;
|
|
this.orgsize = size;
|
|
|
|
// Set controls
|
|
orgposx.Text = pos.x.ToString();
|
|
orgposy.Text = pos.y.ToString();
|
|
orgsizex.Text = size.x.ToString();
|
|
orgsizey.Text = size.y.ToString();
|
|
}
|
|
|
|
// This sets the dynamic values
|
|
public void ShowCurrentValues(Vector2D pos, Vector2D relpos, Vector2D size, Vector2D relsize, float rotation)
|
|
{
|
|
// Set values
|
|
this.abspos = pos;
|
|
this.relpos = relpos;
|
|
this.abssize = size;
|
|
this.relsize = relsize;
|
|
this.absrotate = Angle2D.RadToDeg(rotation);
|
|
|
|
// Set controls
|
|
absposx.Text = pos.x.ToString("0.#");
|
|
absposy.Text = pos.y.ToString("0.#");
|
|
relposx.Text = relpos.x.ToString("0.#");
|
|
relposy.Text = relpos.y.ToString("0.#");
|
|
abssizex.Text = size.x.ToString("0.#");
|
|
abssizey.Text = size.y.ToString("0.#");
|
|
relsizex.Text = relsize.x.ToString("0.#");
|
|
relsizey.Text = relsize.y.ToString("0.#");
|
|
absrot.Text = this.absrotate.ToString("0.#");
|
|
|
|
userinput = false;
|
|
}
|
|
|
|
//mxd
|
|
internal void SetTextureTransformSettings(bool enable)
|
|
{
|
|
// Disable groups?
|
|
if(!enable)
|
|
{
|
|
ceiltexgroup.Enabled = false;
|
|
floortexgroup.Enabled = false;
|
|
ceiltexall.Enabled = false;
|
|
floortexall.Enabled = false;
|
|
return;
|
|
}
|
|
|
|
// Update checkboxes
|
|
preventchanges = true;
|
|
|
|
floortexoffset.Checked = mode.TransformFloorOffsets;
|
|
ceiltexoffset.Checked = mode.TransformCeilingOffsets;
|
|
floortexrotation.Checked = mode.RotateFloorOffsets;
|
|
ceiltexrotation.Checked = mode.RotateCeilingOffsets;
|
|
floortexscale.Checked = mode.ScaleFloorOffsets;
|
|
ceiltexscale.Checked = mode.ScaleCeilingOffsets;
|
|
floortexall.Checked = (mode.TransformFloorOffsets && mode.RotateFloorOffsets && mode.ScaleFloorOffsets);
|
|
ceiltexall.Checked = (mode.TransformCeilingOffsets && mode.RotateCeilingOffsets && mode.ScaleCeilingOffsets);
|
|
|
|
preventchanges = false;
|
|
}
|
|
|
|
//mxd
|
|
internal void SetHeightAdjustMode(EditSelectionMode.HeightAdjustMode adjustmode, bool enable)
|
|
{
|
|
preventchanges = true;
|
|
heightmode.SelectedIndex = (int)adjustmode;
|
|
heightmode.Enabled = enable;
|
|
preventchanges = false;
|
|
}
|
|
|
|
//mxd
|
|
private void UpdateAllFloorTransformsCheckbox()
|
|
{
|
|
preventchanges = true;
|
|
|
|
int i = 0;
|
|
if(floortexoffset.Checked) i++;
|
|
if(floortexrotation.Checked) i++;
|
|
if(floortexscale.Checked) i++;
|
|
floortexall.Checked = (i == 3);
|
|
|
|
preventchanges = false;
|
|
}
|
|
|
|
//mxd
|
|
private void UpdateAllCeilingTransformsCheckbox()
|
|
{
|
|
preventchanges = true;
|
|
|
|
int i = 0;
|
|
if(ceiltexoffset.Checked) i++;
|
|
if(ceiltexrotation.Checked) i++;
|
|
if(ceiltexscale.Checked) i++;
|
|
ceiltexall.Checked = (i == 3);
|
|
|
|
preventchanges = false;
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region ================== Events
|
|
|
|
// User input given
|
|
private void WhenTextChanged(object sender, EventArgs e)
|
|
{
|
|
userinput = true;
|
|
}
|
|
|
|
private void absposx_Validated(object sender, EventArgs e)
|
|
{
|
|
if(userinput)
|
|
mode.SetAbsPosX(absposx.GetResultFloat(this.abspos.x));
|
|
}
|
|
|
|
private void absposy_Validated(object sender, EventArgs e)
|
|
{
|
|
if(userinput)
|
|
mode.SetAbsPosY(absposy.GetResultFloat(this.abspos.y));
|
|
}
|
|
|
|
private void relposx_Validated(object sender, EventArgs e)
|
|
{
|
|
if(userinput)
|
|
mode.SetRelPosX(relposx.GetResultFloat(this.relpos.x));
|
|
}
|
|
|
|
private void relposy_Validated(object sender, EventArgs e)
|
|
{
|
|
if(userinput)
|
|
mode.SetRelPosY(relposy.GetResultFloat(this.relpos.y));
|
|
}
|
|
|
|
private void abssizex_Validated(object sender, EventArgs e)
|
|
{
|
|
if(userinput)
|
|
mode.SetAbsSizeX(abssizex.GetResultFloat(this.abssize.x));
|
|
}
|
|
|
|
private void abssizey_Validated(object sender, EventArgs e)
|
|
{
|
|
if(userinput)
|
|
mode.SetAbsSizeY(abssizey.GetResultFloat(this.abssize.y));
|
|
}
|
|
|
|
private void relsizex_Validated(object sender, EventArgs e)
|
|
{
|
|
if(userinput)
|
|
mode.SetRelSizeX(relsizex.GetResultFloat(this.relsize.x));
|
|
}
|
|
|
|
private void relsizey_Validated(object sender, EventArgs e)
|
|
{
|
|
if(userinput)
|
|
mode.SetRelSizeY(relsizey.GetResultFloat(this.relsize.y));
|
|
}
|
|
|
|
private void absrot_Validated(object sender, EventArgs e)
|
|
{
|
|
if(userinput)
|
|
{
|
|
float rad = Angle2D.DegToRad(absrot.GetResultFloat(this.absrotate));
|
|
mode.SetAbsRotation(rad);
|
|
}
|
|
}
|
|
|
|
private void fliph_Click(object sender, EventArgs e)
|
|
{
|
|
General.Actions.InvokeAction("buildermodes_flipselectionh");
|
|
General.Interface.FocusDisplay();
|
|
}
|
|
|
|
private void flipv_Click(object sender, EventArgs e)
|
|
{
|
|
General.Actions.InvokeAction("buildermodes_flipselectionv");
|
|
General.Interface.FocusDisplay();
|
|
}
|
|
|
|
private void orgposx_Click(object sender, EventArgs e)
|
|
{
|
|
mode.SetAbsPosX(orgpos.x);
|
|
General.Interface.FocusDisplay();
|
|
}
|
|
|
|
private void orgposy_Click(object sender, EventArgs e)
|
|
{
|
|
mode.SetAbsPosY(orgpos.y);
|
|
General.Interface.FocusDisplay();
|
|
}
|
|
|
|
private void orgsizex_Click(object sender, EventArgs e)
|
|
{
|
|
mode.SetAbsSizeX(orgsize.x);
|
|
General.Interface.FocusDisplay();
|
|
}
|
|
|
|
private void orgsizey_Click(object sender, EventArgs e)
|
|
{
|
|
mode.SetAbsSizeY(orgsize.y);
|
|
General.Interface.FocusDisplay();
|
|
}
|
|
|
|
//mxd
|
|
private void floortexoffset_CheckedChanged(object sender, EventArgs e)
|
|
{
|
|
if(preventchanges) return;
|
|
mode.TransformFloorOffsets = floortexoffset.Checked;
|
|
UpdateAllFloorTransformsCheckbox();
|
|
General.Interface.FocusDisplay();
|
|
}
|
|
|
|
//mxd
|
|
private void ceiltexoffset_CheckedChanged(object sender, EventArgs e)
|
|
{
|
|
if(preventchanges) return;
|
|
mode.TransformCeilingOffsets = ceiltexoffset.Checked;
|
|
UpdateAllCeilingTransformsCheckbox();
|
|
General.Interface.FocusDisplay();
|
|
}
|
|
|
|
//mxd
|
|
private void floortexrotation_CheckedChanged(object sender, EventArgs e)
|
|
{
|
|
if(preventchanges) return;
|
|
mode.RotateFloorOffsets = floortexrotation.Checked;
|
|
UpdateAllFloorTransformsCheckbox();
|
|
General.Interface.FocusDisplay();
|
|
}
|
|
|
|
//mxd
|
|
private void ceiltexrotation_CheckedChanged(object sender, EventArgs e)
|
|
{
|
|
if(preventchanges) return;
|
|
mode.RotateCeilingOffsets = ceiltexrotation.Checked;
|
|
UpdateAllCeilingTransformsCheckbox();
|
|
General.Interface.FocusDisplay();
|
|
}
|
|
|
|
//mxd
|
|
private void floortexscale_CheckedChanged(object sender, EventArgs e)
|
|
{
|
|
if(preventchanges) return;
|
|
mode.ScaleFloorOffsets = floortexscale.Checked;
|
|
UpdateAllFloorTransformsCheckbox();
|
|
General.Interface.FocusDisplay();
|
|
}
|
|
|
|
//mxd
|
|
private void ceiltexscale_CheckedChanged(object sender, EventArgs e)
|
|
{
|
|
if(preventchanges) return;
|
|
mode.ScaleCeilingOffsets = ceiltexscale.Checked;
|
|
UpdateAllCeilingTransformsCheckbox();
|
|
General.Interface.FocusDisplay();
|
|
}
|
|
|
|
//mxd
|
|
private void floortexall_CheckedChanged(object sender, EventArgs e)
|
|
{
|
|
if(preventchanges) return;
|
|
preventchanges = true;
|
|
|
|
floortexoffset.Checked = floortexall.Checked;
|
|
floortexrotation.Checked = floortexall.Checked;
|
|
floortexscale.Checked = floortexall.Checked;
|
|
|
|
mode.TransformFloorOffsets = floortexoffset.Checked;
|
|
mode.RotateFloorOffsets = floortexrotation.Checked;
|
|
mode.ScaleFloorOffsets = floortexscale.Checked;
|
|
|
|
preventchanges = false;
|
|
}
|
|
|
|
//mxd
|
|
private void ceiltexall_CheckedChanged(object sender, EventArgs e)
|
|
{
|
|
if(preventchanges) return;
|
|
preventchanges = true;
|
|
|
|
ceiltexoffset.Checked = ceiltexall.Checked;
|
|
ceiltexrotation.Checked = ceiltexall.Checked;
|
|
ceiltexscale.Checked = ceiltexall.Checked;
|
|
|
|
mode.TransformCeilingOffsets = ceiltexoffset.Checked;
|
|
mode.RotateCeilingOffsets = ceiltexrotation.Checked;
|
|
mode.ScaleCeilingOffsets = ceiltexscale.Checked;
|
|
|
|
preventchanges = false;
|
|
}
|
|
|
|
//mxd
|
|
private void preciseposition_CheckedChanged(object sender, EventArgs e)
|
|
{
|
|
mode.UsePrecisePosition = preciseposition.Checked;
|
|
General.Interface.FocusDisplay();
|
|
}
|
|
|
|
//mxd
|
|
private void heightmode_SelectedIndexChanged(object sender, EventArgs e)
|
|
{
|
|
if(preventchanges || heightmode.SelectedIndex == -1) return;
|
|
mode.SectorHeightAdjustMode = (EditSelectionMode.HeightAdjustMode)heightmode.SelectedIndex;
|
|
}
|
|
|
|
#endregion
|
|
}
|
|
}
|