UDMF: implemented 'moreids' handling. Currently this includes the core stuff, new TagsPicker control in Edit Sector/Linedef windows and updated Sector/Linedef Info panels.

This commit is contained in:
MaxED 2015-07-27 21:35:42 +00:00
parent 5cd998b1fc
commit 45e303b2c8
28 changed files with 1126 additions and 239 deletions

View file

@ -795,6 +795,12 @@
<Compile Include="GZBuilder\Controls\ColorFieldsControl.Designer.cs">
<DependentUpon>ColorFieldsControl.cs</DependentUpon>
</Compile>
<Compile Include="GZBuilder\Controls\TagsSelector.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="GZBuilder\Controls\TagsSelector.Designer.cs">
<DependentUpon>TagsSelector.cs</DependentUpon>
</Compile>
<Compile Include="GZBuilder\Controls\CustomLinedefColorProperties.cs">
<SubType>UserControl</SubType>
</Compile>
@ -1022,6 +1028,9 @@
<EmbeddedResource Include="GZBuilder\Controls\ColorFieldsControl.resx">
<DependentUpon>ColorFieldsControl.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="GZBuilder\Controls\TagsSelector.resx">
<DependentUpon>TagsSelector.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="GZBuilder\Controls\CustomLinedefColorProperties.resx">
<DependentUpon>CustomLinedefColorProperties.cs</DependentUpon>
</EmbeddedResource>

View file

@ -121,10 +121,23 @@ namespace CodeImp.DoomBuilder.Controls
taglabel.Visible = true;
tag.Visible = true;
//set tag
tag.Text = l.Tag + (General.Map.Options.TagLabels.ContainsKey(l.Tag) ? " - " + General.Map.Options.TagLabels[l.Tag] : string.Empty);
tag.Enabled = (l.Tag != 0);
taglabel.Enabled = (l.Tag != 0);
//mxd. Set tag(s)
if(l.Tags.Count > 1)
{
string[] tags = new string[l.Tags.Count];
for (int i = 0; i < l.Tags.Count; i++) tags[i] = l.Tags[i].ToString();
tag.Text = string.Join(", ", tags);
tag.Enabled = true;
taglabel.Enabled = true;
taglabel.Text = "Tags:";
}
else
{
tag.Text = l.Tag + (General.Map.Options.TagLabels.ContainsKey(l.Tag) ? " - " + General.Map.Options.TagLabels[l.Tag] : string.Empty);
tag.Enabled = (l.Tag != 0);
taglabel.Enabled = (l.Tag != 0);
taglabel.Text = "Tag:";
}
}
// Get line action information

View file

@ -32,8 +32,8 @@ namespace CodeImp.DoomBuilder.Controls
System.Windows.Forms.Label label5;
this.labelfloor = new System.Windows.Forms.Label();
this.labelceiling = new System.Windows.Forms.Label();
this.labelTag = new System.Windows.Forms.Label();
this.labelEffect = new System.Windows.Forms.Label();
this.taglabel = new System.Windows.Forms.Label();
this.effectlabel = new System.Windows.Forms.Label();
this.ceilingLightLabel = new System.Windows.Forms.Label();
this.ceilingScaleLabel = new System.Windows.Forms.Label();
this.ceilingAngleLabel = new System.Windows.Forms.Label();
@ -119,23 +119,23 @@ namespace CodeImp.DoomBuilder.Controls
this.labelceiling.Text = "Ceiling:";
this.labelceiling.TextAlign = System.Drawing.ContentAlignment.TopRight;
//
// labelTag
// taglabel
//
this.labelTag.Location = new System.Drawing.Point(8, 79);
this.labelTag.Name = "labelTag";
this.labelTag.Size = new System.Drawing.Size(44, 14);
this.labelTag.TabIndex = 4;
this.labelTag.Text = "Tag:";
this.labelTag.TextAlign = System.Drawing.ContentAlignment.TopRight;
this.taglabel.Location = new System.Drawing.Point(8, 79);
this.taglabel.Name = "taglabel";
this.taglabel.Size = new System.Drawing.Size(44, 14);
this.taglabel.TabIndex = 4;
this.taglabel.Text = "Tag:";
this.taglabel.TextAlign = System.Drawing.ContentAlignment.TopRight;
//
// labelEffect
//
this.labelEffect.Location = new System.Drawing.Point(8, 19);
this.labelEffect.Name = "labelEffect";
this.labelEffect.Size = new System.Drawing.Size(44, 14);
this.labelEffect.TabIndex = 0;
this.labelEffect.Text = "Effect:";
this.labelEffect.TextAlign = System.Drawing.ContentAlignment.TopRight;
this.effectlabel.Location = new System.Drawing.Point(8, 19);
this.effectlabel.Name = "effectlabel";
this.effectlabel.Size = new System.Drawing.Size(44, 14);
this.effectlabel.TabIndex = 0;
this.effectlabel.Text = "Effect:";
this.effectlabel.TextAlign = System.Drawing.ContentAlignment.TopRight;
//
// ceilingLightLabel
//
@ -222,11 +222,11 @@ namespace CodeImp.DoomBuilder.Controls
this.sectorinfo.Controls.Add(this.tag);
this.sectorinfo.Controls.Add(this.floor);
this.sectorinfo.Controls.Add(this.ceiling);
this.sectorinfo.Controls.Add(this.labelTag);
this.sectorinfo.Controls.Add(this.taglabel);
this.sectorinfo.Controls.Add(this.labelfloor);
this.sectorinfo.Controls.Add(this.labelceiling);
this.sectorinfo.Controls.Add(this.effect);
this.sectorinfo.Controls.Add(this.labelEffect);
this.sectorinfo.Controls.Add(this.effectlabel);
this.sectorinfo.Location = new System.Drawing.Point(0, 0);
this.sectorinfo.Margin = new System.Windows.Forms.Padding(0, 0, 3, 0);
this.sectorinfo.Name = "sectorinfo";
@ -601,8 +601,8 @@ namespace CodeImp.DoomBuilder.Controls
private System.Windows.Forms.Label labelLight;
private System.Windows.Forms.GroupBox flagsPanel;
private System.Windows.Forms.ListView flags;
private System.Windows.Forms.Label labelTag;
private System.Windows.Forms.Label labelEffect;
private System.Windows.Forms.Label taglabel;
private System.Windows.Forms.Label effectlabel;
private System.Windows.Forms.Label labelfloor;
private System.Windows.Forms.Label labelceiling;
}

View file

@ -65,17 +65,32 @@ namespace CodeImp.DoomBuilder.Controls
effect.Text = effectinfo;
ceiling.Text = s.CeilHeight.ToString();
floor.Text = s.FloorHeight.ToString();
tag.Text = s.Tag + (General.Map.Options.TagLabels.ContainsKey(s.Tag) ? " - " + General.Map.Options.TagLabels[s.Tag] : string.Empty);
height.Text = sheight.ToString();
brightness.Text = s.Brightness.ToString();
floorname.Text = s.FloorTexture;
ceilingname.Text = s.CeilTexture;
//mxd. Set tags
if(s.Tags.Count > 1)
{
string[] tags = new string[s.Tags.Count];
for(int i = 0; i < s.Tags.Count; i++) tags[i] = s.Tags[i].ToString();
tag.Text = string.Join(", ", tags);
tag.Enabled = true;
taglabel.Enabled = true;
taglabel.Text = "Tags:";
}
else
{
tag.Text = s.Tag + (General.Map.Options.TagLabels.ContainsKey(s.Tag) ? " - " + General.Map.Options.TagLabels[s.Tag] : string.Empty);
tag.Enabled = (s.Tag != 0);
taglabel.Enabled = (s.Tag != 0);
taglabel.Text = "Tag:";
}
//mxd
effect.Enabled = (s.Effect != 0);
labelEffect.Enabled = (s.Effect != 0);
tag.Enabled = (s.Tag != 0);
labelTag.Enabled = (s.Tag != 0);
effectlabel.Enabled = (s.Effect != 0);
//mxd. Texture size
if (s.LongFloorTexture == MapSet.EmptyLongName)

View file

@ -33,18 +33,23 @@
this.cbTagPicker = new System.Windows.Forms.ComboBox();
this.newTag = new System.Windows.Forms.Button();
this.unusedTag = new System.Windows.Forms.Button();
this.toolTip1 = new System.Windows.Forms.ToolTip(this.components);
this.tooltip = new System.Windows.Forms.ToolTip(this.components);
this.clear = new System.Windows.Forms.Button();
this.SuspendLayout();
//
// label1
//
this.label1.AutoSize = true;
this.label1.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Underline, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
this.label1.ForeColor = System.Drawing.SystemColors.HotTrack;
this.label1.Location = new System.Drawing.Point(7, 10);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(29, 13);
this.label1.TabIndex = 0;
this.label1.Text = "Tag:";
this.tooltip.SetToolTip(this.label1, "Use \">=\" or \"<=\" prefixes to create\r\nacsending or descending tags range.\r\nUse \"++" +
"\" or \"--\" prefixes to increment\r\nor decrement already existing tags \r\nby given v" +
"alue.");
//
// cbTagPicker
//
@ -66,7 +71,7 @@
this.newTag.Size = new System.Drawing.Size(54, 24);
this.newTag.TabIndex = 2;
this.newTag.Text = "New";
this.toolTip1.SetToolTip(this.newTag, "Finds a tag, which is not used as a tag or tag action argument \r\nby any map eleme" +
this.tooltip.SetToolTip(this.newTag, "Finds a tag, which is not used as a tag or tag action argument \r\nby any map eleme" +
"nt");
this.newTag.UseVisualStyleBackColor = true;
this.newTag.Click += new System.EventHandler(this.newTag_Click);
@ -79,10 +84,17 @@
this.unusedTag.Size = new System.Drawing.Size(54, 24);
this.unusedTag.TabIndex = 3;
this.unusedTag.Text = "Unused";
this.toolTip1.SetToolTip(this.unusedTag, "Finds a tag, which is not used as a tag \r\nby any map element of this type");
this.tooltip.SetToolTip(this.unusedTag, "Finds a tag, which is not used as a tag \r\nby any map element of this type");
this.unusedTag.UseVisualStyleBackColor = true;
this.unusedTag.Click += new System.EventHandler(this.unusedTag_Click);
//
// tooltip
//
this.tooltip.AutomaticDelay = 10;
this.tooltip.AutoPopDelay = 10000;
this.tooltip.InitialDelay = 10;
this.tooltip.ReshowDelay = 100;
//
// clear
//
this.clear.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
@ -91,7 +103,7 @@
this.clear.Name = "clear";
this.clear.Size = new System.Drawing.Size(26, 24);
this.clear.TabIndex = 4;
this.toolTip1.SetToolTip(this.clear, "Sets tag to 0");
this.tooltip.SetToolTip(this.clear, "Sets tag to 0");
this.clear.UseVisualStyleBackColor = true;
this.clear.Click += new System.EventHandler(this.clear_Click);
//
@ -117,7 +129,7 @@
private System.Windows.Forms.ComboBox cbTagPicker;
private System.Windows.Forms.Button newTag;
private System.Windows.Forms.Button unusedTag;
private System.Windows.Forms.ToolTip toolTip1;
private System.Windows.Forms.ToolTip tooltip;
private System.Windows.Forms.Button clear;
}
}

