mirror of
https://git.do.srb2.org/STJr/ZoneBuilder.git
synced 2024-11-15 09:01:40 +00:00
fe61fe3af8
Updated, Curve Linedefs mode: changing angle by mouse-dragging when "Fixed circular curve" option is enabled is now performed in a more predictable way. Updated, Curve Linedefs mode: generated geometry is now merged with existing geometry. Added, Curve Linedefs mode: a hint label is now displayed when modifying settings using mouse-dragging. Added, Curve Linedefs mode: number of curve vertices can now be changed using LMB+RMB-drag.
134 lines
4.2 KiB
C#
134 lines
4.2 KiB
C#
using System;
|
|
using System.Windows.Forms;
|
|
|
|
namespace CodeImp.DoomBuilder.BuilderModes.Interface
|
|
{
|
|
public partial class CurveLinedefsOptionsPanel : UserControl
|
|
{
|
|
#region ================== Event Handlers
|
|
|
|
public event EventHandler OnValueChanged;
|
|
|
|
#endregion
|
|
|
|
#region ================== Variables
|
|
|
|
private bool blockevents;
|
|
|
|
#endregion
|
|
|
|
#region ================== Properties
|
|
|
|
public int Vertices { get { return (int)verts.Value; } set { verts.Value = General.Clamp(value, (int)verts.Minimum, (int)verts.Maximum); } }
|
|
public int Distance { get { return (int)distance.Value; } set { distance.Value = General.Clamp(value, (int)distance.Minimum, (int)distance.Maximum); } }
|
|
public int DistanceIncrement { get { return (int)distance.Increment; } }
|
|
public int Angle { get { return (int)angle.Value; } set { angle.Value = (decimal)General.Clamp(value, (float)angle.Minimum, (float)angle.Maximum); } }
|
|
public int AngleIncrement { get { return (int)angle.Increment; } }
|
|
public int MaximumAngle { get { return (int)angle.Maximum; } }
|
|
public bool FixedCurve { get { return fixedcurve.Checked; } }
|
|
|
|
#endregion
|
|
|
|
#region ================== Constructor
|
|
|
|
public CurveLinedefsOptionsPanel()
|
|
{
|
|
InitializeComponent();
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region ================== Mathods
|
|
|
|
public void SetValues(int verts, int distance, int angle, bool fixedcurve)
|
|
{
|
|
blockevents = true;
|
|
|
|
this.verts.Value = General.Clamp(verts, (int)this.verts.Minimum, (int)this.verts.Maximum);
|
|
this.distance.Value = General.Clamp(distance, (int)this.distance.Minimum, (int)this.distance.Maximum);
|
|
this.angle.Value = General.Clamp(angle, (int)this.angle.Minimum, (int)this.angle.Maximum);
|
|
this.fixedcurve.Checked = fixedcurve;
|
|
|
|
blockevents = false;
|
|
}
|
|
|
|
public void Register()
|
|
{
|
|
General.Interface.AddButton(vertslabel);
|
|
General.Interface.AddButton(verts);
|
|
General.Interface.AddButton(distancelabel);
|
|
General.Interface.AddButton(distance);
|
|
General.Interface.AddButton(anglelabel);
|
|
General.Interface.AddButton(angle);
|
|
General.Interface.AddButton(flip);
|
|
General.Interface.AddButton(reset);
|
|
General.Interface.AddButton(separator1);
|
|
General.Interface.AddButton(fixedcurve);
|
|
General.Interface.AddButton(separator2);
|
|
General.Interface.AddButton(apply);
|
|
General.Interface.AddButton(cancel);
|
|
}
|
|
|
|
public void Unregister()
|
|
{
|
|
General.Interface.RemoveButton(cancel);
|
|
General.Interface.RemoveButton(apply);
|
|
General.Interface.RemoveButton(anglelabel);
|
|
General.Interface.RemoveButton(separator2);
|
|
General.Interface.RemoveButton(fixedcurve);
|
|
General.Interface.RemoveButton(separator1);
|
|
General.Interface.RemoveButton(reset);
|
|
General.Interface.RemoveButton(flip);
|
|
General.Interface.RemoveButton(angle);
|
|
General.Interface.RemoveButton(anglelabel);
|
|
General.Interface.RemoveButton(distance);
|
|
General.Interface.RemoveButton(distancelabel);
|
|
General.Interface.RemoveButton(verts);
|
|
General.Interface.RemoveButton(vertslabel);
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region ================== Events
|
|
|
|
private void apply_Click(object sender, EventArgs e)
|
|
{
|
|
// Apply now
|
|
General.Editing.AcceptMode();
|
|
}
|
|
|
|
private void cancel_Click(object sender, EventArgs e)
|
|
{
|
|
// Cancel now
|
|
General.Editing.CancelMode();
|
|
}
|
|
|
|
private void OnUIValuesChanged(object sender, EventArgs e)
|
|
{
|
|
if(!blockevents && OnValueChanged != null) OnValueChanged(this, EventArgs.Empty);
|
|
}
|
|
|
|
private void fixedcurve_CheckedChanged(object sender, EventArgs e)
|
|
{
|
|
// Enable/disable controls
|
|
distance.Enabled = !fixedcurve.Checked;
|
|
distancelabel.Enabled = !fixedcurve.Checked;
|
|
|
|
if(!blockevents && OnValueChanged != null) OnValueChanged(this, EventArgs.Empty);
|
|
}
|
|
|
|
private void flip_Click(object sender, EventArgs e)
|
|
{
|
|
distance.Value = -distance.Value;
|
|
}
|
|
|
|
private void reset_Click(object sender, EventArgs e)
|
|
{
|
|
SetValues(CurveLinedefsMode.DEFAULT_VERTICES_COUNT, CurveLinedefsMode.DEFAULT_DISTANCE, CurveLinedefsMode.DEFAULT_ANGLE, false);
|
|
if(OnValueChanged != null) OnValueChanged(this, EventArgs.Empty);
|
|
}
|
|
|
|
#endregion
|
|
|
|
}
|
|
}
|