mirror of
https://git.do.srb2.org/STJr/ZoneBuilder.git
synced 2024-11-15 00:51:39 +00:00
972d55f066
Changed, Sound Propagation mode: all sound zones are now shown when no sector is highlighted. Changed, Sound Environments mode: the mode is now available only in UDMF map format. Changed, Color Picker plugin: the plugin functionality is no longer available in Doom map format. Restored the ability to create superimposed lines by dragging them with "Snap to Geometry" mode disabled. Fixed, Sound Propagation mode: fixed a crash when a single-sided linedef had "Block Sound" flag. Fixed, Find & Replace mode: in some cases "Find Sector/Sidedef/Linedef/Thing flags" search modes failed to find map elements with required flags. Fixed, Edit Selection mode: in some cases incorrect geometry was created after applying multipart sector edit when "Replace with Dragged Geometry" mode was enabled. Fixed a crash caused by eventual GDI font objects overflow.
395 lines
9.8 KiB
C#
395 lines
9.8 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 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
|
|
preventchanges = true;
|
|
if(General.Map.UDMF)
|
|
{
|
|
preciseposition.Checked = mode.UsePrecisePosition;
|
|
preciseposition.Enabled = true;
|
|
}
|
|
else
|
|
{
|
|
preciseposition.Checked = false;
|
|
preciseposition.Enabled = false;
|
|
}
|
|
preventchanges = 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)
|
|
{
|
|
if(preventchanges) return;
|
|
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
|
|
}
|
|
}
|