View file

@ -36,7 +36,7 @@ namespace CodeImp.DoomBuilder.GZBuilder.Controls
private List<TagInfo> infos;
private bool valid;
private int tag;
private UniversalType elementType;
private UniversalType elementtype;
private int rangemode; //0 - none, 1 - positive (>=), -1 - negative (<=)
private int offsetmode; //0 - none, 1 - positive (++), -1 - negative (--)
@ -53,37 +53,50 @@ namespace CodeImp.DoomBuilder.GZBuilder.Controls
#region ================== Methods
public void Setup(UniversalType elementType)
public void Setup(UniversalType mapelementtype)
{
tags = new List<int>();
infos = new List<TagInfo>();
this.elementType = elementType;
this.elementtype = mapelementtype;
//collect used tags from sectors...
foreach(Sector s in General.Map.Map.Sectors)
//collect used tags from appropriate element type...
switch(elementtype)
{
if(s.Tag == 0 || tags.Contains(s.Tag)) continue;
tags.Add(s.Tag);
}
case UniversalType.SectorTag:
foreach(Sector s in General.Map.Map.Sectors)
{
foreach(int t in s.Tags)
{
if(t == 0 || tags.Contains(t)) continue;
tags.Add(t);
}
}
break;
//...and linedefs...
if(General.Map.FormatInterface.HasLinedefTag)
{
foreach(Linedef l in General.Map.Map.Linedefs)
{
if(l.Tag == 0 || tags.Contains(l.Tag)) continue;
tags.Add(l.Tag);
}
}
case UniversalType.LinedefTag:
if(General.Map.FormatInterface.HasLinedefTag)
{
foreach(Linedef l in General.Map.Map.Linedefs)
{
foreach(int t in l.Tags)
{
if(t == 0 || tags.Contains(t)) continue;
tags.Add(t);
}
}
}
break;
//...and things...
if(General.Map.FormatInterface.HasThingTag)
{
foreach(Thing t in General.Map.Map.Things)
{
if(t.Tag == 0 || tags.Contains(t.Tag)) continue;
tags.Add(t.Tag);
}
case UniversalType.ThingTag:
if(General.Map.FormatInterface.HasThingTag)
{
foreach(Thing t in General.Map.Map.Things)
{
if(t.Tag == 0 || tags.Contains(t.Tag)) continue;
tags.Add(t.Tag);
}
}
break;
}
//now sort them in descending order
@ -224,7 +237,7 @@ namespace CodeImp.DoomBuilder.GZBuilder.Controls
private void unusedTag_Click(object sender, EventArgs e)
{
tag = General.Map.Map.GetNewTag(elementType);
tag = General.Map.Map.GetNewTag(elementtype);
cbTagPicker.SelectedIndex = -1;
cbTagPicker.Text = tag.ToString();
valid = true;

View file

@ -117,7 +117,7 @@
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="toolTip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<metadata name="tooltip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
</root>

View file

@ -0,0 +1,196 @@
namespace CodeImp.DoomBuilder.GZBuilder.Controls
{
partial class TagsSelector
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing) {
if(disposing && (components != null)) {
components.Dispose();
}
base.Dispose(disposing);
}
#region Component Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent() {
this.components = new System.ComponentModel.Container();
this.curtaglabel = new System.Windows.Forms.Label();
this.tagpicker = new System.Windows.Forms.ComboBox();
this.newtag = new System.Windows.Forms.Button();
this.unusedtag = new System.Windows.Forms.Button();
this.tooltip = new System.Windows.Forms.ToolTip(this.components);
this.removetag = new System.Windows.Forms.Button();
this.addtag = new System.Windows.Forms.Button();
this.clear = new System.Windows.Forms.Button();
this.tagslist = new System.Windows.Forms.LinkLabel();
this.label1 = new System.Windows.Forms.Label();
this.clearalltags = new System.Windows.Forms.Button();
this.SuspendLayout();
//
// curtaglabel
//
this.curtaglabel.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Underline, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
this.curtaglabel.ForeColor = System.Drawing.SystemColors.HotTrack;
this.curtaglabel.Location = new System.Drawing.Point(8, 10);
this.curtaglabel.Name = "curtaglabel";
this.curtaglabel.Size = new System.Drawing.Size(52, 13);
this.curtaglabel.TabIndex = 0;
this.curtaglabel.Text = "Tag 1:";
this.curtaglabel.TextAlign = System.Drawing.ContentAlignment.TopRight;
this.tooltip.SetToolTip(this.curtaglabel, "Use \">=\" or \"<=\" prefixes to create\r\nacsending or descending tags range.\r\nUse \"++" +
"\" or \"--\" prefixes to increment\r\nor decrement already existing tags \r\nby given v" +
"alue.");
//
// tagpicker
//
this.tagpicker.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.tagpicker.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.Suggest;
this.tagpicker.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.ListItems;
this.tagpicker.FormattingEnabled = true;
this.tagpicker.Location = new System.Drawing.Point(65, 7);
this.tagpicker.Name = "tagpicker";
this.tagpicker.Size = new System.Drawing.Size(230, 21);
this.tagpicker.TabIndex = 1;
this.tagpicker.TextChanged += new System.EventHandler(this.tagpicker_TextChanged);
//
// newtag
//
this.newtag.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.newtag.Location = new System.Drawing.Point(299, 5);
this.newtag.Name = "newtag";
this.newtag.Size = new System.Drawing.Size(54, 24);
this.newtag.TabIndex = 2;
this.newtag.Text = "New";
this.tooltip.SetToolTip(this.newtag, "Find number, which is not used as a tag\r\nor tag action argument by any map elemen" +
"t");
this.newtag.UseVisualStyleBackColor = true;
this.newtag.Click += new System.EventHandler(this.newtag_Click);
//
// unusedtag
//
this.unusedtag.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.unusedtag.Location = new System.Drawing.Point(356, 5);
this.unusedtag.Name = "unusedtag";
this.unusedtag.Size = new System.Drawing.Size(54, 24);
this.unusedtag.TabIndex = 3;
this.unusedtag.Text = "Unused";
this.tooltip.SetToolTip(this.unusedtag, "Find number, which is not used as a tag \r\nby any map element of this type");
this.unusedtag.UseVisualStyleBackColor = true;
this.unusedtag.Click += new System.EventHandler(this.unusedtag_Click);
//
// removetag
//
this.removetag.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.removetag.Image = global::CodeImp.DoomBuilder.Properties.Resources.SearchClear;
this.removetag.Location = new System.Drawing.Point(413, 33);
this.removetag.Name = "removetag";
this.removetag.Size = new System.Drawing.Size(26, 24);
this.removetag.TabIndex = 7;
this.tooltip.SetToolTip(this.removetag, "Remove selected tag");
this.removetag.UseVisualStyleBackColor = true;
this.removetag.Click += new System.EventHandler(this.removetag_Click);
//
// addtag
//
this.addtag.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.addtag.Image = global::CodeImp.DoomBuilder.Properties.Resources.Add;
this.addtag.Location = new System.Drawing.Point(384, 33);
this.addtag.Name = "addtag";
this.addtag.Size = new System.Drawing.Size(26, 24);
this.addtag.TabIndex = 8;
this.tooltip.SetToolTip(this.addtag, "Add new tag");
this.addtag.UseVisualStyleBackColor = true;
this.addtag.Click += new System.EventHandler(this.addtag_Click);
//
// clear
//
this.clear.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.clear.Image = global::CodeImp.DoomBuilder.Properties.Resources.Reset;
this.clear.Location = new System.Drawing.Point(413, 5);
this.clear.Name = "clear";
this.clear.Size = new System.Drawing.Size(26, 24);
this.clear.TabIndex = 9;
this.tooltip.SetToolTip(this.clear, "Set current tag to 0");
this.clear.UseVisualStyleBackColor = true;
this.clear.Click += new System.EventHandler(this.clear_Click);
//
// tagslist
//
this.tagslist.AutoSize = true;
this.tagslist.Location = new System.Drawing.Point(63, 39);
this.tagslist.Name = "tagslist";
this.tagslist.Size = new System.Drawing.Size(82, 13);
this.tagslist.TabIndex = 5;
this.tagslist.TabStop = true;
this.tagslist.Text = "12 , ??? , [667]";
this.tagslist.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.tagslist_LinkClicked);
//
// label1
//
this.label1.AutoSize = true;
this.label1.Location = new System.Drawing.Point(28, 39);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(34, 13);
this.label1.TabIndex = 6;
this.label1.Text = "Tags:";
//
// clearalltags
//
this.clearalltags.Image = global::CodeImp.DoomBuilder.Properties.Resources.Clear;
this.clearalltags.Location = new System.Drawing.Point(0, 33);
this.clearalltags.Name = "clearalltags";
this.clearalltags.Size = new System.Drawing.Size(24, 24);
this.clearalltags.TabIndex = 10;
this.tooltip.SetToolTip(this.clearalltags, "Remove all tags");
this.clearalltags.UseVisualStyleBackColor = true;
this.clearalltags.Click += new System.EventHandler(this.clearalltags_Click);
//
// TagsSelector
//
this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi;
this.Controls.Add(this.clearalltags);
this.Controls.Add(this.clear);
this.Controls.Add(this.addtag);
this.Controls.Add(this.removetag);
this.Controls.Add(this.label1);
this.Controls.Add(this.tagslist);
this.Controls.Add(this.unusedtag);
this.Controls.Add(this.newtag);
this.Controls.Add(this.tagpicker);
this.Controls.Add(this.curtaglabel);
this.Name = "TagsSelector";
this.Size = new System.Drawing.Size(442, 60);
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.Label curtaglabel;
private System.Windows.Forms.ComboBox tagpicker;
private System.Windows.Forms.Button newtag;
private System.Windows.Forms.Button unusedtag;
private System.Windows.Forms.ToolTip tooltip;
private System.Windows.Forms.LinkLabel tagslist;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.Button removetag;
private System.Windows.Forms.Button addtag;
private System.Windows.Forms.Button clear;
private System.Windows.Forms.Button clearalltags;
}
}

View file

