mirror of
https://git.do.srb2.org/STJr/UltimateZoneBuilder.git
synced 2024-11-27 22:22:32 +00:00
bafb8ed511
Texture scale controls now have "Link" button. Thing, Sector (UDMF) and Linedef edit forms now work in realtime mode. Some more fixes in Edit form realtime update stuff. Removed some unused variables and functions.
1739 lines
58 KiB
C#
1739 lines
58 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.Collections.Generic;
|
|
using System.Drawing;
|
|
using System.Windows.Forms;
|
|
using CodeImp.DoomBuilder.Map;
|
|
using CodeImp.DoomBuilder.Config;
|
|
using CodeImp.DoomBuilder.GZBuilder.Data; //mxd
|
|
using CodeImp.DoomBuilder.Types;
|
|
using CodeImp.DoomBuilder.GZBuilder.Tools;
|
|
using CodeImp.DoomBuilder.GZBuilder.Controls; //mxd
|
|
|
|
#endregion
|
|
|
|
namespace CodeImp.DoomBuilder.Windows
|
|
{
|
|
internal partial class LinedefEditForm : DelayedForm
|
|
{
|
|
#region ================== Events
|
|
|
|
public event EventHandler OnValuesChanged; //mxd
|
|
|
|
#endregion
|
|
|
|
#region ================== Constants
|
|
|
|
private const string EMPTY_TEXTURE = "-";
|
|
|
|
#endregion
|
|
|
|
#region ================== Variables
|
|
|
|
private ICollection<Linedef> lines;
|
|
private List<LinedefProperties> linedefProps; //mxd
|
|
private bool preventchanges = false;
|
|
|
|
//Value linking
|
|
private static bool linkFrontTopScale;
|
|
private static bool linkFrontMidScale;
|
|
private static bool linkFrontBottomScale;
|
|
private static bool linkBackTopScale;
|
|
private static bool linkBackMidScale;
|
|
private static bool linkBackBottomScale;
|
|
|
|
private List<PairedFieldsControl> frontUdmfControls; //mxd
|
|
private List<PairedFieldsControl> backUdmfControls; //mxd
|
|
|
|
private struct LinedefProperties //mxd
|
|
{
|
|
public Dictionary<string, bool> Flags;
|
|
public float Alpha;
|
|
|
|
public SidedefProperties Front;
|
|
public SidedefProperties Back;
|
|
|
|
public LinedefProperties(Linedef line) {
|
|
Front = (line.Front != null ? new SidedefProperties(line.Front) : null);
|
|
Back = (line.Back != null ? new SidedefProperties(line.Back) : null);
|
|
Alpha = UDMFTools.GetFloat(line.Fields, "alpha", 1.0f);
|
|
Flags = line.GetFlags();
|
|
}
|
|
}
|
|
|
|
private class SidedefProperties //mxd
|
|
{
|
|
public Dictionary<string, bool> Flags;
|
|
|
|
public float ScaleTopX;
|
|
public float ScaleTopY;
|
|
public float ScaleMidX;
|
|
public float ScaleMidY;
|
|
public float ScaleBottomX;
|
|
public float ScaleBottomY;
|
|
|
|
public int OffsetX;
|
|
public int OffsetY;
|
|
|
|
public float OffsetTopX;
|
|
public float OffsetTopY;
|
|
public float OffsetMidX;
|
|
public float OffsetMidY;
|
|
public float OffsetBottomX;
|
|
public float OffsetBottomY;
|
|
|
|
public int Brightness;
|
|
public bool AbsoluteBrightness;
|
|
|
|
public string TextureTop;
|
|
public string TextureMid;
|
|
public string TextureLow;
|
|
|
|
public SidedefProperties(Sidedef side) {
|
|
Flags = side.GetFlags();
|
|
|
|
//offset
|
|
OffsetX = side.OffsetX;
|
|
OffsetY = side.OffsetY;
|
|
|
|
Brightness = UDMFTools.GetInteger(side.Fields, "light", 0);
|
|
AbsoluteBrightness = side.Fields.GetValue("lightabsolute", false);
|
|
|
|
//scales
|
|
ScaleTopX = UDMFTools.GetFloat(side.Fields, "scalex_top", 1.0f);
|
|
ScaleTopY = UDMFTools.GetFloat(side.Fields, "scaley_top", 1.0f);
|
|
ScaleMidX = UDMFTools.GetFloat(side.Fields, "scalex_mid", 1.0f);
|
|
ScaleMidY = UDMFTools.GetFloat(side.Fields, "scaley_mid", 1.0f);
|
|
ScaleBottomX = UDMFTools.GetFloat(side.Fields, "scalex_bottom", 1.0f);
|
|
ScaleBottomY = UDMFTools.GetFloat(side.Fields, "scaley_bottom", 1.0f);
|
|
|
|
//offsets
|
|
OffsetTopX = UDMFTools.GetFloat(side.Fields, "offsetx_top", 0f);
|
|
OffsetTopY = UDMFTools.GetFloat(side.Fields, "offsety_top", 0f);
|
|
OffsetMidX = UDMFTools.GetFloat(side.Fields, "offsetx_mid", 0f);
|
|
OffsetMidY = UDMFTools.GetFloat(side.Fields, "offsety_mid", 0f);
|
|
OffsetBottomX = UDMFTools.GetFloat(side.Fields, "offsetx_bottom", 0f);
|
|
OffsetBottomY = UDMFTools.GetFloat(side.Fields, "offsety_bottom", 0f);
|
|
|
|
//textures
|
|
TextureTop = side.HighTexture;
|
|
TextureMid = side.MiddleTexture;
|
|
TextureLow = side.LowTexture;
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region ================== Constructor
|
|
|
|
public LinedefEditForm()
|
|
{
|
|
// Initialize
|
|
InitializeComponent();
|
|
|
|
// Fill flags lists
|
|
foreach(KeyValuePair<string, string> lf in General.Map.Config.LinedefFlags)
|
|
flags.Add(lf.Value, lf.Key);
|
|
|
|
//mxd
|
|
foreach(KeyValuePair<string, string> lf in General.Map.Config.SidedefFlags) {
|
|
flagsFront.Add(lf.Value, lf.Key);
|
|
flagsBack.Add(lf.Value, lf.Key);
|
|
}
|
|
|
|
// Fill actions list
|
|
action.GeneralizedCategories = General.Map.Config.GenActionCategories;
|
|
action.AddInfo(General.Map.Config.SortedLinedefActions.ToArray());
|
|
|
|
// Fill activations list
|
|
activation.Items.AddRange(General.Map.Config.LinedefActivates.ToArray());
|
|
foreach(LinedefActivateInfo ai in General.Map.Config.LinedefActivates) udmfactivates.Add(ai.Title, ai);
|
|
|
|
// Fill universal fields list
|
|
fieldslist.ListFixedFields(General.Map.Config.LinedefFields);
|
|
|
|
// Initialize image selectors
|
|
fronthigh.Initialize();
|
|
frontmid.Initialize();
|
|
frontlow.Initialize();
|
|
backhigh.Initialize();
|
|
backmid.Initialize();
|
|
backlow.Initialize();
|
|
|
|
// Initialize custom fields editor
|
|
fieldslist.Setup("linedef");
|
|
|
|
// Mixed activations? (UDMF)
|
|
if(General.Map.FormatInterface.HasMixedActivations)
|
|
udmfpanel.Visible = true;
|
|
else if(General.Map.FormatInterface.HasPresetActivations)
|
|
hexenpanel.Visible = true;
|
|
|
|
// Action arguments?
|
|
if(General.Map.FormatInterface.HasActionArgs)
|
|
argspanel.Visible = true;
|
|
|
|
// Arrange panels
|
|
if(General.Map.FormatInterface.HasPresetActivations)
|
|
{
|
|
//mxd
|
|
actiongroup.Top = settingsGroup.Top;
|
|
actiongroup.Height = hexenpanel.Location.Y + hexenpanel.Height;
|
|
this.Height = heightpanel1.Height;
|
|
} else if(!General.Map.FormatInterface.HasMixedActivations &&
|
|
!General.Map.FormatInterface.HasActionArgs &&
|
|
!General.Map.FormatInterface.HasPresetActivations)
|
|
{
|
|
actiongroup.Top = settingsGroup.Top;
|
|
actiongroup.Height = action.Bottom + action.Top + (actiongroup.Width - actiongroup.ClientRectangle.Width);
|
|
this.Height = heightpanel2.Height;
|
|
}
|
|
|
|
// Tag?
|
|
if(General.Map.FormatInterface.HasLinedefTag)
|
|
{
|
|
// Match position after the action group
|
|
idgroup.Top = actiongroup.Bottom + actiongroup.Margin.Bottom + idgroup.Margin.Top;
|
|
}
|
|
else
|
|
{
|
|
idgroup.Visible = false;
|
|
}
|
|
|
|
//mxd. Setup UDMF controls
|
|
if(!General.Map.FormatInterface.HasCustomFields) {
|
|
tabs.TabPages.Remove(tabcustom);
|
|
settingsGroup.Visible = false;
|
|
customfrontbutton.Visible = false;
|
|
custombackbutton.Visible = false;
|
|
labelLightFront.Visible = false;
|
|
lightFront.Visible = false;
|
|
cbLightAbsoluteFront.Visible = false;
|
|
labelLightBack.Visible = false;
|
|
lightBack.Visible = false;
|
|
cbLightAbsoluteBack.Visible = false;
|
|
udmfPropertiesFront.Visible = false;
|
|
udmfPropertiesBack.Visible = false;
|
|
} else {
|
|
frontUdmfControls = new List<PairedFieldsControl>() { pfcFrontOffsetTop, pfcFrontOffsetMid, pfcFrontOffsetBottom, pfcFrontScaleTop, pfcFrontScaleMid, pfcFrontScaleBottom };
|
|
backUdmfControls = new List<PairedFieldsControl>() { pfcBackOffsetTop, pfcBackOffsetMid, pfcBackOffsetBottom, pfcBackScaleTop, pfcBackScaleMid, pfcBackScaleBottom };
|
|
|
|
//Restore value linking
|
|
pfcFrontScaleTop.LinkValues = linkFrontTopScale;
|
|
pfcFrontScaleMid.LinkValues = linkFrontMidScale;
|
|
pfcFrontScaleBottom.LinkValues = linkFrontBottomScale;
|
|
pfcBackScaleTop.LinkValues = linkBackTopScale;
|
|
pfcBackScaleMid.LinkValues = linkBackMidScale;
|
|
pfcBackScaleBottom.LinkValues = linkBackBottomScale;
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region ================== Methods
|
|
|
|
// This sets up the form to edit the given lines
|
|
public void Setup(ICollection<Linedef> lines)
|
|
{
|
|
LinedefActivateInfo sai;
|
|
Linedef fl;
|
|
|
|
preventchanges = true;
|
|
|
|
// Keep this list
|
|
this.lines = lines;
|
|
if(lines.Count > 1) this.Text = "Edit Linedefs (" + lines.Count + ")";
|
|
linedefProps = new List<LinedefProperties>();
|
|
|
|
//mxd. Make undo
|
|
string undodesc = "linedef";
|
|
if(lines.Count > 1) undodesc = lines.Count + " linedefs";
|
|
General.Map.UndoRedo.CreateUndo("Edit " + undodesc);
|
|
|
|
////////////////////////////////////////////////////////////////////////
|
|
// Set all options to the first linedef properties
|
|
////////////////////////////////////////////////////////////////////////
|
|
|
|
// Get first line
|
|
fl = General.GetByIndex(lines, 0);
|
|
|
|
// Flags
|
|
foreach(CheckBox c in flags.Checkboxes)
|
|
if(fl.Flags.ContainsKey(c.Tag.ToString())) c.Checked = fl.Flags[c.Tag.ToString()];
|
|
|
|
// Activations
|
|
foreach(LinedefActivateInfo ai in activation.Items)
|
|
if((fl.Activate & ai.Index) == ai.Index) activation.SelectedItem = ai;
|
|
|
|
// UDMF Activations
|
|
foreach(CheckBox c in udmfactivates.Checkboxes)
|
|
{
|
|
LinedefActivateInfo ai = (c.Tag as LinedefActivateInfo);
|
|
if(fl.Flags.ContainsKey(ai.Key)) c.Checked = fl.Flags[ai.Key];
|
|
}
|
|
|
|
//mxd. setup arg0str
|
|
arg0str.Location = arg0.Location;
|
|
|
|
// Custom fields
|
|
fieldslist.SetValues(fl.Fields, true);
|
|
|
|
//mxd. UDMF Settings
|
|
if(General.Map.FormatInterface.HasCustomFields) {
|
|
string renderStyle = fl.Fields.GetValue("renderstyle", "");
|
|
cbRenderStyle.SelectedIndex = (renderStyle == "add" ? 1 : 0);
|
|
alpha.Text = General.Clamp(fl.Fields.GetValue("alpha", 1.0f), 0f, 1f).ToString();
|
|
lockNumber.Text = fl.Fields.GetValue("locknumber", 0).ToString();
|
|
}
|
|
|
|
// Action/tags
|
|
action.Value = fl.Action;
|
|
|
|
if(General.Map.FormatInterface.HasLinedefTag) {//mxd
|
|
tagSelector.Setup();
|
|
tagSelector.SetTag(fl.Tag);
|
|
}
|
|
|
|
arg0.SetValue(fl.Args[0]);
|
|
arg1.SetValue(fl.Args[1]);
|
|
arg2.SetValue(fl.Args[2]);
|
|
arg3.SetValue(fl.Args[3]);
|
|
arg4.SetValue(fl.Args[4]);
|
|
|
|
// Front side and back side checkboxes
|
|
frontside.Checked = (fl.Front != null);
|
|
backside.Checked = (fl.Back != null);
|
|
|
|
// Front settings
|
|
if(fl.Front != null)
|
|
{
|
|
fronthigh.TextureName = fl.Front.HighTexture;
|
|
frontmid.TextureName = fl.Front.MiddleTexture;
|
|
frontlow.TextureName = fl.Front.LowTexture;
|
|
fronthigh.Required = fl.Front.HighRequired();
|
|
frontmid.Required = fl.Front.MiddleRequired();
|
|
frontlow.Required = fl.Front.LowRequired();
|
|
frontsector.Text = fl.Front.Sector.Index.ToString();
|
|
|
|
//mxd
|
|
if(General.Map.FormatInterface.HasCustomFields) {
|
|
//front settings
|
|
foreach(PairedFieldsControl pfc in frontUdmfControls)
|
|
pfc.SetValuesFrom(fl.Front.Fields, true);
|
|
|
|
lightFront.Text = UDMFTools.GetInteger(fl.Front.Fields, "light", 0).ToString();
|
|
cbLightAbsoluteFront.Checked = fl.Front.Fields.GetValue("lightabsolute", false);
|
|
|
|
//flags
|
|
foreach(CheckBox c in flagsFront.Checkboxes)
|
|
if(fl.Front.Flags.ContainsKey(c.Tag.ToString())) c.Checked = fl.Front.Flags[c.Tag.ToString()];
|
|
}
|
|
|
|
frontTextureOffset.SetValues(fl.Front.OffsetX, fl.Front.OffsetY); //mxd
|
|
}
|
|
|
|
// Back settings
|
|
if(fl.Back != null)
|
|
{
|
|
backhigh.TextureName = fl.Back.HighTexture;
|
|
backmid.TextureName = fl.Back.MiddleTexture;
|
|
backlow.TextureName = fl.Back.LowTexture;
|
|
backhigh.Required = fl.Back.HighRequired();
|
|
backmid.Required = fl.Back.MiddleRequired();
|
|
backlow.Required = fl.Back.LowRequired();
|
|
backsector.Text = fl.Back.Sector.Index.ToString();
|
|
|
|
//mxd
|
|
if(General.Map.FormatInterface.HasCustomFields) {
|
|
//front settings
|
|
foreach(PairedFieldsControl pfc in backUdmfControls)
|
|
pfc.SetValuesFrom(fl.Back.Fields, true);
|
|
|
|
lightBack.Text = UDMFTools.GetInteger(fl.Back.Fields, "light", 0).ToString();
|
|
cbLightAbsoluteBack.Checked = fl.Back.Fields.GetValue("lightabsolute", false);
|
|
|
|
//flags
|
|
foreach(CheckBox c in flagsBack.Checkboxes)
|
|
if(fl.Back.Flags.ContainsKey(c.Tag.ToString())) c.Checked = fl.Back.Flags[c.Tag.ToString()];
|
|
}
|
|
|
|
backTextureOffset.SetValues(fl.Back.OffsetX, fl.Back.OffsetY); //mxd
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////////
|
|
// Now go for all lines and change the options when a setting is different
|
|
////////////////////////////////////////////////////////////////////////
|
|
|
|
// Go for all lines
|
|
foreach(Linedef l in lines)
|
|
{
|
|
// Flags
|
|
foreach(CheckBox c in flags.Checkboxes)
|
|
{
|
|
if(l.Flags.ContainsKey(c.Tag.ToString()))
|
|
{
|
|
if(l.Flags[c.Tag.ToString()] != c.Checked)
|
|
{
|
|
c.ThreeState = true;
|
|
c.CheckState = CheckState.Indeterminate;
|
|
}
|
|
}
|
|
}
|
|
|
|
// Activations
|
|
if(activation.Items.Count > 0)
|
|
{
|
|
sai = (activation.Items[0] as LinedefActivateInfo);
|
|
foreach(LinedefActivateInfo ai in activation.Items)
|
|
if((l.Activate & ai.Index) == ai.Index) sai = ai;
|
|
if(sai != activation.SelectedItem) activation.SelectedIndex = -1;
|
|
}
|
|
|
|
// UDMF Activations
|
|
foreach(CheckBox c in udmfactivates.Checkboxes)
|
|
{
|
|
LinedefActivateInfo ai = (c.Tag as LinedefActivateInfo);
|
|
if(l.Flags.ContainsKey(ai.Key))
|
|
{
|
|
if(c.Checked != l.Flags[ai.Key])
|
|
{
|
|
c.ThreeState = true;
|
|
c.CheckState = CheckState.Indeterminate;
|
|
}
|
|
}
|
|
}
|
|
|
|
//mxd. UDMF Settings
|
|
if(General.Map.FormatInterface.HasCustomFields) {
|
|
int i = (l.Fields.GetValue("renderstyle", "") == "add" ? 1 : 0);
|
|
|
|
if(cbRenderStyle.SelectedIndex != -1 && i != cbRenderStyle.SelectedIndex)
|
|
cbRenderStyle.SelectedIndex = -1;
|
|
|
|
if(!string.IsNullOrEmpty(alpha.Text) && General.Clamp(alpha.GetResultFloat(1.0f), 0f, 1f) != l.Fields.GetValue("alpha", 1.0f))
|
|
alpha.Text = "";
|
|
|
|
if(!string.IsNullOrEmpty(lockNumber.Text) && lockNumber.GetResult(0) != l.Fields.GetValue("locknumber", 0))
|
|
lockNumber.Text = "";
|
|
}
|
|
|
|
// Action/tags
|
|
if(l.Action != action.Value) action.Empty = true;
|
|
if(General.Map.FormatInterface.HasLinedefTag && l.Tag != fl.Tag) tagSelector.ClearTag(); //mxd
|
|
if(l.Args[0] != arg0.GetResult(-1)) arg0.ClearValue();
|
|
if(l.Args[1] != arg1.GetResult(-1)) arg1.ClearValue();
|
|
if(l.Args[2] != arg2.GetResult(-1)) arg2.ClearValue();
|
|
if(l.Args[3] != arg3.GetResult(-1)) arg3.ClearValue();
|
|
if(l.Args[4] != arg4.GetResult(-1)) arg4.ClearValue();
|
|
|
|
//mxd. Check if we have different arg0str values
|
|
if(Array.IndexOf(GZBuilder.GZGeneral.ACS_SPECIALS, action.Value) != -1 && cbArgStr.Checked && !string.IsNullOrEmpty(arg0str.Text) && l.Fields.ContainsKey("arg0str") && l.Fields["arg0str"].Value.ToString() != arg0str.Text) {
|
|
arg0str.SelectedIndex = -1;
|
|
arg0str.Text = string.Empty;
|
|
}
|
|
|
|
// Front side checkbox
|
|
if((l.Front != null) != frontside.Checked)
|
|
{
|
|
frontside.ThreeState = true;
|
|
frontside.CheckState = CheckState.Indeterminate;
|
|
frontside.AutoCheck = false;
|
|
}
|
|
|
|
// Back side checkbox
|
|
if((l.Back != null) != backside.Checked)
|
|
{
|
|
backside.ThreeState = true;
|
|
backside.CheckState = CheckState.Indeterminate;
|
|
backside.AutoCheck = false;
|
|
}
|
|
|
|
// Front settings
|
|
if(l.Front != null)
|
|
{
|
|
if(fronthigh.TextureName != l.Front.HighTexture) fronthigh.TextureName = "";
|
|
if(frontmid.TextureName != l.Front.MiddleTexture) frontmid.TextureName = "";
|
|
if(frontlow.TextureName != l.Front.LowTexture) frontlow.TextureName = "";
|
|
if(fronthigh.Required != l.Front.HighRequired()) fronthigh.Required = false;
|
|
if(frontmid.Required != l.Front.MiddleRequired()) frontmid.Required = false;
|
|
if(frontlow.Required != l.Front.LowRequired()) frontlow.Required = false;
|
|
if(frontsector.Text != l.Front.Sector.Index.ToString()) frontsector.Text = "";
|
|
|
|
//mxd
|
|
if(General.Map.FormatInterface.HasCustomFields) {
|
|
foreach(PairedFieldsControl pfc in frontUdmfControls)
|
|
pfc.SetValuesFrom(l.Front.Fields, false);
|
|
|
|
if(!string.IsNullOrEmpty(lightFront.Text)) {
|
|
int light = UDMFTools.GetInteger(l.Front.Fields, "light", 0);
|
|
if(light != lightFront.GetResult(light)) lightFront.Text = "";
|
|
}
|
|
|
|
if(l.Front.Fields.GetValue("lightabsolute", false) != cbLightAbsoluteFront.Checked) {
|
|
cbLightAbsoluteFront.ThreeState = true;
|
|
cbLightAbsoluteFront.CheckState = CheckState.Indeterminate;
|
|
}
|
|
|
|
//flags
|
|
foreach(CheckBox c in flagsFront.Checkboxes) {
|
|
if(c.CheckState == CheckState.Indeterminate) continue;
|
|
|
|
if(l.Front.Flags.ContainsKey(c.Tag.ToString())) {
|
|
if(l.Front.Flags[c.Tag.ToString()] != c.Checked) {
|
|
c.ThreeState = true;
|
|
c.CheckState = CheckState.Indeterminate;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
l.Front.Fields.BeforeFieldsChange(); //mxd
|
|
frontTextureOffset.SetValues(l.Front.OffsetX, l.Front.OffsetY); //mxd
|
|
}
|
|
|
|
// Back settings
|
|
if(l.Back != null)
|
|
{
|
|
if(backhigh.TextureName != l.Back.HighTexture) backhigh.TextureName = "";
|
|
if(backmid.TextureName != l.Back.MiddleTexture) backmid.TextureName = "";
|
|
if(backlow.TextureName != l.Back.LowTexture) backlow.TextureName = "";
|
|
if(backhigh.Required != l.Back.HighRequired()) backhigh.Required = false;
|
|
if(backmid.Required != l.Back.MiddleRequired()) backmid.Required = false;
|
|
if(backlow.Required != l.Back.LowRequired()) backlow.Required = false;
|
|
if(backsector.Text != l.Back.Sector.Index.ToString()) backsector.Text = "";
|
|
|
|
//mxd
|
|
if(General.Map.FormatInterface.HasCustomFields) {
|
|
foreach(PairedFieldsControl pfc in backUdmfControls)
|
|
pfc.SetValuesFrom(l.Back.Fields, false);
|
|
|
|
//if(!string.IsNullOrEmpty(lightBack.Text) && lightBack.Text != UDMFTools.GetInteger(fl.Back.Fields, "light", 0).ToString())
|
|
//lightBack.Text = "";
|
|
|
|
if(!string.IsNullOrEmpty(lightBack.Text)) {
|
|
int light = UDMFTools.GetInteger(l.Back.Fields, "light", 0);
|
|
if(light != lightBack.GetResult(light)) lightBack.Text = "";
|
|
}
|
|
|
|
if(l.Back.Fields.GetValue("lightabsolute", false) != cbLightAbsoluteBack.Checked) {
|
|
cbLightAbsoluteBack.ThreeState = true;
|
|
cbLightAbsoluteBack.CheckState = CheckState.Indeterminate;
|
|
}
|
|
|
|
//flags
|
|
foreach(CheckBox c in flagsBack.Checkboxes) {
|
|
if(c.CheckState == CheckState.Indeterminate) continue;
|
|
|
|
if(l.Back.Flags.ContainsKey(c.Tag.ToString())) {
|
|
if(l.Back.Flags[c.Tag.ToString()] != c.Checked) {
|
|
c.ThreeState = true;
|
|
c.CheckState = CheckState.Indeterminate;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
l.Back.Fields.BeforeFieldsChange(); //mxd
|
|
backTextureOffset.SetValues(l.Back.OffsetX, l.Back.OffsetY); //mxd
|
|
}
|
|
|
|
//mxd
|
|
linedefProps.Add(new LinedefProperties(l));
|
|
|
|
// Custom fields
|
|
l.Fields.BeforeFieldsChange(); //mxd
|
|
fieldslist.SetValues(l.Fields, false);
|
|
}
|
|
|
|
// Refresh controls so that they show their image
|
|
backhigh.Refresh();
|
|
backmid.Refresh();
|
|
backlow.Refresh();
|
|
fronthigh.Refresh();
|
|
frontmid.Refresh();
|
|
frontlow.Refresh();
|
|
|
|
preventchanges = false;
|
|
}
|
|
|
|
//mxd
|
|
private void setNumberedScripts(Linedef l) {
|
|
arg0str.Items.Clear();
|
|
|
|
if (General.Map.NumberedScripts.Count > 0) {
|
|
foreach (ScriptItem si in General.Map.NumberedScripts) {
|
|
arg0str.Items.Add(si);
|
|
if (si.Index == l.Args[0])
|
|
arg0str.SelectedIndex = arg0str.Items.Count - 1;
|
|
}
|
|
|
|
//script number is not among known scripts...
|
|
if (arg0str.SelectedIndex == -1 && l.Args[0] > 0) {
|
|
arg0str.Items.Add(new ScriptItem(l.Args[0], "Script " + l.Args[0]));
|
|
arg0str.SelectedIndex = arg0str.Items.Count - 1;
|
|
}
|
|
|
|
} else if (l.Args[0] > 0) {
|
|
arg0str.Items.Add(new ScriptItem(l.Args[0], "Script " + l.Args[0]));
|
|
arg0str.SelectedIndex = 0;
|
|
}
|
|
}
|
|
|
|
//mxd
|
|
private void setNamedScripts(string selectedValue) {
|
|
arg0str.Items.Clear();
|
|
|
|
//update arg0str items
|
|
if (General.Map.NamedScripts.Count > 0) {
|
|
ScriptItem[] sn = new ScriptItem[General.Map.NamedScripts.Count];
|
|
General.Map.NamedScripts.CopyTo(sn, 0);
|
|
arg0str.Items.AddRange(sn);
|
|
|
|
for (int i = 0; i < sn.Length; i++) {
|
|
if (sn[i].Name == selectedValue) {
|
|
arg0str.SelectedIndex = i;
|
|
break;
|
|
}
|
|
}
|
|
|
|
} else {
|
|
arg0str.Text = selectedValue;
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
// This selects all text in a textbox
|
|
/*private void SelectAllText(object sender, EventArgs e)
|
|
{
|
|
(sender as TextBox).SelectAll();
|
|
}*/
|
|
|
|
#region Events
|
|
|
|
// Apply clicked
|
|
private void apply_Click(object sender, EventArgs e)
|
|
{
|
|
Sector s;
|
|
int index;
|
|
|
|
// Verify the tag
|
|
if(General.Map.FormatInterface.HasLinedefTag)
|
|
{
|
|
tagSelector.ValidateTag(); //mxd
|
|
if(((tagSelector.GetTag(0) < General.Map.FormatInterface.MinTag) || (tagSelector.GetTag(0) > General.Map.FormatInterface.MaxTag))) {
|
|
General.ShowWarningMessage("Linedef tag must be between " + General.Map.FormatInterface.MinTag + " and " + General.Map.FormatInterface.MaxTag + ".", MessageBoxButtons.OK);
|
|
return;
|
|
}
|
|
}
|
|
|
|
// Verify the action
|
|
if((action.Value < General.Map.FormatInterface.MinAction) || (action.Value > General.Map.FormatInterface.MaxAction))
|
|
{
|
|
General.ShowWarningMessage("Linedef action must be between " + General.Map.FormatInterface.MinAction + " and " + General.Map.FormatInterface.MaxAction + ".", MessageBoxButtons.OK);
|
|
return;
|
|
}
|
|
|
|
//mxd
|
|
bool hasAcs = !action.Empty && Array.IndexOf(GZBuilder.GZGeneral.ACS_SPECIALS, action.Value) != -1;
|
|
bool hasArg0str = General.Map.UDMF && hasAcs && !string.IsNullOrEmpty(arg0str.Text);
|
|
int lockNum = lockNumber.GetResult(0);
|
|
|
|
// Go for all the lines
|
|
foreach(Linedef l in lines)
|
|
{
|
|
// Apply chosen activation flag
|
|
if(activation.SelectedIndex > -1)
|
|
l.Activate = (activation.SelectedItem as LinedefActivateInfo).Index;
|
|
|
|
// UDMF activations
|
|
foreach(CheckBox c in udmfactivates.Checkboxes)
|
|
{
|
|
LinedefActivateInfo ai = (c.Tag as LinedefActivateInfo);
|
|
if(c.CheckState == CheckState.Checked) l.SetFlag(ai.Key, true);
|
|
else if(c.CheckState == CheckState.Unchecked) l.SetFlag(ai.Key, false);
|
|
}
|
|
|
|
// Action/tags
|
|
l.Tag = tagSelector.GetTag(l.Tag); //mxd
|
|
if(!action.Empty) l.Action = action.Value;
|
|
|
|
//mxd
|
|
if (hasAcs && !cbArgStr.Checked) {
|
|
if (arg0str.SelectedItem != null)
|
|
l.Args[0] = ((ScriptItem)arg0str.SelectedItem).Index;
|
|
else if (!int.TryParse(arg0str.Text.Trim(), out l.Args[0]))
|
|
l.Args[0] = 0;
|
|
} else {
|
|
l.Args[0] = arg0.GetResult(l.Args[0]);
|
|
}
|
|
l.Args[1] = arg1.GetResult(l.Args[1]);
|
|
l.Args[2] = arg2.GetResult(l.Args[2]);
|
|
l.Args[3] = arg3.GetResult(l.Args[3]);
|
|
l.Args[4] = arg4.GetResult(l.Args[4]);
|
|
|
|
// Remove front side?
|
|
if((l.Front != null) && (frontside.CheckState == CheckState.Unchecked))
|
|
{
|
|
l.Front.Dispose();
|
|
}
|
|
// Create or modify front side?
|
|
else if(frontside.CheckState == CheckState.Checked)
|
|
{
|
|
// Make sure we have a valid sector (make a new one if needed)
|
|
if(l.Front != null) index = l.Front.Sector.Index; else index = -1;
|
|
index = frontsector.GetResult(index);
|
|
if((index > -1) && (index < General.Map.Map.Sectors.Count))
|
|
{
|
|
s = General.Map.Map.GetSectorByIndex(index);
|
|
if(s == null) s = General.Map.Map.CreateSector();
|
|
|
|
if(s != null)
|
|
{
|
|
// Create new sidedef?
|
|
if(l.Front == null) General.Map.Map.CreateSidedef(l, true, s);
|
|
|
|
// Change sector?
|
|
if(l.Front != null && l.Front.Sector != s) l.Front.SetSector(s);
|
|
}
|
|
}
|
|
}
|
|
|
|
// Remove back side?
|
|
if((l.Back != null) && (backside.CheckState == CheckState.Unchecked))
|
|
{
|
|
l.Back.Dispose();
|
|
}
|
|
// Create or modify back side?
|
|
else if(backside.CheckState == CheckState.Checked)
|
|
{
|
|
// Make sure we have a valid sector (make a new one if needed)
|
|
if(l.Back != null) index = l.Back.Sector.Index; else index = -1;
|
|
index = backsector.GetResult(index);
|
|
if((index > -1) && (index < General.Map.Map.Sectors.Count))
|
|
{
|
|
s = General.Map.Map.GetSectorByIndex(index);
|
|
if(s == null) s = General.Map.Map.CreateSector();
|
|
|
|
if(s != null)
|
|
{
|
|
// Create new sidedef?
|
|
if(l.Back == null) General.Map.Map.CreateSidedef(l, false, s);
|
|
|
|
// Change sector?
|
|
if(l.Back != null && l.Back.Sector != s) l.Back.SetSector(s);
|
|
}
|
|
}
|
|
}
|
|
|
|
//mxd. UDMF Settings
|
|
if(General.Map.FormatInterface.HasCustomFields)
|
|
UDMFTools.SetInteger(l.Fields, "locknumber", lockNum, 0, false);
|
|
|
|
//mxd. apply arg0str
|
|
if(cbArgStr.Visible && cbArgStr.Checked && hasArg0str) {
|
|
l.Fields["arg0str"] = new UniValue(UniversalType.String, arg0str.Text);
|
|
} else if(l.Fields.ContainsKey("arg0str") && (string.IsNullOrEmpty(l.Fields["arg0str"].Value.ToString()) || !hasAcs || (hasAcs && !cbArgStr.Checked))) {
|
|
l.Fields.Remove("arg0str");
|
|
}
|
|
}
|
|
|
|
//mxd. Store value linking
|
|
linkFrontTopScale = pfcFrontScaleTop.LinkValues;
|
|
linkFrontMidScale = pfcFrontScaleMid.LinkValues;
|
|
linkFrontBottomScale = pfcFrontScaleBottom.LinkValues;
|
|
linkBackTopScale = pfcBackScaleTop.LinkValues;
|
|
linkBackMidScale = pfcBackScaleMid.LinkValues;
|
|
linkBackBottomScale = pfcBackScaleBottom.LinkValues;
|
|
|
|
// Update the used textures
|
|
General.Map.Data.UpdateUsedTextures();
|
|
|
|
// Done
|
|
General.Map.IsChanged = true;
|
|
if(OnValuesChanged != null) OnValuesChanged(this, EventArgs.Empty); //mxd
|
|
this.DialogResult = DialogResult.OK;
|
|
this.Close();
|
|
}
|
|
|
|
// Cancel clicked
|
|
private void cancel_Click(object sender, EventArgs e)
|
|
{
|
|
//mxd. Let's pretend nothing of this really happened...
|
|
General.Map.UndoRedo.WithdrawUndo();
|
|
|
|
// Be gone
|
|
this.DialogResult = DialogResult.Cancel;
|
|
this.Close();
|
|
}
|
|
|
|
// Front side (un)checked
|
|
private void frontside_CheckStateChanged(object sender, EventArgs e)
|
|
{
|
|
// Enable/disable panel
|
|
// NOTE: Also enabled when checkbox is grayed!
|
|
frontgroup.Enabled = (frontside.CheckState != CheckState.Unchecked);
|
|
}
|
|
|
|
// Back side (un)checked
|
|
private void backside_CheckStateChanged(object sender, EventArgs e)
|
|
{
|
|
// Enable/disable panel
|
|
// NOTE: Also enabled when checkbox is grayed!
|
|
backgroup.Enabled = (backside.CheckState != CheckState.Unchecked);
|
|
}
|
|
|
|
// Action changes
|
|
private void action_ValueChanges(object sender, EventArgs e)
|
|
{
|
|
int showaction = 0;
|
|
|
|
// Only when line type is known
|
|
if(General.Map.Config.LinedefActions.ContainsKey(action.Value)) showaction = action.Value;
|
|
|
|
// Change the argument descriptions
|
|
arg0label.Text = General.Map.Config.LinedefActions[showaction].Args[0].Title + ":";
|
|
arg1label.Text = General.Map.Config.LinedefActions[showaction].Args[1].Title + ":";
|
|
arg2label.Text = General.Map.Config.LinedefActions[showaction].Args[2].Title + ":";
|
|
arg3label.Text = General.Map.Config.LinedefActions[showaction].Args[3].Title + ":";
|
|
arg4label.Text = General.Map.Config.LinedefActions[showaction].Args[4].Title + ":";
|
|
arg0label.Enabled = General.Map.Config.LinedefActions[showaction].Args[0].Used;
|
|
arg1label.Enabled = General.Map.Config.LinedefActions[showaction].Args[1].Used;
|
|
arg2label.Enabled = General.Map.Config.LinedefActions[showaction].Args[2].Used;
|
|
arg3label.Enabled = General.Map.Config.LinedefActions[showaction].Args[3].Used;
|
|
arg4label.Enabled = General.Map.Config.LinedefActions[showaction].Args[4].Used;
|
|
if(arg0label.Enabled) arg0.ForeColor = SystemColors.WindowText; else arg0.ForeColor = SystemColors.GrayText;
|
|
if(arg1label.Enabled) arg1.ForeColor = SystemColors.WindowText; else arg1.ForeColor = SystemColors.GrayText;
|
|
if(arg2label.Enabled) arg2.ForeColor = SystemColors.WindowText; else arg2.ForeColor = SystemColors.GrayText;
|
|
if(arg3label.Enabled) arg3.ForeColor = SystemColors.WindowText; else arg3.ForeColor = SystemColors.GrayText;
|
|
if(arg4label.Enabled) arg4.ForeColor = SystemColors.WindowText; else arg4.ForeColor = SystemColors.GrayText;
|
|
arg0.Setup(General.Map.Config.LinedefActions[showaction].Args[0]);
|
|
arg1.Setup(General.Map.Config.LinedefActions[showaction].Args[1]);
|
|
arg2.Setup(General.Map.Config.LinedefActions[showaction].Args[2]);
|
|
arg3.Setup(General.Map.Config.LinedefActions[showaction].Args[3]);
|
|
arg4.Setup(General.Map.Config.LinedefActions[showaction].Args[4]);
|
|
|
|
// mxd. Apply action's default arguments
|
|
if(!preventchanges) {
|
|
if(showaction != 0 && General.Map.Config.LinedefActions.ContainsKey(showaction)) {
|
|
arg0.SetDefaultValue();
|
|
arg1.SetDefaultValue();
|
|
arg2.SetDefaultValue();
|
|
arg3.SetDefaultValue();
|
|
arg4.SetDefaultValue();
|
|
} else { //or set them to 0
|
|
arg0.SetValue(0);
|
|
arg1.SetValue(0);
|
|
arg2.SetValue(0);
|
|
arg3.SetValue(0);
|
|
arg4.SetValue(0);
|
|
}
|
|
}
|
|
|
|
//mxd. update arg0str
|
|
if (Array.IndexOf(GZBuilder.GZGeneral.ACS_SPECIALS, showaction) != -1) {
|
|
arg0str.Visible = true;
|
|
|
|
if (General.Map.UDMF && fieldslist.GetValue("arg0str") != null) {
|
|
cbArgStr.Visible = true;
|
|
cbArgStr.Checked = true;
|
|
setNamedScripts((string)fieldslist.GetValue("arg0str"));
|
|
} else { //use script numbers
|
|
cbArgStr.Visible = General.Map.UDMF;
|
|
cbArgStr.Checked = false;
|
|
Linedef l = General.GetByIndex(lines, 0);
|
|
setNumberedScripts(l);
|
|
}
|
|
} else {
|
|
if(cbArgStr.Checked) cbArgStr.Checked = false;
|
|
cbArgStr.Visible = false;
|
|
arg0label.Text = General.Map.Config.LinedefActions[showaction].Args[0].Title + ":";
|
|
arg0str.Visible = false;
|
|
}
|
|
}
|
|
|
|
// Browse Action clicked
|
|
private void browseaction_Click(object sender, EventArgs e)
|
|
{
|
|
action.Value = ActionBrowserForm.BrowseAction(this, action.Value);
|
|
}
|
|
|
|
//mxd
|
|
private void cbArgStr_CheckedChanged(object sender, EventArgs e) {
|
|
arg0str.Text = "";
|
|
|
|
if (cbArgStr.Checked) {
|
|
setNamedScripts((string)fieldslist.GetValue("arg0str"));
|
|
} else if (!cbArgStr.Checked) {
|
|
setNumberedScripts(General.GetByIndex(lines, 0));
|
|
}
|
|
|
|
arg0label.Text = cbArgStr.Checked ? "Script name:" : "Script number:";
|
|
}
|
|
|
|
//mxd
|
|
private void arg0str_Leave(object sender, EventArgs e) {
|
|
if (cbArgStr.Checked) fieldslist.SetValue("arg0str", arg0str.Text, UniversalType.String);
|
|
}
|
|
|
|
//mxd
|
|
private void tabcustom_MouseEnter(object sender, EventArgs e) {
|
|
fieldslist.Focus();
|
|
}
|
|
|
|
// Help!
|
|
private void LinedefEditForm_HelpRequested(object sender, HelpEventArgs hlpevent)
|
|
{
|
|
General.ShowHelp("w_linedefedit.html");
|
|
hlpevent.Handled = true;
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region ================== mxd. Realtime events (linedef)
|
|
|
|
private void cbRenderStyle_SelectedIndexChanged(object sender, EventArgs e) {
|
|
if(preventchanges) return;
|
|
|
|
//update values
|
|
if(cbRenderStyle.SelectedIndex == 1) { //add
|
|
foreach(Linedef l in lines)
|
|
l.Fields["renderstyle"] = new UniValue(UniversalType.String, "add");
|
|
} else {
|
|
foreach(Linedef l in lines)
|
|
if(l.Fields.ContainsKey("renderstyle")) l.Fields.Remove("renderstyle");
|
|
}
|
|
|
|
General.Map.IsChanged = true;
|
|
if(OnValuesChanged != null) OnValuesChanged(this, EventArgs.Empty);
|
|
}
|
|
|
|
private void alpha_WhenTextChanged(object sender, EventArgs e) {
|
|
if(preventchanges) return;
|
|
int i = 0;
|
|
|
|
//restore values
|
|
if(string.IsNullOrEmpty(alpha.Text)) {
|
|
foreach(Linedef l in lines)
|
|
UDMFTools.SetFloat(l.Fields, "alpha", linedefProps[i++].Alpha, 1.0f, false);
|
|
//update values
|
|
} else {
|
|
foreach(Linedef l in lines) {
|
|
float value = General.Clamp(alpha.GetResultFloat(l.Fields.GetValue("alpha", 1.0f)), 0f, 1.0f);
|
|
UDMFTools.SetFloat(l.Fields, "alpha", value, 1.0f, false);
|
|
}
|
|
}
|
|
|
|
General.Map.IsChanged = true;
|
|
if(OnValuesChanged != null) OnValuesChanged(this, EventArgs.Empty);
|
|
}
|
|
|
|
private void flags_OnValueChanged(object sender, EventArgs e) {
|
|
if(preventchanges) return;
|
|
int i = 0;
|
|
|
|
foreach(Linedef l in lines) {
|
|
// Apply all flags
|
|
foreach(CheckBox c in flags.Checkboxes) {
|
|
if(c.CheckState == CheckState.Checked)
|
|
l.SetFlag(c.Tag.ToString(), true);
|
|
else if(c.CheckState == CheckState.Unchecked)
|
|
l.SetFlag(c.Tag.ToString(), false);
|
|
else
|
|
l.SetFlag(c.Tag.ToString(), linedefProps[i].Flags[c.Tag.ToString()]);
|
|
|
|
}
|
|
|
|
i++;
|
|
}
|
|
|
|
General.Map.IsChanged = true;
|
|
if(OnValuesChanged != null) OnValuesChanged(this, EventArgs.Empty);
|
|
}
|
|
|
|
private void fieldslist_OnFieldValueChanged(string fieldname) {
|
|
if(preventchanges) return;
|
|
Linedef fl = null;
|
|
|
|
foreach(Linedef l in lines) {
|
|
fieldslist.Apply(l.Fields);
|
|
if(fl == null) fl = l;
|
|
}
|
|
|
|
if(fl == null) return;
|
|
|
|
//update interface... yaaaay...
|
|
switch(fieldname) {
|
|
case "arg0str":
|
|
if(cbArgStr.Checked) arg0str.Text = (string)fieldslist.GetValue(fieldname);
|
|
break;
|
|
|
|
case "alpha":
|
|
alpha.Text = (string)fieldslist.GetValue(fieldname);
|
|
break;
|
|
|
|
case "locknumber":
|
|
lockNumber.Text = (string)fieldslist.GetValue(fieldname);
|
|
break;
|
|
|
|
case "renderstyle":
|
|
string renderstyle = (string)fieldslist.GetValue(fieldname);
|
|
if(renderstyle == "add") {
|
|
cbRenderStyle.SelectedIndex = 1;
|
|
} else if(renderstyle == "translucent") {
|
|
cbRenderStyle.SelectedIndex = 0;
|
|
} else {
|
|
cbRenderStyle.SelectedIndex = -1;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Reltime events (sides)
|
|
|
|
#region Custom fields changed
|
|
|
|
// Custom fields on front sides
|
|
private void customfrontbutton_Click(object sender, EventArgs e) {
|
|
// Make collection of front sides
|
|
List<MapElement> sides = new List<MapElement>(lines.Count);
|
|
foreach(Linedef l in lines) if(l.Front != null) sides.Add(l.Front);
|
|
|
|
if(!CustomFieldsForm.ShowDialog(this, "Front side custom fields", "sidedef", sides, General.Map.Config.SidedefFields)) return;
|
|
|
|
//Apply values
|
|
Sidedef fs = General.GetByIndex(sides, 0) as Sidedef;
|
|
|
|
//..to the first side
|
|
foreach(PairedFieldsControl pfc in frontUdmfControls)
|
|
pfc.SetValuesFrom(fs.Fields, true);
|
|
|
|
lightFront.Text = UDMFTools.GetInteger(fs.Fields, "light", 0).ToString();
|
|
cbLightAbsoluteFront.ThreeState = false;
|
|
cbLightAbsoluteFront.Checked = fs.Fields.GetValue("lightabsolute", false);
|
|
|
|
//flags
|
|
foreach(CheckBox c in flagsFront.Checkboxes)
|
|
if(fs.Flags.ContainsKey(c.Tag.ToString())) c.Checked = fs.Flags[c.Tag.ToString()];
|
|
|
|
//..then to all of them
|
|
foreach(Sidedef s in sides){
|
|
foreach(PairedFieldsControl pfc in frontUdmfControls)
|
|
pfc.SetValuesFrom(s.Fields, false);
|
|
|
|
if(!string.IsNullOrEmpty(lightFront.Text)) {
|
|
int light = UDMFTools.GetInteger(s.Fields, "light", 0);
|
|
if(light != lightFront.GetResult(light)) lightFront.Text = "";
|
|
}
|
|
|
|
if(s.Fields.GetValue("lightabsolute", false) != cbLightAbsoluteFront.Checked) {
|
|
cbLightAbsoluteFront.ThreeState = true;
|
|
cbLightAbsoluteFront.CheckState = CheckState.Indeterminate;
|
|
}
|
|
|
|
//flags
|
|
foreach(CheckBox c in flagsFront.Checkboxes) {
|
|
if(c.CheckState == CheckState.Indeterminate) continue;
|
|
|
|
if(s.Flags.ContainsKey(c.Tag.ToString())) {
|
|
if(s.Flags[c.Tag.ToString()] != c.Checked) {
|
|
c.ThreeState = true;
|
|
c.CheckState = CheckState.Indeterminate;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
General.Map.IsChanged = true;
|
|
if(OnValuesChanged != null) OnValuesChanged(this, EventArgs.Empty);
|
|
}
|
|
|
|
// Custom fields on back sides
|
|
private void custombackbutton_Click(object sender, EventArgs e) {
|
|
// Make collection of back sides
|
|
List<MapElement> sides = new List<MapElement>(lines.Count);
|
|
foreach(Linedef l in lines) if(l.Back != null) sides.Add(l.Back);
|
|
|
|
// Edit these
|
|
if(!CustomFieldsForm.ShowDialog(this, "Back side custom fields", "sidedef", sides, General.Map.Config.SidedefFields)) return;
|
|
//General.Map.UndoRedo.WithdrawUndo();
|
|
|
|
//Apply values
|
|
Sidedef fs = General.GetByIndex(sides, 0) as Sidedef;
|
|
|
|
//..to the first side
|
|
foreach(PairedFieldsControl pfc in backUdmfControls)
|
|
pfc.SetValuesFrom(fs.Fields, true);
|
|
|
|
lightBack.Text = UDMFTools.GetInteger(fs.Fields, "light", 0).ToString();
|
|
cbLightAbsoluteBack.ThreeState = false;
|
|
cbLightAbsoluteBack.Checked = fs.Fields.GetValue("lightabsolute", false);
|
|
|
|
//flags
|
|
foreach(CheckBox c in flagsBack.Checkboxes)
|
|
if(fs.Flags.ContainsKey(c.Tag.ToString())) c.Checked = fs.Flags[c.Tag.ToString()];
|
|
|
|
//..then to all of them
|
|
foreach(Sidedef s in sides) {
|
|
foreach(PairedFieldsControl pfc in backUdmfControls)
|
|
pfc.SetValuesFrom(s.Fields, false);
|
|
|
|
if(!string.IsNullOrEmpty(lightBack.Text)) {
|
|
int light = UDMFTools.GetInteger(s.Fields, "light", 0);
|
|
if(light != lightBack.GetResult(light)) lightBack.Text = "";
|
|
}
|
|
|
|
if(s.Fields.GetValue("lightabsolute", false) != cbLightAbsoluteBack.Checked) {
|
|
cbLightAbsoluteBack.ThreeState = true;
|
|
cbLightAbsoluteBack.CheckState = CheckState.Indeterminate;
|
|
}
|
|
|
|
//flags
|
|
foreach(CheckBox c in flagsBack.Checkboxes) {
|
|
if(c.CheckState == CheckState.Indeterminate) continue;
|
|
|
|
if(s.Flags.ContainsKey(c.Tag.ToString())) {
|
|
if(s.Flags[c.Tag.ToString()] != c.Checked) {
|
|
c.ThreeState = true;
|
|
c.CheckState = CheckState.Indeterminate;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
General.Map.IsChanged = true;
|
|
if(OnValuesChanged != null) OnValuesChanged(this, EventArgs.Empty);
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Texture changed
|
|
|
|
private void fronthigh_OnValueChanged(object sender, EventArgs e) {
|
|
if(preventchanges) return;
|
|
|
|
//restore values
|
|
if(string.IsNullOrEmpty(fronthigh.TextureName)) {
|
|
int i = 0;
|
|
|
|
foreach(Linedef l in lines) {
|
|
if(l.Front != null) l.Front.SetTextureHigh(linedefProps[i].Front != null ? linedefProps[i].Front.TextureTop : EMPTY_TEXTURE);
|
|
i++;
|
|
}
|
|
//update values
|
|
} else {
|
|
foreach(Linedef l in lines)
|
|
if(l.Front != null) l.Front.SetTextureHigh(fronthigh.GetResult(l.Front.HighTexture));
|
|
}
|
|
|
|
// Update the used textures
|
|
General.Map.Data.UpdateUsedTextures();
|
|
|
|
General.Map.IsChanged = true;
|
|
if(OnValuesChanged != null) OnValuesChanged(this, EventArgs.Empty);
|
|
}
|
|
|
|
private void frontmid_OnValueChanged(object sender, EventArgs e) {
|
|
if(preventchanges) return;
|
|
|
|
//restore values
|
|
if(string.IsNullOrEmpty(frontmid.TextureName)) {
|
|
int i = 0;
|
|
|
|
foreach(Linedef l in lines) {
|
|
if(l.Front != null) l.Front.SetTextureMid(linedefProps[i].Front != null ? linedefProps[i].Front.TextureMid : EMPTY_TEXTURE);
|
|
i++;
|
|
}
|
|
//update values
|
|
} else {
|
|
foreach(Linedef l in lines)
|
|
if(l.Front != null) l.Front.SetTextureMid(frontmid.GetResult(l.Front.MiddleTexture));
|
|
}
|
|
|
|
// Update the used textures
|
|
General.Map.Data.UpdateUsedTextures();
|
|
|
|
General.Map.IsChanged = true;
|
|
if(OnValuesChanged != null) OnValuesChanged(this, EventArgs.Empty);
|
|
}
|
|
|
|
private void frontlow_OnValueChanged(object sender, EventArgs e) {
|
|
if(preventchanges) return;
|
|
|
|
//restore values
|
|
if(string.IsNullOrEmpty(frontlow.TextureName)) {
|
|
int i = 0;
|
|
|
|
foreach(Linedef l in lines) {
|
|
if(l.Front != null) l.Front.SetTextureLow(linedefProps[i].Front != null ? linedefProps[i].Front.TextureLow : EMPTY_TEXTURE);
|
|
i++;
|
|
}
|
|
//update values
|
|
} else {
|
|
foreach(Linedef l in lines)
|
|
if(l.Front != null) l.Front.SetTextureLow(frontlow.GetResult(l.Front.LowTexture));
|
|
}
|
|
|
|
// Update the used textures
|
|
General.Map.Data.UpdateUsedTextures();
|
|
|
|
General.Map.IsChanged = true;
|
|
if(OnValuesChanged != null) OnValuesChanged(this, EventArgs.Empty);
|
|
}
|
|
|
|
private void backhigh_OnValueChanged(object sender, EventArgs e) {
|
|
if(preventchanges) return;
|
|
|
|
//restore values
|
|
if(string.IsNullOrEmpty(backhigh.TextureName)) {
|
|
int i = 0;
|
|
|
|
foreach(Linedef l in lines) {
|
|
if(l.Back != null) l.Back.SetTextureHigh(linedefProps[i].Back != null ? linedefProps[i].Back.TextureTop : EMPTY_TEXTURE);
|
|
i++;
|
|
}
|
|
//update values
|
|
} else {
|
|
foreach(Linedef l in lines)
|
|
if(l.Back != null) l.Back.SetTextureHigh(backhigh.GetResult(l.Back.HighTexture));
|
|
}
|
|
|
|
// Update the used textures
|
|
General.Map.Data.UpdateUsedTextures();
|
|
|
|
General.Map.IsChanged = true;
|
|
if(OnValuesChanged != null) OnValuesChanged(this, EventArgs.Empty);
|
|
}
|
|
|
|
private void backmid_OnValueChanged(object sender, EventArgs e) {
|
|
if(preventchanges) return;
|
|
|
|
//restore values
|
|
if(string.IsNullOrEmpty(backmid.TextureName)) {
|
|
int i = 0;
|
|
|
|
foreach(Linedef l in lines) {
|
|
if(l.Back != null) l.Back.SetTextureMid(linedefProps[i].Back != null ? linedefProps[i].Back.TextureMid : EMPTY_TEXTURE);
|
|
i++;
|
|
}
|
|
//update values
|
|
} else {
|
|
foreach(Linedef l in lines)
|
|
if(l.Back != null) l.Back.SetTextureMid(backmid.GetResult(l.Back.MiddleTexture));
|
|
}
|
|
|
|
// Update the used textures
|
|
General.Map.Data.UpdateUsedTextures();
|
|
|
|
General.Map.IsChanged = true;
|
|
if(OnValuesChanged != null) OnValuesChanged(this, EventArgs.Empty);
|
|
}
|
|
|
|
private void backlow_OnValueChanged(object sender, EventArgs e) {
|
|
if(preventchanges) return;
|
|
|
|
//restore values
|
|
if(string.IsNullOrEmpty(backlow.TextureName)) {
|
|
int i = 0;
|
|
|
|
foreach(Linedef l in lines) {
|
|
if(l.Back != null) l.Back.SetTextureLow(linedefProps[i].Back != null ? linedefProps[i].Back.TextureLow : EMPTY_TEXTURE);
|
|
i++;
|
|
}
|
|
//update values
|
|
} else {
|
|
foreach(Linedef l in lines)
|
|
if(l.Back != null) l.Back.SetTextureLow(backlow.GetResult(l.Back.LowTexture));
|
|
}
|
|
|
|
// Update the used textures
|
|
General.Map.Data.UpdateUsedTextures();
|
|
|
|
General.Map.IsChanged = true;
|
|
if(OnValuesChanged != null) OnValuesChanged(this, EventArgs.Empty);
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Brightness changed
|
|
|
|
private void lightFront_WhenTextChanged(object sender, EventArgs e) {
|
|
if(preventchanges) return;
|
|
int i = 0;
|
|
|
|
//restore values
|
|
if(string.IsNullOrEmpty(lightFront.Text)) {
|
|
foreach(Linedef l in lines) {
|
|
if(l.Front != null)
|
|
UDMFTools.SetInteger(l.Front.Fields, "light", (linedefProps[i].Front != null ? linedefProps[i].Front.Brightness : 0), 0, false);
|
|
i++;
|
|
}
|
|
//update values
|
|
} else {
|
|
foreach(Linedef l in lines) {
|
|
if(l.Front != null) {
|
|
bool absolute = false;
|
|
if(cbLightAbsoluteFront.CheckState == CheckState.Indeterminate) {
|
|
absolute = l.Front.Fields.GetValue("lightabsolute", false);
|
|
} else if(cbLightAbsoluteFront.CheckState == CheckState.Checked) {
|
|
absolute = true;
|
|
}
|
|
|
|
int value = General.Clamp(lightFront.GetResult((linedefProps[i].Front != null ? linedefProps[i].Front.Brightness : 0)), (absolute ? 0 : -255), 255);
|
|
UDMFTools.SetInteger(l.Front.Fields, "light", value, 0, false);
|
|
}
|
|
i++;
|
|
}
|
|
}
|
|
|
|
General.Map.IsChanged = true;
|
|
if(OnValuesChanged != null) OnValuesChanged(this, EventArgs.Empty);
|
|
}
|
|
|
|
private void lightBack_WhenTextChanged(object sender, EventArgs e) {
|
|
if(preventchanges) return;
|
|
int i = 0;
|
|
|
|
//restore values
|
|
if(string.IsNullOrEmpty(lightBack.Text)) {
|
|
foreach(Linedef l in lines) {
|
|
if(l.Back != null)
|
|
UDMFTools.SetInteger(l.Back.Fields, "light", (linedefProps[i].Back != null ? linedefProps[i].Back.Brightness : 0), 0, false);
|
|
i++;
|
|
}
|
|
//update values
|
|
} else {
|
|
foreach(Linedef l in lines) {
|
|
if(l.Back != null) {
|
|
bool absolute = false;
|
|
if(cbLightAbsoluteBack.CheckState == CheckState.Indeterminate) {
|
|
absolute = l.Back.Fields.GetValue("lightabsolute", false);
|
|
} else if(cbLightAbsoluteBack.CheckState == CheckState.Checked) {
|
|
absolute = true;
|
|
}
|
|
|
|
int value = General.Clamp(lightBack.GetResult((linedefProps[i].Back != null ? linedefProps[i].Back.Brightness : 0)), (absolute ? 0 : -255), 255);
|
|
UDMFTools.SetInteger(l.Back.Fields, "light", value, 0, false);
|
|
}
|
|
i++;
|
|
}
|
|
}
|
|
|
|
General.Map.IsChanged = true;
|
|
if(OnValuesChanged != null) OnValuesChanged(this, EventArgs.Empty);
|
|
}
|
|
|
|
private void cbLightAbsoluteFront_CheckedChanged(object sender, EventArgs e) {
|
|
if(preventchanges) return;
|
|
|
|
if(cbLightAbsoluteFront.Checked) {
|
|
foreach(Linedef l in lines) {
|
|
if(l.Front == null) continue;
|
|
l.Front.Fields["lightabsolute"] = new UniValue(UniversalType.Boolean, true);
|
|
}
|
|
} else if(cbLightAbsoluteFront.CheckState == CheckState.Indeterminate) {
|
|
int i = 0;
|
|
|
|
foreach(Linedef l in lines) {
|
|
if(l.Front != null) {
|
|
if(linedefProps[i].Front != null && linedefProps[i].Front.AbsoluteBrightness) {
|
|
l.Front.Fields["lightabsolute"] = new UniValue(UniversalType.Boolean, true);
|
|
} else if(l.Front.Fields.ContainsKey("lightabsolute")) {
|
|
l.Front.Fields.Remove("lightabsolute");
|
|
}
|
|
}
|
|
i++;
|
|
}
|
|
} else {
|
|
foreach(Linedef l in lines) {
|
|
if(l.Front == null) continue;
|
|
if(l.Front.Fields.ContainsKey("lightabsolute")) l.Front.Fields.Remove("lightabsolute");
|
|
}
|
|
}
|
|
|
|
General.Map.IsChanged = true;
|
|
if(OnValuesChanged != null) OnValuesChanged(this, EventArgs.Empty);
|
|
}
|
|
|
|
private void cbLightAbsoluteBack_CheckedChanged(object sender, EventArgs e) {
|
|
if(preventchanges) return;
|
|
|
|
if(cbLightAbsoluteBack.Checked) {
|
|
foreach(Linedef l in lines) {
|
|
if(l.Back == null) continue;
|
|
l.Back.Fields["lightabsolute"] = new UniValue(UniversalType.Boolean, true);
|
|
}
|
|
} else if(cbLightAbsoluteBack.CheckState == CheckState.Indeterminate) {
|
|
int i = 0;
|
|
|
|
foreach(Linedef l in lines) {
|
|
if(l.Back != null) {
|
|
if(linedefProps[i].Back != null && linedefProps[i].Back.AbsoluteBrightness) {
|
|
l.Back.Fields["lightabsolute"] = new UniValue(UniversalType.Boolean, true);
|
|
} else if(l.Back.Fields.ContainsKey("lightabsolute")) {
|
|
l.Back.Fields.Remove("lightabsolute");
|
|
}
|
|
}
|
|
i++;
|
|
}
|
|
} else {
|
|
foreach(Linedef l in lines) {
|
|
if(l.Back == null) continue;
|
|
if(l.Back.Fields.ContainsKey("lightabsolute")) l.Back.Fields.Remove("lightabsolute");
|
|
}
|
|
}
|
|
|
|
General.Map.IsChanged = true;
|
|
if(OnValuesChanged != null) OnValuesChanged(this, EventArgs.Empty);
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Global texture offsets changed
|
|
|
|
private void frontTextureOffset_OnValuesChanged(object sender, EventArgs e) {
|
|
if(preventchanges) return;
|
|
|
|
int i = 0;
|
|
|
|
foreach(Linedef l in lines) {
|
|
if(l.Front != null) {
|
|
if(linedefProps[i].Front != null) {
|
|
l.Front.OffsetX = frontTextureOffset.GetValue1(linedefProps[i].Front.OffsetX);
|
|
l.Front.OffsetY = frontTextureOffset.GetValue2(linedefProps[i].Front.OffsetY);
|
|
} else {
|
|
l.Front.OffsetX = frontTextureOffset.GetValue1(0);
|
|
l.Front.OffsetY = frontTextureOffset.GetValue2(0);
|
|
}
|
|
}
|
|
|
|
i++;
|
|
}
|
|
|
|
General.Map.IsChanged = true;
|
|
if(OnValuesChanged != null) OnValuesChanged(this, EventArgs.Empty);
|
|
}
|
|
|
|
private void backTextureOffset_OnValuesChanged(object sender, EventArgs e) {
|
|
if(preventchanges) return;
|
|
|
|
int i = 0;
|
|
|
|
foreach(Linedef l in lines) {
|
|
if(l.Back != null) {
|
|
if(linedefProps[i].Back != null) {
|
|
l.Back.OffsetX = backTextureOffset.GetValue1(linedefProps[i].Back.OffsetX);
|
|
l.Back.OffsetY = backTextureOffset.GetValue2(linedefProps[i].Back.OffsetY);
|
|
} else {
|
|
l.Back.OffsetX = backTextureOffset.GetValue1(0);
|
|
l.Back.OffsetY = backTextureOffset.GetValue2(0);
|
|
}
|
|
}
|
|
|
|
i++;
|
|
}
|
|
|
|
General.Map.IsChanged = true;
|
|
if(OnValuesChanged != null) OnValuesChanged(this, EventArgs.Empty);
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Texture offsets changed
|
|
|
|
private void pfcFrontOffsetTop_OnValuesChanged(object sender, EventArgs e) {
|
|
if(preventchanges) return;
|
|
int i = 0;
|
|
|
|
foreach(Linedef l in lines) {
|
|
if(l.Front != null) {
|
|
float oldX = linedefProps[i].Front != null ? linedefProps[i].Front.OffsetTopX : 0f;
|
|
float oldY = linedefProps[i].Front != null ? linedefProps[i].Front.OffsetTopY : 0f;
|
|
pfcFrontOffsetTop.ApplyTo(l.Front.Fields, General.Map.FormatInterface.MinTextureOffset, General.Map.FormatInterface.MaxTextureOffset, oldX, oldY);
|
|
}
|
|
i++;
|
|
}
|
|
|
|
General.Map.IsChanged = true;
|
|
if(OnValuesChanged != null) OnValuesChanged(this, EventArgs.Empty);
|
|
}
|
|
|
|
private void pfcFrontOffsetMid_OnValuesChanged(object sender, EventArgs e) {
|
|
if(preventchanges) return;
|
|
int i = 0;
|
|
|
|
foreach(Linedef l in lines) {
|
|
if(l.Front != null) {
|
|
float oldX = linedefProps[i].Front != null ? linedefProps[i].Front.OffsetMidX : 0f;
|
|
float oldY = linedefProps[i].Front != null ? linedefProps[i].Front.OffsetMidY : 0f;
|
|
pfcFrontOffsetMid.ApplyTo(l.Front.Fields, General.Map.FormatInterface.MinTextureOffset, General.Map.FormatInterface.MaxTextureOffset, oldX, oldY);
|
|
}
|
|
|
|
i++;
|
|
}
|
|
|
|
General.Map.IsChanged = true;
|
|
if(OnValuesChanged != null) OnValuesChanged(this, EventArgs.Empty);
|
|
}
|
|
|
|
private void pfcFrontOffsetBottom_OnValuesChanged(object sender, EventArgs e) {
|
|
if(preventchanges) return;
|
|
int i = 0;
|
|
|
|
foreach(Linedef l in lines) {
|
|
if(l.Front != null) {
|
|
float oldX = linedefProps[i].Front != null ? linedefProps[i].Front.OffsetBottomX : 0f;
|
|
float oldY = linedefProps[i].Front != null ? linedefProps[i].Front.OffsetBottomY : 0f;
|
|
pfcFrontOffsetBottom.ApplyTo(l.Front.Fields, General.Map.FormatInterface.MinTextureOffset, General.Map.FormatInterface.MaxTextureOffset, oldX, oldY);
|
|
}
|
|
|
|
i++;
|
|
}
|
|
|
|
General.Map.IsChanged = true;
|
|
if(OnValuesChanged != null) OnValuesChanged(this, EventArgs.Empty);
|
|
}
|
|
|
|
private void pfcBackOffsetTop_OnValuesChanged(object sender, EventArgs e) {
|
|
if(preventchanges) return;
|
|
int i = 0;
|
|
|
|
foreach(Linedef l in lines) {
|
|
if(l.Back != null) {
|
|
float oldX = linedefProps[i].Back != null ? linedefProps[i].Back.OffsetTopX : 0f;
|
|
float oldY = linedefProps[i].Back != null ? linedefProps[i].Back.OffsetTopY : 0f;
|
|
pfcBackOffsetTop.ApplyTo(l.Back.Fields, General.Map.FormatInterface.MinTextureOffset, General.Map.FormatInterface.MaxTextureOffset, oldX, oldY);
|
|
}
|
|
|
|
i++;
|
|
}
|
|
|
|
General.Map.IsChanged = true;
|
|
if(OnValuesChanged != null) OnValuesChanged(this, EventArgs.Empty);
|
|
}
|
|
|
|
private void pfcBackOffsetMid_OnValuesChanged(object sender, EventArgs e) {
|
|
if(preventchanges) return;
|
|
int i = 0;
|
|
|
|
foreach(Linedef l in lines) {
|
|
if(l.Back != null) {
|
|
float oldX = linedefProps[i].Back != null ? linedefProps[i].Back.OffsetMidX : 0f;
|
|
float oldY = linedefProps[i].Back != null ? linedefProps[i].Back.OffsetMidY : 0f;
|
|
pfcBackOffsetMid.ApplyTo(l.Back.Fields, General.Map.FormatInterface.MinTextureOffset, General.Map.FormatInterface.MaxTextureOffset, oldX, oldY);
|
|
}
|
|
|
|
i++;
|
|
}
|
|
|
|
General.Map.IsChanged = true;
|
|
if(OnValuesChanged != null) OnValuesChanged(this, EventArgs.Empty);
|
|
}
|
|
|
|
private void pfcBackOffsetBottom_OnValuesChanged(object sender, EventArgs e) {
|
|
if(preventchanges) return;
|
|
int i = 0;
|
|
|
|
foreach(Linedef l in lines) {
|
|
if(l.Back != null) {
|
|
float oldX = linedefProps[i].Back != null ? linedefProps[i].Back.OffsetBottomX : 0f;
|
|
float oldY = linedefProps[i].Back != null ? linedefProps[i].Back.OffsetBottomY : 0f;
|
|
pfcBackOffsetBottom.ApplyTo(l.Back.Fields, General.Map.FormatInterface.MinTextureOffset, General.Map.FormatInterface.MaxTextureOffset, oldX, oldY);
|
|
}
|
|
|
|
i++;
|
|
}
|
|
|
|
General.Map.IsChanged = true;
|
|
if(OnValuesChanged != null) OnValuesChanged(this, EventArgs.Empty);
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Scale changed
|
|
|
|
private void pfcFrontScaleTop_OnValuesChanged(object sender, EventArgs e) {
|
|
if(preventchanges) return;
|
|
int i = 0;
|
|
|
|
foreach(Linedef l in lines) {
|
|
if(l.Front != null) {
|
|
float oldX = linedefProps[i].Front != null ? linedefProps[i].Front.ScaleTopX : 1.0f;
|
|
float oldY = linedefProps[i].Front != null ? linedefProps[i].Front.ScaleTopY : 1.0f;
|
|
pfcFrontScaleTop.ApplyTo(l.Front.Fields, General.Map.FormatInterface.MinTextureOffset, General.Map.FormatInterface.MaxTextureOffset, oldX, oldY);
|
|
}
|
|
|
|
i++;
|
|
}
|
|
|
|
General.Map.IsChanged = true;
|
|
if(OnValuesChanged != null) OnValuesChanged(this, EventArgs.Empty);
|
|
}
|
|
|
|
private void pfcFrontScaleMid_OnValuesChanged(object sender, EventArgs e) {
|
|
if(preventchanges) return;
|
|
int i = 0;
|
|
|
|
foreach(Linedef l in lines) {
|
|
if(l.Front != null) {
|
|
float oldX = linedefProps[i].Front != null ? linedefProps[i].Front.ScaleMidX : 1.0f;
|
|
float oldY = linedefProps[i].Front != null ? linedefProps[i].Front.ScaleMidY : 1.0f;
|
|
pfcFrontScaleMid.ApplyTo(l.Front.Fields, General.Map.FormatInterface.MinTextureOffset, General.Map.FormatInterface.MaxTextureOffset, oldX, oldY);
|
|
}
|
|
|
|
i++;
|
|
}
|
|
|
|
General.Map.IsChanged = true;
|
|
if(OnValuesChanged != null) OnValuesChanged(this, EventArgs.Empty);
|
|
}
|
|
|
|
private void pfcFrontScaleBottom_OnValuesChanged(object sender, EventArgs e) {
|
|
if(preventchanges) return;
|
|
int i = 0;
|
|
|
|
foreach(Linedef l in lines) {
|
|
if(l.Front != null) {
|
|
float oldX = linedefProps[i].Front != null ? linedefProps[i].Front.ScaleBottomX : 1.0f;
|
|
float oldY = linedefProps[i].Front != null ? linedefProps[i].Front.ScaleBottomY : 1.0f;
|
|
pfcFrontScaleBottom.ApplyTo(l.Front.Fields, General.Map.FormatInterface.MinTextureOffset, General.Map.FormatInterface.MaxTextureOffset, oldX, oldY);
|
|
}
|
|
|
|
i++;
|
|
}
|
|
|
|
General.Map.IsChanged = true;
|
|
if(OnValuesChanged != null) OnValuesChanged(this, EventArgs.Empty);
|
|
}
|
|
|
|
private void pfcBackScaleTop_OnValuesChanged(object sender, EventArgs e) {
|
|
if(preventchanges) return;
|
|
int i = 0;
|
|
|
|
foreach(Linedef l in lines) {
|
|
if(l.Back != null) {
|
|
float oldX = linedefProps[i].Back != null ? linedefProps[i].Back.ScaleTopX : 1.0f;
|
|
float oldY = linedefProps[i].Back != null ? linedefProps[i].Back.ScaleTopY : 1.0f;
|
|
pfcBackScaleTop.ApplyTo(l.Back.Fields, General.Map.FormatInterface.MinTextureOffset, General.Map.FormatInterface.MaxTextureOffset, oldX, oldY);
|
|
}
|
|
|
|
i++;
|
|
}
|
|
|
|
General.Map.IsChanged = true;
|
|
if(OnValuesChanged != null) OnValuesChanged(this, EventArgs.Empty);
|
|
}
|
|
|
|
private void pfcBackScaleMid_OnValuesChanged(object sender, EventArgs e) {
|
|
if(preventchanges) return;
|
|
int i = 0;
|
|
|
|
foreach(Linedef l in lines) {
|
|
if(l.Back != null) {
|
|
float oldX = linedefProps[i].Back != null ? linedefProps[i].Back.ScaleMidX : 1.0f;
|
|
float oldY = linedefProps[i].Back != null ? linedefProps[i].Back.ScaleMidY : 1.0f;
|
|
pfcBackScaleMid.ApplyTo(l.Back.Fields, General.Map.FormatInterface.MinTextureOffset, General.Map.FormatInterface.MaxTextureOffset, oldX, oldY);
|
|
}
|
|
|
|
i++;
|
|
}
|
|
|
|
General.Map.IsChanged = true;
|
|
if(OnValuesChanged != null) OnValuesChanged(this, EventArgs.Empty);
|
|
}
|
|
|
|
private void pfcBackScaleBottom_OnValuesChanged(object sender, EventArgs e) {
|
|
if(preventchanges) return;
|
|
int i = 0;
|
|
|
|
foreach(Linedef l in lines) {
|
|
if(l.Back != null) {
|
|
float oldX = linedefProps[i].Back != null ? linedefProps[i].Back.ScaleBottomX : 1.0f;
|
|
float oldY = linedefProps[i].Back != null ? linedefProps[i].Back.ScaleBottomY : 1.0f;
|
|
pfcBackScaleBottom.ApplyTo(l.Back.Fields, General.Map.FormatInterface.MinTextureOffset, General.Map.FormatInterface.MaxTextureOffset, oldX, oldY);
|
|
}
|
|
|
|
i++;
|
|
}
|
|
|
|
General.Map.IsChanged = true;
|
|
if(OnValuesChanged != null) OnValuesChanged(this, EventArgs.Empty);
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Flags cahnged
|
|
|
|
private void flagsFront_OnValueChanged(object sender, EventArgs e) {
|
|
if(preventchanges) return;
|
|
int i = 0;
|
|
|
|
foreach(Linedef l in lines) {
|
|
if(l.Front == null) continue;
|
|
|
|
// Apply all flags
|
|
foreach(CheckBox c in flagsFront.Checkboxes) {
|
|
if(c.CheckState == CheckState.Checked)
|
|
l.Front.SetFlag(c.Tag.ToString(), true);
|
|
else if(c.CheckState == CheckState.Unchecked)
|
|
l.Front.SetFlag(c.Tag.ToString(), false);
|
|
else
|
|
l.Front.SetFlag(c.Tag.ToString(), linedefProps[i].Front.Flags[c.Tag.ToString()]);
|
|
}
|
|
|
|
i++;
|
|
}
|
|
|
|
General.Map.IsChanged = true;
|
|
if(OnValuesChanged != null) OnValuesChanged(this, EventArgs.Empty);
|
|
}
|
|
|
|
private void flagsBack_OnValueChanged(object sender, EventArgs e) {
|
|
if(preventchanges) return;
|
|
int i = 0;
|
|
|
|
foreach(Linedef l in lines) {
|
|
if(l.Back == null) continue;
|
|
|
|
// Apply all flags
|
|
foreach(CheckBox c in flagsBack.Checkboxes) {
|
|
if(c.CheckState == CheckState.Checked)
|
|
l.Back.SetFlag(c.Tag.ToString(), true);
|
|
else if(c.CheckState == CheckState.Unchecked)
|
|
l.Back.SetFlag(c.Tag.ToString(), false);
|
|
else
|
|
l.Back.SetFlag(c.Tag.ToString(), linedefProps[i].Back.Flags[c.Tag.ToString()]);
|
|
}
|
|
|
|
i++;
|
|
}
|
|
|
|
General.Map.IsChanged = true;
|
|
if(OnValuesChanged != null) OnValuesChanged(this, EventArgs.Empty);
|
|
}
|
|
|
|
#endregion
|
|
|
|
#endregion
|
|
|
|
}
|
|
}
|