@ -0,0 +1,407 @@
#region ================== Namespaces
using System;
using System.Collections.Generic;
using System.Windows.Forms;
using CodeImp.DoomBuilder.Map;
using CodeImp.DoomBuilder.Types;
#endregion
namespace CodeImp.DoomBuilder.GZBuilder.Controls
{
public partial class TagsSelector : UserControl
{
#region ================== Structs
private struct TagLinkData
{
public int Index;
public int Tag;
}
#endregion
#region ================== Variables
private List<int> usedtags; //tags already used in the map
private List<TagInfo> infos;
private List<int> tags; //tags being edited
private List<int> rangemodes; //0 - none, 1 - positive (>=), -1 - negative (<=)
private List<int> offsetmodes; //0 - none, 1 - positive (++), -1 - negative (--)
private UniversalType elementtype;
private const string TAGS_SEPARATOR = ", ";
private int curtagindex;
private bool blockupdate;
#endregion
#region ================== Constructor
public TagsSelector()
{
InitializeComponent();
}
#endregion
#region ================== Setup
public void Setup(UniversalType mapelementtype)
{
tags = new List<int>();
usedtags = new List<int>();
rangemodes = new List<int>();
offsetmodes = new List<int>();
infos = new List<TagInfo>();
elementtype = mapelementtype;
//collect used tags from appropriate element type...
switch(elementtype)
{
case UniversalType.SectorTag:
foreach(Sector s in General.Map.Map.Sectors)
{
foreach(int tag in s.Tags)
{
if(tag == 0 || usedtags.Contains(tag)) continue;
usedtags.Add(tag);
}
}
break;
case UniversalType.LinedefTag:
if(General.Map.FormatInterface.HasLinedefTag)
{
foreach(Linedef l in General.Map.Map.Linedefs)
{
foreach(int tag in l.Tags)
{
if(tag == 0 || usedtags.Contains(tag)) continue;
usedtags.Add(tag);
}
}
}
break;
default:
throw new NotSupportedException(elementtype + " doesn't support 'moreids' property!");
}
//now sort them in descending order
usedtags.Sort((a, b) => -1 * a.CompareTo(b));
//create tag infos
foreach(int tag in usedtags)
{
if(General.Map.Options.TagLabels.ContainsKey(tag)) //tag labels
infos.Add(new TagInfo(tag, General.Map.Options.TagLabels[tag]));
else
infos.Add(new TagInfo(tag, string.Empty));
}
foreach(TagInfo info in infos) tagpicker.Items.Add(info);
tagpicker.DropDownWidth = DoomBuilder.Geometry.Tools.GetDropDownWidth(tagpicker);
}
// Update collections and controls
public void FinishSetup()
{
if(tags.Count == 0) tags.Add(0);
// Initialize modifier modes
for(int i = 0; i < tags.Count; i++)
{
rangemodes.Add(0);
offsetmodes.Add(0);
}
// Update controls
UpdateTagPicker(tags[0]);
UpdateTagsList();
removetag.Enabled = (tags.Count > 1);
}
public void SetValue(List<int> newtags, bool first)
{
if(first)
{
foreach(int tag in newtags) tags.Add(tag);
return;
}
for(int i = 0; i < newtags.Count; i++)
{
if(i < tags.Count && newtags[i] != tags[i])
tags[i] = int.MinValue;
else if(i >= tags.Count)
tags.Add(int.MinValue);
}
}
#endregion
#region ================== Apply
public void ApplyTo(Linedef mo, int offset)
{
int[] oldtags = new int[mo.Tags.Count];
mo.Tags.CopyTo(oldtags);
mo.Tags.Clear();
mo.Tags.AddRange(GetResultTags(oldtags, offset));
}
public void ApplyTo(Sector mo, int offset)
{
int[] oldtags = new int[mo.Tags.Count];
mo.Tags.CopyTo(oldtags);
mo.Tags.Clear();
mo.Tags.AddRange(GetResultTags(oldtags, offset));
}
private IEnumerable<int> GetResultTags(int[] oldtags, int offset)
{
Dictionary<int, bool> newtags = new Dictionary<int, bool>();
for(int i = 0; i < tags.Count; i++)
{
if(tags[i] == int.MinValue && oldtags.Length > i)
{
if(!newtags.ContainsKey(oldtags[i])) newtags.Add(oldtags[i], false);
}
else if(tags[i] != 0 && tags[i] != int.MinValue)
{
int tag;
if(rangemodes[i] != 0)
tag = tags[i] + offset * rangemodes[i];
else if(offsetmodes[i] != 0 && oldtags.Length > i)
tag = oldtags[i] + tags[i] * offsetmodes[i];
else
tag = tags[i];
if(!newtags.ContainsKey(tag)) newtags.Add(tag, false);
}
}
if(newtags.Count == 0) newtags.Add(0, false);
return newtags.Keys;
}
#endregion
#region ================== Methods
private void UpdateTagsList()
{
string[] displaytags = new string[tags.Count];
int displaytagslen = 0;
tagslist.Links.Clear();
// Gather tags into a single string collection
for(int i = 0; i < tags.Count; i++)
{
displaytags[i] = (tags[i] == int.MinValue ? "???" : tags[i].ToString());
// Add modify mode markers
if(offsetmodes[i] == -1) displaytags[i] = "--" + displaytags[i];
else if(offsetmodes[i] == 1) displaytags[i] = "++" + displaytags[i];
else if(rangemodes[i] == -1) displaytags[i] = "<=" + displaytags[i];
else if(rangemodes[i] == 1) displaytags[i] = ">=" + displaytags[i];
// Add selection indictor
if(curtagindex == i) displaytags[i] = "[" + displaytags[i] + "]";
else displaytags[i] = " " + displaytags[i] + " ";
int start = displaytagslen + i * TAGS_SEPARATOR.Length;
tagslist.Links.Add(new LinkLabel.Link(start, displaytags[i].Length, new TagLinkData { Index = i, Tag = tags[i] }));
displaytagslen += displaytags[i].Length;
}
// Create label text
tagslist.Text = string.Join(TAGS_SEPARATOR, displaytags);
// Update current tag label
curtaglabel.Text = "Tag " + (curtagindex + 1) + ":";
}
private void UpdateTagPicker(int tag)
{
blockupdate = true;
tagpicker.SelectedIndex = -1;
if(tag == int.MinValue)
{
tagpicker.Text = string.Empty;
}
else if(rangemodes[curtagindex] != 0 && tag != 0)
{
tagpicker.Text = (rangemodes[curtagindex] == 1 ? ">=" : "<=") + tag;
}
else if(offsetmodes[curtagindex] != 0 && tag != 0)
{
tagpicker.Text = (offsetmodes[curtagindex] == 1 ? "++" : "--") + tag;
}
else
{
foreach(var item in tagpicker.Items)
if(((TagInfo)item).Tag == tag) tagpicker.SelectedItem = item;
if(tagpicker.SelectedIndex == -1) tagpicker.Text = tag.ToString();
}
blockupdate = false;
}
#endregion
#region ================== Events
private void newtag_Click(object sender, EventArgs e)
{
tagpicker.SelectedIndex = -1;
tagpicker.Text = General.Map.Map.GetNewTag().ToString();
}
private void unusedtag_Click(object sender, EventArgs e)
{
tagpicker.SelectedIndex = -1;
tagpicker.Text = General.Map.Map.GetNewTag(elementtype).ToString();
}
private void clear_Click(object sender, EventArgs e)
{
tagpicker.SelectedIndex = -1;
tagpicker.Text = "0";
}
private void addtag_Click(object sender, EventArgs e)
{
int nt = General.Map.Map.GetNewTag(tags);
tags.Add(nt);
rangemodes.Add(0);
offsetmodes.Add(0);
curtagindex = tags.Count - 1;
// Update controls
blockupdate = true;
tagpicker.Text = nt.ToString();
blockupdate = false;
removetag.Enabled = true;
UpdateTagsList();
}
private void removetag_Click(object sender, EventArgs e)
{
tags.RemoveAt(curtagindex);
rangemodes.RemoveAt(curtagindex);
offsetmodes.RemoveAt(curtagindex);
if(curtagindex >= tags.Count) curtagindex = tags.Count - 1;
// Update controls
UpdateTagPicker(tags[curtagindex]);
removetag.Enabled = (tags.Count > 1);
UpdateTagsList();
}
private void clearalltags_Click(object sender, EventArgs e)
{
curtagindex = 0;
// Clear collections
tags.Clear();
tags.Add(0);
rangemodes.Clear();
rangemodes.Add(0);
offsetmodes.Clear();
offsetmodes.Add(0);
// Update controls
blockupdate = true;
tagpicker.Text = "0";
blockupdate = false;
removetag.Enabled = false;
UpdateTagsList();
}
private void tagslist_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
TagLinkData data = (TagLinkData)e.Link.LinkData;
curtagindex = data.Index;
curtaglabel.Text = "Tag " + (curtagindex + 1) + ":";
// Update interface
UpdateTagPicker(data.Tag);
UpdateTagsList();
}
private void tagpicker_TextChanged(object sender, EventArgs e)
{
if(blockupdate) return;
if(tagpicker.SelectedItem != null)
{
TagInfo info = (TagInfo)tagpicker.SelectedItem;
tags[curtagindex] = info.Tag;
UpdateTagsList();
return;
}
string text = tagpicker.Text.Trim();
if(string.IsNullOrEmpty(text))
{
tags[curtagindex] = int.MinValue;
UpdateTagsList();
return;
}
//incremental?
int rangemode = 0;
int offsetmode = 0;
if(text.Length > 2)
{
if(text.StartsWith(">=")) //range up
{
rangemode = 1;
text = text.Substring(2, text.Length - 2);
}
else if(text.StartsWith("<=")) //range down
{
rangemode = -1;
text = text.Substring(2, text.Length - 2);
}
else if(text.StartsWith("++")) //relative up
{
offsetmode = 1;
text = text.Substring(2, text.Length - 2);
}
else if(text.StartsWith("--")) //relative down
{
offsetmode = -1;
text = text.Substring(2, text.Length - 2);
}
}
int tag;
if(int.TryParse(text, out tag))
{
// Validate entered tag
if((tag < General.Map.FormatInterface.MinTag) || (tag > General.Map.FormatInterface.MaxTag))
{
General.ShowWarningMessage("Sector tag must be between " + General.Map.FormatInterface.MinTag + " and " + General.Map.FormatInterface.MaxTag + ".", MessageBoxButtons.OK);
return;
}
tags[curtagindex] = tag;
rangemodes[curtagindex] = rangemode;
offsetmodes[curtagindex] = offsetmode;
UpdateTagsList();
}
}
#endregion
}
}

View file

@ -0,0 +1,129 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="tooltip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<metadata name="tooltip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<metadata name="tooltip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
</root>

View file

@ -110,11 +110,16 @@ namespace CodeImp.DoomBuilder.IO
for (int i = 0; i < count; i++)
{
int tag = reader.ReadInt32();
int effect = reader.ReadInt32();
int hfloor = reader.ReadInt32();
int hceil = reader.ReadInt32();
int bright = reader.ReadInt32();
//mxd. Tags
int numtags = reader.ReadInt32(); //mxd
List<int> tags = new List<int>(numtags); //mxd
for(int a = 0; a < numtags; a++) tags.Add(reader.ReadInt32()); //mxd
string tfloor = ReadString(reader);
string tceil = ReadString(reader);
@ -141,7 +146,7 @@ namespace CodeImp.DoomBuilder.IO
Sector s = map.CreateSector();
if(s != null)
{
s.Update(hfloor, hceil, tfloor, tceil, effect, stringflags, tag, bright, foffset, fslope, coffset, cslope);
s.Update(hfloor, hceil, tfloor, tceil, effect, stringflags, tags, bright, foffset, fslope, coffset, cslope);
// Add custom fields
s.Fields.BeforeFieldsChange();
@ -169,13 +174,15 @@ namespace CodeImp.DoomBuilder.IO
for(int i = 0; i < count; i++)
{
int[] args = new int[Linedef.NUM_ARGS];
int tag = reader.ReadInt32();
int v1 = reader.ReadInt32();
int v2 = reader.ReadInt32();
int s1 = reader.ReadInt32();
int s2 = reader.ReadInt32();
int special = reader.ReadInt32();
for(int a = 0; a < Linedef.NUM_ARGS; a++) args[a] = reader.ReadInt32();
int numtags = reader.ReadInt32(); //mxd
List<int> tags = new List<int>(numtags); //mxd
for(int a = 0; a < numtags; a++) tags.Add(reader.ReadInt32()); //mxd
//flags
Dictionary<string, bool> stringflags = new Dictionary<string, bool>(StringComparer.Ordinal);
@ -206,7 +213,7 @@ namespace CodeImp.DoomBuilder.IO
Linedef l = map.CreateLinedef(vertexlink[v1], vertexlink[v2]);
if (l != null)
{
l.Update(stringflags, 0, tag, special, args);
l.Update(stringflags, 0, tags, special, args);
l.UpdateCache();
// Add custom fields

View file

@ -139,7 +139,6 @@ namespace CodeImp.DoomBuilder.IO
foreach(Linedef l in linedefs)
{
//write "static" properties
writer.Write(l.Tag);
writer.Write(vertexids[l.Start]);
writer.Write(vertexids[l.End]);
@ -151,6 +150,10 @@ namespace CodeImp.DoomBuilder.IO
writer.Write(l.Action);
for(int i = 0; i < l.Args.Length; i++) writer.Write(l.Args[i]);
//mxd. Tags
writer.Write(l.Tags.Count);
for(int i = 0; i < l.Tags.Count; i++) writer.Write(l.Tags[i]);
AddFlags(l.Flags, writer);
AddCustomFields(l.Fields, "linedef", writer);
}
@ -191,12 +194,15 @@ namespace CodeImp.DoomBuilder.IO
foreach(Sector s in sectors)
{
//write "static" properties
writer.Write(s.Tag);
writer.Write(s.Effect);
writer.Write(s.FloorHeight);
writer.Write(s.CeilHeight);
writer.Write(s.Brightness);
//mxd. Tags
writer.Write(s.Tags.Count);
for(int i = 0; i < s.Tags.Count; i++) writer.Write(s.Tags[i]);
//textures
writer.Write(s.FloorTexture.Length);
writer.Write(s.FloorTexture.ToCharArray());

View file

@ -283,7 +283,7 @@ namespace CodeImp.DoomBuilder.IO
if(Vector2D.ManhattanDistance(vertexlink[v1].Position, vertexlink[v2].Position) > 0.0001f)
{
Linedef l = map.CreateLinedef(vertexlink[v1], vertexlink[v2]);
l.Update(stringflags, 0, tag, action, new int[Linedef.NUM_ARGS]);
l.Update(stringflags, 0, new List<int> { tag }, action, new int[Linedef.NUM_ARGS]);
l.UpdateCache();
string thigh, tmid, tlow;

View file

@ -299,7 +299,7 @@ namespace CodeImp.DoomBuilder.IO
if(Vector2D.ManhattanDistance(vertexlink[v1].Position, vertexlink[v2].Position) > 0.0001f)
{
Linedef l = map.CreateLinedef(vertexlink[v1], vertexlink[v2]);
l.Update(stringflags, (flags & manager.Config.LinedefActivationsFilter), 0, action, args);
l.Update(stringflags, (flags & manager.Config.LinedefActivationsFilter), new List<int> { 0 }, action, args);
l.UpdateCache();
Sidedef s;

View file

@ -246,6 +246,7 @@ namespace CodeImp.DoomBuilder.IO
// Go for all lines
map.SetCapacity(0, map.Linedefs.Count + linescolls.Count, map.Sidedefs.Count + sidescolls.Count, 0, 0);
char[] splitter = new[] { ',' }; //mxd
for(int i = 0; i < linescolls.Count; i++)
{
// Read fields
@ -270,6 +271,22 @@ namespace CodeImp.DoomBuilder.IO
int s1 = GetCollectionEntry(lc, "sidefront", true, -1, where);
int s2 = GetCollectionEntry(lc, "sideback", false, -1, where);
//mxd. MoreIDs
List<int> tags = new List<int> { tag };
string moreids = GetCollectionEntry(lc, "moreids", false, string.Empty, where);
if(!string.IsNullOrEmpty(moreids))
{
string[] moreidscol = moreids.Split(splitter, StringSplitOptions.RemoveEmptyEntries);
int id;
foreach (string sid in moreidscol)
{
if(int.TryParse(sid.Trim(), out id) && id != 0 && !tags.Contains(id))
{
tags.Add(id);
}
}
}
// Flags
Dictionary<string, bool> stringflags = new Dictionary<string, bool>(StringComparer.Ordinal);
foreach(KeyValuePair<string, string> flag in General.Map.Config.LinedefFlags)
@ -291,7 +308,7 @@ namespace CodeImp.DoomBuilder.IO
Linedef l = map.CreateLinedef(vertexlink[v1], vertexlink[v2]);
if(l != null)
{
l.Update(stringflags, 0, tag, special, args);
l.Update(stringflags, 0, tags, special, args);
l.UpdateCache();
// Custom fields
@ -369,6 +386,7 @@ namespace CodeImp.DoomBuilder.IO
// Go for all collections
map.SetCapacity(0, 0, 0, map.Sectors.Count + collections.Count, 0);
char[] splitter = new[] { ',' }; //mxd
for(int i = 0; i < collections.Count; i++)
{
// Read fields
@ -382,6 +400,22 @@ namespace CodeImp.DoomBuilder.IO
int special = GetCollectionEntry(c, "special", false, 0, where);
int tag = GetCollectionEntry(c, "id", false, 0, where);
//mxd. MoreIDs
List<int> tags = new List<int> { tag };
string moreids = GetCollectionEntry(c, "moreids", false, string.Empty, where);
if(!string.IsNullOrEmpty(moreids))
{
string[] moreidscol = moreids.Split(splitter, StringSplitOptions.RemoveEmptyEntries);
int id;
foreach(string sid in moreidscol)
{
if(int.TryParse(sid.Trim(), out id) && id != 0 && !tags.Contains(id))
{
tags.Add(id);
}
}
}
//mxd. Read slopes
float fslopex = GetCollectionEntry(c, "floorplane_a", false, 0.0f, where);
float fslopey = GetCollectionEntry(c, "floorplane_b", false, 0.0f, where);
@ -402,7 +436,7 @@ namespace CodeImp.DoomBuilder.IO
Sector s = map.CreateSector();
if(s != null)
{
s.Update(hfloor, hceil, tfloor, tceil, special, stringflags, tag, bright, foffset, new Vector3D(fslopex, fslopey, fslopez).GetNormal(), coffset, new Vector3D(cslopex, cslopey, cslopez).GetNormal());
s.Update(hfloor, hceil, tfloor, tceil, special, stringflags, tags, bright, foffset, new Vector3D(fslopex, fslopey, fslopez).GetNormal(), coffset, new Vector3D(cslopex, cslopey, cslopez).GetNormal());
// Custom fields
ReadCustomFields(c, s, "sector");

View file

@ -193,6 +193,17 @@ namespace CodeImp.DoomBuilder.IO
coll.Add("v1", vertexids[l.Start]);
coll.Add("v2", vertexids[l.End]);
coll.Comment = l.Index.ToString();
//mxd. MoreIDs
if(l.Tags.Count > 1) //first entry is saved as "id"
{
string[] moreidscol = new string[l.Tags.Count - 1];
for(int i = 1; i < l.Tags.Count; i++)
{
moreidscol[i - 1] = l.Tags[i].ToString();
}
coll.Add("moreids", string.Join(",", moreidscol));
}
// Sidedef references
if((l.Front != null) && sidedefids.ContainsKey(l.Front))
@ -270,6 +281,17 @@ namespace CodeImp.DoomBuilder.IO
if(s.Tag != 0) coll.Add("id", s.Tag);
coll.Comment = s.Index.ToString();
//mxd. MoreIDs
if(s.Tags.Count > 1) //first entry is saved as "id"
{
string[] moreidscol = new string[s.Tags.Count - 1];
for(int i = 1; i < s.Tags.Count; i++)
{
moreidscol[i - 1] = s.Tags[i].ToString();
}
coll.Add("moreids", string.Join(",", moreidscol));
}
//mxd. Slopes
if (s.FloorSlope.GetLengthSq() > 0)
{

View file

@ -70,7 +70,7 @@ namespace CodeImp.DoomBuilder.Map
private Dictionary<string, bool> flags;
private int action;
private int activate;
private int tag;
private List<int> tags; //mxd
private int[] args;
private bool frontinterior; // for drawing only
private int colorPresetIndex;//mxd
@ -92,7 +92,8 @@ namespace CodeImp.DoomBuilder.Map
public int Action { get { return action; } set { BeforePropsChange(); action = value; UpdateColorPreset(); } }
public int Activate { get { return activate; } set { BeforePropsChange(); activate = value; UpdateColorPreset(); } }
public int Tag { get { return tag; } set { BeforePropsChange(); tag = value; if((tag < General.Map.FormatInterface.MinTag) || (tag > General.Map.FormatInterface.MaxTag)) throw new ArgumentOutOfRangeException("Tag", "Invalid tag number"); } }
public int Tag { get { return tags[0]; } set { BeforePropsChange(); tags[0] = value; if((value < General.Map.FormatInterface.MinTag) || (value > General.Map.FormatInterface.MaxTag)) throw new ArgumentOutOfRangeException("Tag", "Invalid tag number"); } } //mxd
public List<int> Tags { get { return tags; } } //mxd
public float LengthSq { get { return lengthsq; } }
public float Length { get { return length; } }
public float LengthInv { get { return lengthinv; } }
@ -118,6 +119,7 @@ namespace CodeImp.DoomBuilder.Map
this.listindex = listindex;
this.updateneeded = true;
this.args = new int[NUM_ARGS];
this.tags = new List<int> { 0 }; //mxd
this.flags = new Dictionary<string, bool>(StringComparer.Ordinal);
this.colorPresetIndex = -1;//mxd
@ -220,7 +222,24 @@ namespace CodeImp.DoomBuilder.Map
s.rwInt(ref action);
s.rwInt(ref activate);
s.rwInt(ref tag);
//mxd
if(s.IsWriting)
{
s.wInt(tags.Count);
foreach (int tag in tags) s.wInt(tag);
}
else
{
int c; s.rInt(out c);
tags = new List<int>(c);
for(int i = 0; i < c; i++)
{
int t; s.rInt(out t);
tags.Add(t);
}
}
for(int i = 0; i < NUM_ARGS; i++) s.rwInt(ref args[i]);
//mxd
@ -283,7 +302,7 @@ namespace CodeImp.DoomBuilder.Map
l.action = action;
l.args = (int[])args.Clone();
l.flags = new Dictionary<string, bool>(flags);
l.tag = tag;
l.tags = new List<int>(tags); //mxd
l.updateneeded = true;
l.activate = activate;
l.impassableflag = impassableflag;
@ -438,7 +457,7 @@ namespace CodeImp.DoomBuilder.Map
{
case 121: //Line_SetIdentification
//Convert arg0 to tag
tag = args[0] + args[4] * 256;
tags[0] = args[0] + args[4] * 256;
//Convert arg1 to flags
ConvertArgToFlags(1);
@ -450,7 +469,7 @@ namespace CodeImp.DoomBuilder.Map
case 208: //TranslucentLine
//Convert arg0 to tag
tag = args[0];
tags[0] = args[0];
//Convert arg3 to flags
ConvertArgToFlags(3);
@ -466,7 +485,7 @@ namespace CodeImp.DoomBuilder.Map
// Convert to UDMF
if ((args[1] & 8) == 8) // arg4 is LineID?
{
tag = args[4];
tags[0] = args[4];
args[1] &= ~8; // Unset flag
}
else // It's sector's HiTag then
@ -569,13 +588,13 @@ namespace CodeImp.DoomBuilder.Map
{
case 208: //TranslucentLine
//Convert tag to arg0
if(tag < General.Map.FormatInterface.MinArgument || tag > General.Map.FormatInterface.MaxArgument)
if(tags[0] < General.Map.FormatInterface.MinArgument || tags[0] > General.Map.FormatInterface.MaxArgument)
{
General.ErrorLogger.Add(ErrorType.Warning, "Linedef " + Index + ": unable to convert Tag (" + tag + ") to LineID because it's outside of supported argument range [" + General.Map.FormatInterface.MinArgument + ".." + General.Map.FormatInterface.MaxArgument + "].");
General.ErrorLogger.Add(ErrorType.Warning, "Linedef " + Index + ": unable to convert Tag (" + tags[0] + ") to LineID because it's outside of supported argument range [" + General.Map.FormatInterface.MinArgument + ".." + General.Map.FormatInterface.MaxArgument + "].");
}
else
{
args[0] = tag;
args[0] = tags[0];
}
//Convert flags to arg3
@ -597,40 +616,40 @@ namespace CodeImp.DoomBuilder.Map
args[0] = lotag;
args[4] = hitag;
if (tag != 0)
if(tags[0] != 0)
{
General.ErrorLogger.Add(ErrorType.Warning, "Linedef " + Index + ": unable to convert Tag (" + tag + ") to LineID, because target sector tag (arg0) is greater than " + General.Map.FormatInterface.MaxArgument + ".");
General.ErrorLogger.Add(ErrorType.Warning, "Linedef " + Index + ": unable to convert Tag (" + tags[0] + ") to LineID, because target sector tag (arg0) is greater than " + General.Map.FormatInterface.MaxArgument + ".");
}
}
else if(args[0] < General.Map.FormatInterface.MinArgument)
{
General.ErrorLogger.Add(ErrorType.Warning, "Linedef " + Index + ": unable to convert arg0 (" + args[0] + "), because it's outside of supported argument range [" + General.Map.FormatInterface.MinArgument + ".." + General.Map.FormatInterface.MaxArgument + "].");
}
else if(tag > General.Map.FormatInterface.MinArgument) // Convert to LineID?
else if(tags[0] > General.Map.FormatInterface.MinArgument) // Convert to LineID?
{
if(tag > General.Map.FormatInterface.MaxArgument)
if(tags[0] > General.Map.FormatInterface.MaxArgument)
{
General.ErrorLogger.Add(ErrorType.Warning, "Linedef " + Index + ": unable to convert Tag (" + tag + ") to LineID, because linedef tag is greater than " + General.Map.FormatInterface.MaxArgument + ".");
General.ErrorLogger.Add(ErrorType.Warning, "Linedef " + Index + ": unable to convert Tag (" + tags[0] + ") to LineID, because linedef tag is greater than " + General.Map.FormatInterface.MaxArgument + ".");
}
else
{
args[4] = tag;
args[4] = tags[0];
args[1] |= 8; // Add "Use arg4 as LineID" flag
}
}
break;
default: // Convert tag to Line_SetIdentification?
if(tag > General.Map.FormatInterface.MinArgument)
if(tags[0] > General.Map.FormatInterface.MinArgument)
{
if (action != 0)
{
General.ErrorLogger.Add(ErrorType.Warning, "Linedef " + Index + ": unable to convert Tag (" + tag + ") to LineID, because linedef already has an action.");
General.ErrorLogger.Add(ErrorType.Warning, "Linedef " + Index + ": unable to convert Tag (" + tags[0] + ") to LineID, because linedef already has an action.");
}
else // Convert to Line_SetIdentification
{
int hiid = tag / 256;
int loid = tag - hiid;
int hiid = tags[0] / 256;
int loid = tags[0] - hiid;
action = 121;
args[0] = loid;
@ -638,15 +657,15 @@ namespace CodeImp.DoomBuilder.Map
ConvertFlagsToArg(oldfields, 1);
}
}
else if(tag < General.Map.FormatInterface.MinArgument)
else if(tags[0] < General.Map.FormatInterface.MinArgument)
{
General.ErrorLogger.Add(ErrorType.Warning, "Linedef " + Index + ": unable to convert Tag (" + tag + ") to LineID, because it's outside of supported argument range [" + General.Map.FormatInterface.MinArgument + ".." + General.Map.FormatInterface.MaxArgument + "].");
General.ErrorLogger.Add(ErrorType.Warning, "Linedef " + Index + ": unable to convert Tag (" + tags[0] + ") to LineID, because it's outside of supported argument range [" + General.Map.FormatInterface.MinArgument + ".." + General.Map.FormatInterface.MaxArgument + "].");
}
break;
}
// Clear tag
tag = 0;
tags[0] = 0;
}
//mxd. Update cached flags
@ -660,7 +679,7 @@ namespace CodeImp.DoomBuilder.Map
private void ConvertArgToTag(int argnum, bool cleararg)
{
// Convert arg to tag
tag = args[argnum];
tags[0] = args[argnum];
// Clear obsolete arg
if(cleararg) args[argnum] = 0;
@ -669,13 +688,13 @@ namespace CodeImp.DoomBuilder.Map
//mxd
private void ConvertTagToArg(int argnum)
{
if(tag < General.Map.FormatInterface.MinArgument || tag > General.Map.FormatInterface.MaxArgument)
if(tags[0] < General.Map.FormatInterface.MinArgument || tags[0] > General.Map.FormatInterface.MaxArgument)
{
General.ErrorLogger.Add(ErrorType.Warning, "Linedef " + Index + ": unable to convert Tag (" + tag + ") to LineID because it's outside of supported argument range [" + General.Map.FormatInterface.MinArgument + ".." + General.Map.FormatInterface.MaxArgument + "].");
General.ErrorLogger.Add(ErrorType.Warning, "Linedef " + Index + ": unable to convert Tag (" + tags[0] + ") to LineID because it's outside of supported argument range [" + General.Map.FormatInterface.MinArgument + ".." + General.Map.FormatInterface.MaxArgument + "].");
}
else
{
args[argnum] = tag;
args[argnum] = tags[0];
}
}
@ -1275,13 +1294,13 @@ namespace CodeImp.DoomBuilder.Map
#region ================== Changes
// This updates all properties
public void Update(Dictionary<string, bool> flags, int activate, int tag, int action, int[] args)
public void Update(Dictionary<string, bool> flags, int activate, List<int> tags, int action, int[] args)
{
BeforePropsChange();
// Apply changes
this.flags = new Dictionary<string, bool>(flags);
this.tag = tag;
this.tags = new List<int>(tags); //mxd
this.activate = activate;
this.action = action;
this.args = new int[NUM_ARGS];

View file

@ -2801,6 +2801,23 @@ namespace CodeImp.DoomBuilder.Map
return 0;
}
//mxd
/// <summary>This returns the next unused tag number.</summary>
public int GetNewTag(List<int> moreusedtags)
{
Dictionary<int, bool> usedtags = new Dictionary<int, bool>();
foreach(int t in moreusedtags) if(!usedtags.ContainsKey(t)) usedtags.Add(t, true);
ForAllTags(NewTagHandler, false, usedtags);
ForAllTags(NewTagHandler, true, usedtags);
// Now find the first unused index
for(int i = 1; i <= General.Map.FormatInterface.MaxTag; i++)
if(!usedtags.ContainsKey(i)) return i;
// All tags used!
return 0;
}
//mxd
/// <summary>This returns the tag number, which is not used by any map element of given type. This method doesn't check action arguments!</summary>
public int GetNewTag(UniversalType elementType)

View file

@ -57,7 +57,7 @@ namespace CodeImp.DoomBuilder.Map
private long longfloortexname;
private long longceiltexname;
private int effect;
private int tag;
private List<int> tags; //mxd
private int brightness;
//mxd. UDMF properties
@ -106,7 +106,8 @@ namespace CodeImp.DoomBuilder.Map
public long LongCeilTexture { get { return longceiltexname; } }
internal Dictionary<string, bool> Flags { get { return flags; } } //mxd
public int Effect { get { return effect; } set { BeforePropsChange(); effect = value; } }
public int Tag { get { return tag; } set { BeforePropsChange(); tag = value; if((tag < General.Map.FormatInterface.MinTag) || (tag > General.Map.FormatInterface.MaxTag)) throw new ArgumentOutOfRangeException("Tag", "Invalid tag number"); } }
public int Tag { get { return tags[0]; } set { BeforePropsChange(); tags[0] = value; if((value < General.Map.FormatInterface.MinTag) || (value > General.Map.FormatInterface.MaxTag)) throw new ArgumentOutOfRangeException("Tag", "Invalid tag number"); } } //mxd
public List<int> Tags { get { return tags; } } //mxd
public int Brightness { get { return brightness; } set { BeforePropsChange(); brightness = value; updateneeded = true; } }
public bool UpdateNeeded { get { return updateneeded; } set { updateneeded |= value; triangulationneeded |= value; } }
public RectangleF BBox { get { return bbox; } }
@ -144,6 +145,7 @@ namespace CodeImp.DoomBuilder.Map
this.longfloortexname = MapSet.EmptyLongName;
this.longceiltexname = MapSet.EmptyLongName;
this.flags = new Dictionary<string, bool>(StringComparer.Ordinal); //mxd
this.tags = new List<int> { 0 }; //mxd
this.updateneeded = true;
this.triangulationneeded = true;
this.surfaceentries = new SurfaceEntryCollection();
@ -246,9 +248,27 @@ namespace CodeImp.DoomBuilder.Map
s.rwLong(ref longfloortexname);
s.rwLong(ref longceiltexname);
s.rwInt(ref effect);
s.rwInt(ref tag);
s.rwInt(ref brightness);
//mxd. (Re)store tags
if(s.IsWriting)
{
s.wInt(tags.Count);
foreach(int tag in tags) s.wInt(tag);
}
else
{
int c;
s.rInt(out c);
tags = new List<int>(c);
for(int i = 0; i < c; i++)
{
int t;
s.rInt(out t);
tags.Add(t);
}
}
//mxd. Slopes
s.rwFloat(ref flooroffset);
s.rwVector3D(ref floorslope);
@ -277,7 +297,7 @@ namespace CodeImp.DoomBuilder.Map
s.floortexname = floortexname;
s.longfloortexname = longfloortexname;
s.effect = effect;
s.tag = tag;
s.tags = new List<int>(tags); //mxd
s.flags = new Dictionary<string, bool>(flags); //mxd
s.brightness = brightness;
s.flooroffset = flooroffset; //mxd
@ -769,11 +789,11 @@ namespace CodeImp.DoomBuilder.Map
//mxd. This updates all properties (Doom/Hexen version)
public void Update(int hfloor, int hceil, string tfloor, string tceil, int effect, int tag, int brightness)
{
Update(hfloor, hceil, tfloor, tceil, effect, new Dictionary<string, bool>(StringComparer.Ordinal), tag, brightness, 0, new Vector3D(), 0, new Vector3D());
Update(hfloor, hceil, tfloor, tceil, effect, new Dictionary<string, bool>(StringComparer.Ordinal), new List<int> { tag }, brightness, 0, new Vector3D(), 0, new Vector3D());
}
//mxd. This updates all properties (UDMF version)
public void Update(int hfloor, int hceil, string tfloor, string tceil, int effect, Dictionary<string, bool> flags, int tag, int brightness, float flooroffset, Vector3D floorslope, float ceiloffset, Vector3D ceilslope)
public void Update(int hfloor, int hceil, string tfloor, string tceil, int effect, Dictionary<string, bool> flags, List<int> tags, int brightness, float flooroffset, Vector3D floorslope, float ceiloffset, Vector3D ceilslope)
{
BeforePropsChange();
@ -783,7 +803,7 @@ namespace CodeImp.DoomBuilder.Map
//SetFloorTexture(tfloor);
//SetCeilTexture(tceil);
this.effect = effect;
this.tag = tag;
this.tags = new List<int>(tags); //mxd
this.flags = new Dictionary<string, bool>(flags); //mxd
this.brightness = brightness;
this.flooroffset = flooroffset; //mxd

View file

@ -17,6 +17,7 @@ managedfields
linedef
{
id;
moreids;
v1;
v2;
special;
@ -48,6 +49,7 @@ managedfields
lightlevel;
special;
id;
moreids;
floorplane_a;
floorplane_b;
floorplane_c;

View file

@ -40,6 +40,7 @@ namespace CodeImp.DoomBuilder.Windows
this.cancel = new System.Windows.Forms.Button();
this.apply = new System.Windows.Forms.Button();
this.actiongroup = new System.Windows.Forms.GroupBox();
this.argscontrol = new CodeImp.DoomBuilder.Controls.ArgumentsControl();
this.actionhelp = new CodeImp.DoomBuilder.Controls.ActionSpecialHelpButton();
this.action = new CodeImp.DoomBuilder.Controls.ActionSelectorControl();
this.browseaction = new System.Windows.Forms.Button();
@ -55,7 +56,6 @@ namespace CodeImp.DoomBuilder.Windows
this.activationGroup = new System.Windows.Forms.GroupBox();
this.missingactivation = new System.Windows.Forms.PictureBox();
this.idgroup = new System.Windows.Forms.GroupBox();
this.tagSelector = new CodeImp.DoomBuilder.GZBuilder.Controls.TagSelector();
this.tabfront = new System.Windows.Forms.TabPage();
this.frontside = new System.Windows.Forms.CheckBox();
this.frontgroup = new System.Windows.Forms.GroupBox();
@ -121,7 +121,7 @@ namespace CodeImp.DoomBuilder.Windows
this.fieldslist = new CodeImp.DoomBuilder.Controls.FieldsEditorControl();
this.imagelist = new System.Windows.Forms.ImageList(this.components);
this.tooltip = new System.Windows.Forms.ToolTip(this.components);
this.argscontrol = new CodeImp.DoomBuilder.Controls.ArgumentsControl();
this.tagsselector = new CodeImp.DoomBuilder.GZBuilder.Controls.TagsSelector();
label2 = new System.Windows.Forms.Label();
label11 = new System.Windows.Forms.Label();
label12 = new System.Windows.Forms.Label();
@ -153,7 +153,7 @@ namespace CodeImp.DoomBuilder.Windows
// label2
//
label2.AutoSize = true;
label2.Location = new System.Drawing.Point(15, 30);
label2.Location = new System.Drawing.Point(15, 22);
label2.Name = "label2";
label2.Size = new System.Drawing.Size(40, 13);
label2.TabIndex = 9;
@ -180,7 +180,7 @@ namespace CodeImp.DoomBuilder.Windows
// label6
//
label6.AutoSize = true;
label6.Location = new System.Drawing.Point(199, 24);
label6.Location = new System.Drawing.Point(199, 21);
label6.Name = "label6";
label6.Size = new System.Drawing.Size(37, 13);
label6.TabIndex = 17;
@ -189,7 +189,7 @@ namespace CodeImp.DoomBuilder.Windows
// labelrenderstyle
//
this.labelrenderstyle.AutoSize = true;
this.labelrenderstyle.Location = new System.Drawing.Point(15, 24);
this.labelrenderstyle.Location = new System.Drawing.Point(15, 21);
this.labelrenderstyle.Name = "labelrenderstyle";
this.labelrenderstyle.Size = new System.Drawing.Size(69, 13);
this.labelrenderstyle.TabIndex = 11;
@ -198,7 +198,7 @@ namespace CodeImp.DoomBuilder.Windows
// labellockpick
//
this.labellockpick.AutoSize = true;
this.labellockpick.Location = new System.Drawing.Point(330, 24);
this.labellockpick.Location = new System.Drawing.Point(330, 21);
this.labellockpick.Name = "labellockpick";
this.labellockpick.Size = new System.Drawing.Size(72, 13);
this.labellockpick.TabIndex = 15;
@ -246,16 +246,23 @@ namespace CodeImp.DoomBuilder.Windows
this.actiongroup.Controls.Add(label2);
this.actiongroup.Controls.Add(this.action);
this.actiongroup.Controls.Add(this.browseaction);
this.actiongroup.Location = new System.Drawing.Point(8, 253);
this.actiongroup.Location = new System.Drawing.Point(8, 245);
this.actiongroup.Name = "actiongroup";
this.actiongroup.Size = new System.Drawing.Size(533, 142);
this.actiongroup.Size = new System.Drawing.Size(533, 126);
this.actiongroup.TabIndex = 1;
this.actiongroup.TabStop = false;
this.actiongroup.Text = " Action ";
//
// argscontrol
//
this.argscontrol.Location = new System.Drawing.Point(6, 44);
this.argscontrol.Name = "argscontrol";
this.argscontrol.Size = new System.Drawing.Size(521, 80);
this.argscontrol.TabIndex = 11;
//
// actionhelp
//
this.actionhelp.Location = new System.Drawing.Point(497, 25);
this.actionhelp.Location = new System.Drawing.Point(497, 17);
this.actionhelp.Name = "actionhelp";
this.actionhelp.Size = new System.Drawing.Size(28, 25);
this.actionhelp.TabIndex = 10;
@ -267,7 +274,7 @@ namespace CodeImp.DoomBuilder.Windows
this.action.Empty = false;
this.action.GeneralizedCategories = null;
this.action.GeneralizedOptions = null;
this.action.Location = new System.Drawing.Point(62, 27);
this.action.Location = new System.Drawing.Point(62, 19);
this.action.Name = "action";
this.action.Size = new System.Drawing.Size(402, 21);
this.action.TabIndex = 0;
@ -277,7 +284,7 @@ namespace CodeImp.DoomBuilder.Windows
// browseaction
//
this.browseaction.Image = global::CodeImp.DoomBuilder.Properties.Resources.List;
this.browseaction.Location = new System.Drawing.Point(467, 25);
this.browseaction.Location = new System.Drawing.Point(467, 17);
this.browseaction.Name = "browseaction";
this.browseaction.Size = new System.Drawing.Size(28, 25);
this.browseaction.TabIndex = 1;
@ -306,7 +313,7 @@ namespace CodeImp.DoomBuilder.Windows
this.flagsgroup.Controls.Add(this.flags);
this.flagsgroup.Location = new System.Drawing.Point(8, 3);
this.flagsgroup.Name = "flagsgroup";
this.flagsgroup.Size = new System.Drawing.Size(533, 186);
this.flagsgroup.Size = new System.Drawing.Size(533, 184);
this.flagsgroup.TabIndex = 0;
this.flagsgroup.TabStop = false;
this.flagsgroup.Text = " Flags";
@ -318,9 +325,9 @@ namespace CodeImp.DoomBuilder.Windows
| System.Windows.Forms.AnchorStyles.Right)));
this.flags.AutoScroll = true;
this.flags.Columns = 3;
this.flags.Location = new System.Drawing.Point(18, 17);
this.flags.Location = new System.Drawing.Point(18, 15);
this.flags.Name = "flags";
this.flags.Size = new System.Drawing.Size(509, 164);
this.flags.Size = new System.Drawing.Size(509, 162);
this.flags.TabIndex = 0;
this.flags.VerticalSpacing = 0;
this.flags.OnValueChanged += new System.EventHandler(this.flags_OnValueChanged);
@ -371,9 +378,9 @@ namespace CodeImp.DoomBuilder.Windows
this.groupsettings.Controls.Add(this.labellockpick);
this.groupsettings.Controls.Add(this.renderStyle);
this.groupsettings.Controls.Add(this.labelrenderstyle);
this.groupsettings.Location = new System.Drawing.Point(8, 195);
this.groupsettings.Location = new System.Drawing.Point(8, 193);
this.groupsettings.Name = "groupsettings";
this.groupsettings.Size = new System.Drawing.Size(533, 52);
this.groupsettings.Size = new System.Drawing.Size(533, 46);
this.groupsettings.TabIndex = 3;
this.groupsettings.TabStop = false;
this.groupsettings.Text = " Settings";
@ -381,7 +388,7 @@ namespace CodeImp.DoomBuilder.Windows
// lockpick
//
this.lockpick.FormattingEnabled = true;
this.lockpick.Location = new System.Drawing.Point(408, 20);
this.lockpick.Location = new System.Drawing.Point(408, 17);
this.lockpick.Name = "lockpick";
this.lockpick.Size = new System.Drawing.Size(115, 21);
this.lockpick.TabIndex = 19;
@ -397,7 +404,7 @@ namespace CodeImp.DoomBuilder.Windows
this.alpha.ButtonStepSmall = 0.01F;
this.alpha.ButtonStepsUseModifierKeys = true;
this.alpha.ButtonStepsWrapAround = false;
this.alpha.Location = new System.Drawing.Point(243, 19);
this.alpha.Location = new System.Drawing.Point(243, 16);
this.alpha.Name = "alpha";
this.alpha.Size = new System.Drawing.Size(65, 24);
this.alpha.StepValues = null;
@ -408,7 +415,7 @@ namespace CodeImp.DoomBuilder.Windows
//
this.renderStyle.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.renderStyle.FormattingEnabled = true;
this.renderStyle.Location = new System.Drawing.Point(92, 20);
this.renderStyle.Location = new System.Drawing.Point(92, 17);
this.renderStyle.Name = "renderStyle";
this.renderStyle.Size = new System.Drawing.Size(86, 21);
this.renderStyle.TabIndex = 12;
@ -418,7 +425,7 @@ namespace CodeImp.DoomBuilder.Windows
//
this.activationGroup.Controls.Add(this.missingactivation);
this.activationGroup.Controls.Add(this.udmfactivates);
this.activationGroup.Location = new System.Drawing.Point(8, 401);
this.activationGroup.Location = new System.Drawing.Point(8, 375);
this.activationGroup.Name = "activationGroup";
this.activationGroup.Size = new System.Drawing.Size(533, 152);
this.activationGroup.TabIndex = 1;
@ -429,7 +436,7 @@ namespace CodeImp.DoomBuilder.Windows
//
this.missingactivation.BackColor = System.Drawing.SystemColors.Window;
this.missingactivation.Image = global::CodeImp.DoomBuilder.Properties.Resources.Warning;
this.missingactivation.Location = new System.Drawing.Point(64, -2);
this.missingactivation.Location = new System.Drawing.Point(64, -1);
this.missingactivation.Name = "missingactivation";
this.missingactivation.Size = new System.Drawing.Size(16, 16);
this.missingactivation.TabIndex = 4;
@ -441,21 +448,14 @@ namespace CodeImp.DoomBuilder.Windows
//
this.idgroup.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.idgroup.Controls.Add(this.tagSelector);
this.idgroup.Location = new System.Drawing.Point(8, 559);
this.idgroup.Controls.Add(this.tagsselector);
this.idgroup.Location = new System.Drawing.Point(8, 533);
this.idgroup.Name = "idgroup";
this.idgroup.Size = new System.Drawing.Size(533, 58);
this.idgroup.Size = new System.Drawing.Size(533, 85);
this.idgroup.TabIndex = 2;
this.idgroup.TabStop = false;
this.idgroup.Text = " Identification ";
//
// tagSelector
//
this.tagSelector.Location = new System.Drawing.Point(6, 19);
this.tagSelector.Name = "tagSelector";
this.tagSelector.Size = new System.Drawing.Size(444, 35);
this.tagSelector.TabIndex = 0;
//
// tabfront
//
this.tabfront.Controls.Add(this.frontside);
@ -1339,12 +1339,12 @@ namespace CodeImp.DoomBuilder.Windows
this.imagelist.Images.SetKeyName(0, "Check.png");
this.imagelist.Images.SetKeyName(1, "SearchClear.png");
//
// argscontrol
// tagsselector
//
this.argscontrol.Location = new System.Drawing.Point(6, 56);
this.argscontrol.Name = "argscontrol";
this.argscontrol.Size = new System.Drawing.Size(521, 80);
this.argscontrol.TabIndex = 11;
this.tagsselector.Location = new System.Drawing.Point(6, 21);
this.tagsselector.Name = "tagsselector";
this.tagsselector.Size = new System.Drawing.Size(524, 60);
this.tagsselector.TabIndex = 0;
//
// LinedefEditFormUDMF
//
@ -1429,7 +1429,6 @@ namespace CodeImp.DoomBuilder.Windows
private System.Windows.Forms.Button custombackbutton;
private CodeImp.DoomBuilder.Controls.ButtonsNumericTextbox frontsector;
private CodeImp.DoomBuilder.Controls.ButtonsNumericTextbox backsector;
private CodeImp.DoomBuilder.GZBuilder.Controls.TagSelector tagSelector;
private CodeImp.DoomBuilder.Controls.ButtonsNumericTextbox lightFront;
private System.Windows.Forms.CheckBox cbLightAbsoluteFront;
private CodeImp.DoomBuilder.GZBuilder.Controls.PairedFieldsControl pfcFrontOffsetTop;
@ -1489,5 +1488,6 @@ namespace CodeImp.DoomBuilder.Windows
private System.Windows.Forms.TabPage tabcomment;
private CodeImp.DoomBuilder.Controls.CommentEditor commenteditor;
private CodeImp.DoomBuilder.Controls.ArgumentsControl argscontrol;
private CodeImp.DoomBuilder.GZBuilder.Controls.TagsSelector tagsselector;
}
}

View file

@ -277,14 +277,12 @@ namespace CodeImp.DoomBuilder.Windows
lockpick.SelectedIndex = keynumbers.IndexOf(locknumber);
if(lockpick.SelectedIndex == -1) lockpick.Text = locknumber.ToString();
// Action/tags
// Action
action.Value = fl.Action;
if(General.Map.FormatInterface.HasLinedefTag) //mxd
{
tagSelector.Setup(UniversalType.LinedefTag);
tagSelector.SetTag(fl.Tag);
}
//mxd. Tags
tagsselector.Setup(UniversalType.LinedefTag);
tagsselector.SetValue(fl.Tags, true);
//mxd. Args
argscontrol.SetValue(fl, true);
@ -410,7 +408,7 @@ namespace CodeImp.DoomBuilder.Windows
// Action/tags
if(l.Action != action.Value) action.Empty = true;
if(General.Map.FormatInterface.HasLinedefTag && l.Tag != fl.Tag) tagSelector.ClearTag(); //mxd
tagsselector.SetValue(l.Tags, false);
//mxd. Arguments
argscontrol.SetValue(l, false);
@ -557,6 +555,7 @@ namespace CodeImp.DoomBuilder.Windows
CheckActivationFlagsRequired(); //mxd
argscontrol.UpdateScriptControls(); //mxd
actionhelp.UpdateAction(action.GetValue()); //mxd
tagsselector.FinishSetup(); //mxd
commenteditor.FinishSetup(); //mxd
//mxd. Update some labels
@ -646,17 +645,6 @@ namespace CodeImp.DoomBuilder.Windows
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))
{
@ -698,8 +686,8 @@ namespace CodeImp.DoomBuilder.Windows
}
// Action/tags
l.Tag = General.Clamp(tagSelector.GetSmartTag(l.Tag, tagoffset++), General.Map.FormatInterface.MinTag, General.Map.FormatInterface.MaxTag); //mxd
if(!action.Empty) l.Action = action.Value;
tagsselector.ApplyTo(l, tagoffset++); //mxd
//mxd. Apply args
argscontrol.Apply(l);

View file

@ -117,9 +117,6 @@
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="label2.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="label2.GenerateMember" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</metadata>
@ -149,7 +146,7 @@
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAADM
CAAAAk1TRnQBSQFMAgEBAgEAAbgBAAG4AQABEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo
CAAAAk1TRnQBSQFMAgEBAgEAAcABAAHAAQABEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo
AwABQAMAARADAAEBAQABCAYAAQQYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA
AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5
AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA
@ -189,4 +186,7 @@
BAAB/wKAAQEEAAH/AcECgQQAAf8B4wLDBAAC/wLnBAAE/wQACw==
</value>
</data>
<metadata name="tooltip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
</root>

View file

@ -40,7 +40,6 @@
System.Windows.Forms.Label label15;
System.Windows.Forms.Label label6;
System.Windows.Forms.Label label5;
this.tagSelector = new CodeImp.DoomBuilder.GZBuilder.Controls.TagSelector();
this.soundsequence = new System.Windows.Forms.ComboBox();
this.resetsoundsequence = new System.Windows.Forms.Button();
this.fadeColor = new CodeImp.DoomBuilder.GZBuilder.Controls.ColorFieldsControl();
@ -100,12 +99,13 @@
this.groupBox4 = new System.Windows.Forms.GroupBox();
this.ceilingslopecontrol = new CodeImp.DoomBuilder.Controls.SectorSlopeControl();
this.tabcomment = new System.Windows.Forms.TabPage();
this.commenteditor = new CodeImp.DoomBuilder.Controls.CommentEditor();
this.tabcustom = new System.Windows.Forms.TabPage();
this.fieldslist = new CodeImp.DoomBuilder.Controls.FieldsEditorControl();
this.cancel = new System.Windows.Forms.Button();
this.apply = new System.Windows.Forms.Button();
this.tooltip = new System.Windows.Forms.ToolTip(this.components);
this.commenteditor = new CodeImp.DoomBuilder.Controls.CommentEditor();
this.tagsselector = new CodeImp.DoomBuilder.GZBuilder.Controls.TagsSelector();
groupaction = new System.Windows.Forms.GroupBox();
groupeffect = new System.Windows.Forms.GroupBox();
label14 = new System.Windows.Forms.Label();
@ -137,21 +137,14 @@
//
groupaction.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
groupaction.Controls.Add(this.tagSelector);
groupaction.Location = new System.Drawing.Point(7, 341);
groupaction.Controls.Add(this.tagsselector);
groupaction.Location = new System.Drawing.Point(7, 327);
groupaction.Name = "groupaction";
groupaction.Size = new System.Drawing.Size(490, 71);
groupaction.Size = new System.Drawing.Size(490, 85);
groupaction.TabIndex = 2;
groupaction.TabStop = false;
groupaction.Text = " Identification ";
//
// tagSelector
//
this.tagSelector.Location = new System.Drawing.Point(6, 21);
this.tagSelector.Name = "tagSelector";
this.tagSelector.Size = new System.Drawing.Size(478, 35);
this.tagSelector.TabIndex = 0;
//
// groupeffect
//
groupeffect.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
@ -172,7 +165,7 @@
groupeffect.Controls.Add(label8);
groupeffect.Location = new System.Drawing.Point(7, 160);
groupeffect.Name = "groupeffect";
groupeffect.Size = new System.Drawing.Size(490, 175);
groupeffect.Size = new System.Drawing.Size(490, 161);
groupeffect.TabIndex = 1;
groupeffect.TabStop = false;
groupeffect.Text = " Effects ";
@ -203,7 +196,7 @@
this.fadeColor.DefaultValue = 0;
this.fadeColor.Field = "fadecolor";
this.fadeColor.Label = "Fade:";
this.fadeColor.Location = new System.Drawing.Point(241, 111);
this.fadeColor.Location = new System.Drawing.Point(241, 104);
this.fadeColor.Name = "fadeColor";
this.fadeColor.Size = new System.Drawing.Size(207, 31);
this.fadeColor.TabIndex = 30;
@ -214,7 +207,7 @@
this.lightColor.DefaultValue = 16777215;
this.lightColor.Field = "lightcolor";
this.lightColor.Label = "Light:";
this.lightColor.Location = new System.Drawing.Point(241, 82);
this.lightColor.Location = new System.Drawing.Point(241, 77);
this.lightColor.Name = "lightColor";
this.lightColor.Size = new System.Drawing.Size(207, 29);
this.lightColor.TabIndex = 29;
@ -231,7 +224,7 @@
this.brightness.ButtonStepSmall = 1F;
this.brightness.ButtonStepsUseModifierKeys = true;
this.brightness.ButtonStepsWrapAround = false;
this.brightness.Location = new System.Drawing.Point(125, 84);
this.brightness.Location = new System.Drawing.Point(125, 79);
this.brightness.Name = "brightness";
this.brightness.Size = new System.Drawing.Size(81, 24);
this.brightness.StepValues = null;
@ -249,7 +242,7 @@
this.desaturation.ButtonStepSmall = 0.01F;
this.desaturation.ButtonStepsUseModifierKeys = true;
this.desaturation.ButtonStepsWrapAround = false;
this.desaturation.Location = new System.Drawing.Point(125, 142);
this.desaturation.Location = new System.Drawing.Point(125, 131);
this.desaturation.Name = "desaturation";
this.desaturation.Size = new System.Drawing.Size(81, 24);
this.desaturation.StepValues = null;
@ -267,7 +260,7 @@
// label9
//
label9.AutoSize = true;
label9.Location = new System.Drawing.Point(57, 89);
label9.Location = new System.Drawing.Point(57, 84);
label9.Name = "label9";
label9.Size = new System.Drawing.Size(59, 13);
label9.TabIndex = 2;
@ -275,7 +268,7 @@
//
// label13
//
label13.Location = new System.Drawing.Point(45, 147);
label13.Location = new System.Drawing.Point(45, 136);
label13.Name = "label13";
label13.Size = new System.Drawing.Size(74, 14);
label13.TabIndex = 27;
@ -293,7 +286,7 @@
this.gravity.ButtonStepSmall = 0.01F;
this.gravity.ButtonStepsUseModifierKeys = true;
this.gravity.ButtonStepsWrapAround = false;
this.gravity.Location = new System.Drawing.Point(125, 112);
this.gravity.Location = new System.Drawing.Point(125, 105);
this.gravity.Name = "gravity";
this.gravity.Size = new System.Drawing.Size(81, 24);
this.gravity.StepValues = null;
@ -301,7 +294,7 @@
//
// label2
//
label2.Location = new System.Drawing.Point(45, 117);
label2.Location = new System.Drawing.Point(45, 110);
label2.Name = "label2";
label2.Size = new System.Drawing.Size(74, 14);
label2.TabIndex = 23;
@ -590,7 +583,7 @@
//
// floorAngleControl
//
this.floorAngleControl.Angle = -180;
this.floorAngleControl.Angle = -270;
this.floorAngleControl.AngleOffset = 90;
this.floorAngleControl.Location = new System.Drawing.Point(6, 132);
this.floorAngleControl.Name = "floorAngleControl";
@ -824,7 +817,7 @@
//
// ceilAngleControl
//
this.ceilAngleControl.Angle = -180;
this.ceilAngleControl.Angle = -270;
this.ceilAngleControl.AngleOffset = 90;
this.ceilAngleControl.Location = new System.Drawing.Point(6, 132);
this.ceilAngleControl.Name = "ceilAngleControl";
@ -1065,6 +1058,13 @@
this.tabcomment.Text = "Comment";
this.tabcomment.UseVisualStyleBackColor = true;
//
// commenteditor
//
this.commenteditor.Location = new System.Drawing.Point(3, 3);
this.commenteditor.Name = "commenteditor";
this.commenteditor.Size = new System.Drawing.Size(497, 413);
this.commenteditor.TabIndex = 0;
//
// tabcustom
//
this.tabcustom.Controls.Add(this.fieldslist);
@ -1127,12 +1127,12 @@
this.tooltip.InitialDelay = 10;
this.tooltip.ReshowDelay = 100;
//
// commenteditor
// tagsselector
//
this.commenteditor.Location = new System.Drawing.Point(3, 3);
this.commenteditor.Name = "commenteditor";
this.commenteditor.Size = new System.Drawing.Size(497, 413);
this.commenteditor.TabIndex = 0;
this.tagsselector.Location = new System.Drawing.Point(6, 21);
this.tagsselector.Name = "tagsselector";
this.tagsselector.Size = new System.Drawing.Size(478, 60);
this.tagsselector.TabIndex = 0;
//
// SectorEditFormUDMF
//
@ -1181,7 +1181,6 @@
private System.Windows.Forms.TabControl tabs;
private System.Windows.Forms.TabPage tabproperties;
private CodeImp.DoomBuilder.GZBuilder.Controls.TagSelector tagSelector;
private CodeImp.DoomBuilder.Controls.ButtonsNumericTextbox brightness;
private System.Windows.Forms.Button browseeffect;
private CodeImp.DoomBuilder.Controls.ActionSelectorControl effect;
@ -1245,5 +1244,6 @@
private System.Windows.Forms.ComboBox soundsequence;
private System.Windows.Forms.TabPage tabcomment;
private CodeImp.DoomBuilder.Controls.CommentEditor commenteditor;
private CodeImp.DoomBuilder.GZBuilder.Controls.TagsSelector tagsselector;
}
}

View file

@ -323,8 +323,8 @@ namespace CodeImp.DoomBuilder.Windows
SetupCeilingSlope(sc, true);
// Action
tagSelector.Setup(UniversalType.SectorTag); //mxd
tagSelector.SetTag(sc.Tag);//mxd
tagsselector.Setup(UniversalType.SectorTag); //mxd
tagsselector.SetValue(sc.Tags, true);//mxd
// Custom fields
fieldslist.SetValues(sc.Fields, true);
@ -430,7 +430,7 @@ namespace CodeImp.DoomBuilder.Windows
SetupCeilingSlope(s, false);
// Action
if(s.Tag != sc.Tag) tagSelector.ClearTag(); //mxd
tagsselector.SetValue(s.Tags, false); //mxd
// Custom fields
fieldslist.SetValues(s.Fields, false);
@ -471,8 +471,9 @@ namespace CodeImp.DoomBuilder.Windows
if(useCeilSlopeLineAngles) ceilingslopecontrol.StepValues = anglesteps;
if(useFloorSlopeLineAngles) floorslopecontrol.StepValues = anglesteps;
//mxd. Comments
//mxd. Comments and Tags
commenteditor.FinishSetup();
tagsselector.FinishSetup();
preventchanges = false; //mxd
}
@ -641,14 +642,6 @@ namespace CodeImp.DoomBuilder.Windows
private void apply_Click(object sender, EventArgs e)
{
// Verify the tag
tagSelector.ValidateTag(); //mxd
if((tagSelector.GetTag(0) < General.Map.FormatInterface.MinTag) || (tagSelector.GetTag(0) > General.Map.FormatInterface.MaxTag))
{
General.ShowWarningMessage("Sector tag must be between " + General.Map.FormatInterface.MinTag + " and " + General.Map.FormatInterface.MaxTag + ".", MessageBoxButtons.OK);
return;
}
// Verify the effect
if((effect.Value < General.Map.FormatInterface.MinEffect) || (effect.Value > General.Map.FormatInterface.MaxEffect))
{
@ -684,8 +677,8 @@ namespace CodeImp.DoomBuilder.Windows
if(!effect.Empty) s.Effect = effect.Value;
s.Brightness = General.Clamp(brightness.GetResult(s.Brightness), General.Map.FormatInterface.MinBrightness, General.Map.FormatInterface.MaxBrightness);
// Action
s.Tag = General.Clamp(tagSelector.GetSmartTag(s.Tag, tagoffset++), General.Map.FormatInterface.MinTag, General.Map.FormatInterface.MaxTag); //mxd
//mxd. Tag
tagsselector.ApplyTo(s, tagoffset++);
// Fields
fieldslist.Apply(s.Fields);

View file

@ -138,36 +138,12 @@
<metadata name="label8.GenerateMember" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</metadata>
<metadata name="label14.GenerateMember" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</metadata>
<metadata name="label9.GenerateMember" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</metadata>
<metadata name="label13.GenerateMember" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</metadata>
<metadata name="label2.GenerateMember" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</metadata>
<metadata name="label8.GenerateMember" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</metadata>
<metadata name="groupfloorceiling.GenerateMember" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</metadata>
<metadata name="label15.GenerateMember" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</metadata>
<metadata name="label6.GenerateMember" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</metadata>
<metadata name="label5.GenerateMember" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</metadata>
<metadata name="label15.GenerateMember" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</metadata>
<metadata name="tooltip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
@ -186,7 +162,4 @@
<metadata name="fieldslist.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="tooltip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
</root>

View file

@ -280,12 +280,16 @@
//
// labelGravity
//
this.labelGravity.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Underline, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.labelGravity.ForeColor = System.Drawing.SystemColors.HotTrack;
this.labelGravity.Location = new System.Drawing.Point(52, 27);
this.labelGravity.Name = "labelGravity";
this.labelGravity.Size = new System.Drawing.Size(50, 14);
this.labelGravity.TabIndex = 18;
this.labelGravity.Text = "Gravity:";
this.labelGravity.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
this.tooltip.SetToolTip(this.labelGravity, "Positive values are multiplied with the class\'s property.\r\nNegative values are us" +
"ed as their absolute.\r\nDefault is 1.0.");
//
// label7
//
@ -350,7 +354,7 @@
//
this.missingflags.BackColor = System.Drawing.SystemColors.Window;
this.missingflags.Image = global::CodeImp.DoomBuilder.Properties.Resources.Warning;
this.missingflags.Location = new System.Drawing.Point(42, -1);
this.missingflags.Location = new System.Drawing.Point(42, -2);
this.missingflags.Name = "missingflags";
this.missingflags.Size = new System.Drawing.Size(16, 16);
this.missingflags.TabIndex = 5;
@ -606,12 +610,16 @@
//
// label10
//
this.label10.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Underline, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.label10.ForeColor = System.Drawing.SystemColors.HotTrack;
this.label10.Location = new System.Drawing.Point(52, 91);
this.label10.Name = "label10";
this.label10.Size = new System.Drawing.Size(50, 14);
this.label10.TabIndex = 22;
this.label10.Text = "Health:";
this.label10.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
this.tooltip.SetToolTip(this.label10, "Positive values are multiplied with the class\'s property.\r\nNegative values are us" +
"ed as their absolute.\r\nDefault is 1.");
//
// score
//
@ -919,6 +927,13 @@
this.hintlabel.TabIndex = 4;
this.hintlabel.Text = "Select categories or several thing types to randomly assign them to selection";
//
// tooltip
//
this.tooltip.AutomaticDelay = 10;
this.tooltip.AutoPopDelay = 10000;
this.tooltip.InitialDelay = 10;
this.tooltip.ReshowDelay = 100;
//
// ThingEditFormUDMF
//
this.AcceptButton = this.apply;

View file

@ -120,7 +120,4 @@
<metadata name="tooltip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<metadata name="tooltip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
</root>