Voxels can now be loaded from WAD resources.

Reverted "Delete Item" action to the way it worked in DB2.
Added "Dissolve Item" action, which works the way "Delete Item" worked in previous revisions of GZDB.
Added "Auto Clear Sidedef Textures" action, "Edit" menu and toolbar button, which toggle automatic removal of sidedef textures when floor or ceiling height is changed or when geometry is drawn, copied or pasted.
Draw Settings panel: upper/lower texture overrides can now be used.
Draw Settings panel: added 2 sets of buttons, which allow to quickly set or clear textures in current selection.
Things are now rendered behind AND on top of the grid/linedefs/vertices when they are dragged.
Redesigned hints system. They are now shown in a side panel.
Edit area auto-focusing is now disabled when script editor is open.
Texture Browser form: no texture group was selected when opening the form in some cases.
Fixed several strange/misleading text messages.
This commit is contained in:
MaxED 2014-01-08 09:46:57 +00:00
parent ae79ed4e19
commit 013865e27d
48 changed files with 1939 additions and 948 deletions

View file

@ -59,6 +59,12 @@ common
include("Boom_misc.cfg", "colormaps");
}
//mxd. Voxel sources
voxels
{
include("ZDoom_misc.cfg", "voxels");
}
// Generalized sector types
gen_sectortypes
{

View file

@ -181,6 +181,14 @@ textures
}
}
voxels //mxd
{
zdoom1
{
start = "VX_START";
end = "VX_END";
}
}
/*
ADDITIONAL UNIVERSAL DOOM MAP FORMAT FIELD DEFINITIONS

View file

@ -45,6 +45,7 @@ shortcuts
builder_classicedit = 2;
builder_classicselect = 1;
builder_deleteitem = 46;
builder_dissolveitem = 8;
buildermodes_finishdraw = 2;
buildermodes_drawpoint = 1;
buildermodes_drawlinesmode = 131140;

View file

@ -671,6 +671,12 @@
<Compile Include="Controls\DockersTabsControl.cs">
<SubType>Component</SubType>
</Compile>
<Compile Include="Controls\HintsPanel.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="Controls\HintsPanel.Designer.cs">
<DependentUpon>HintsPanel.cs</DependentUpon>
</Compile>
<Compile Include="Controls\PasteOptionsControl.cs">
<SubType>UserControl</SubType>
</Compile>
@ -872,6 +878,9 @@
<EmbeddedResource Include="Controls\DockersControl.resx">
<DependentUpon>DockersControl.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Controls\HintsPanel.resx">
<DependentUpon>HintsPanel.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Controls\PasteOptionsControl.resx">
<SubType>Designer</SubType>
<DependentUpon>PasteOptionsControl.cs</DependentUpon>
@ -917,6 +926,7 @@
<None Include="Resources\ArrowDown.png" />
<None Include="Resources\ArrowUp.png" />
<None Include="Resources\Check.png" />
<None Include="Resources\ClearTextures.png" />
<Content Include="Resources\DB2.ico" />
<None Include="Resources\GZDB2.ico" />
<None Include="Resources\fog.png" />

View file

@ -85,12 +85,13 @@ namespace CodeImp.DoomBuilder.Config
private IDictionary maplumpnames; // This is old, we should use maplumps instead
private Dictionary<string, MapLumpInfo> maplumps;
// Texture/flat sources
// Texture/flat/voxel sources
private IDictionary textureranges;
private IDictionary flatranges;
private IDictionary patchranges;
private IDictionary spriteranges;
private IDictionary colormapranges;
private IDictionary voxelranges; //mxd
// Things
private List<string> defaultthingflags;
@ -185,12 +186,13 @@ namespace CodeImp.DoomBuilder.Config
public IDictionary MapLumpNames { get { return maplumpnames; } }
public Dictionary<string, MapLumpInfo> MapLumps { get { return maplumps; } }
// Texture/flat sources
// Texture/flat/voxel sources
public IDictionary TextureRanges { get { return textureranges; } }
public IDictionary FlatRanges { get { return flatranges; } }
public IDictionary PatchRanges { get { return patchranges; } }
public IDictionary SpriteRanges { get { return spriteranges; } }
public IDictionary ColormapRanges { get { return colormapranges; } }
public IDictionary VoxelRanges { get { return voxelranges; } } //mxd
// Things
public ICollection<string> DefaultThingFlags { get { return defaultthingflags; } }
@ -332,6 +334,7 @@ namespace CodeImp.DoomBuilder.Config
patchranges = cfg.ReadSetting("patches", new Hashtable());
spriteranges = cfg.ReadSetting("sprites", new Hashtable());
colormapranges = cfg.ReadSetting("colormaps", new Hashtable());
voxelranges = cfg.ReadSetting("voxels", new Hashtable()); //mxd
// Map lumps
LoadMapLumps();

View file

@ -111,6 +111,7 @@ namespace CodeImp.DoomBuilder.Config
private string lastUsedConfigName;
private bool gzMarkExtraFloors;
private int maxRecentFiles;
private bool autoClearSideTextures;
// These are not stored in the configuration, only used at runtime
private int defaultbrightness;
@ -193,6 +194,7 @@ namespace CodeImp.DoomBuilder.Config
public string LastUsedConfigName { get { return lastUsedConfigName; } internal set { lastUsedConfigName = value; } }
public bool GZMarkExtraFloors { get { return gzMarkExtraFloors; } internal set { gzMarkExtraFloors = value; } }
public int MaxRecentFiles { get { return maxRecentFiles; } internal set { maxRecentFiles = General.Clamp(value, 8, 25); } }
public bool AutoClearSidedefTextures { get { return autoClearSideTextures; } internal set { autoClearSideTextures = value; } }
//mxd. Left here for compatibility reasons...
public string DefaultTexture { get { return General.Map != null ? General.Map.Options.DefaultWallTexture : "-"; } set { if(General.Map != null) General.Map.Options.DefaultWallTexture = value; } }
@ -296,6 +298,7 @@ namespace CodeImp.DoomBuilder.Config
lastUsedConfigName = cfg.ReadSetting("lastusedconfigname", "");
gzMarkExtraFloors = cfg.ReadSetting("gzmarkextrafloors", true);
maxRecentFiles = cfg.ReadSetting("maxrecentfiles", 8);
autoClearSideTextures = cfg.ReadSetting("autoclearsidetextures", true);
//mxd. Sector defaults
defaultceilheight = cfg.ReadSetting("defaultceilheight", 128);
@ -382,6 +385,7 @@ namespace CodeImp.DoomBuilder.Config
if(!string.IsNullOrEmpty(lastUsedConfigName))
cfg.WriteSetting("lastusedconfigname", lastUsedConfigName);
cfg.WriteSetting("maxrecentfiles", maxRecentFiles);
cfg.WriteSetting("autoclearsidetextures", autoClearSideTextures);
//mxd. Sector defaults
cfg.WriteSetting("defaultceilheight", defaultceilheight);
@ -552,7 +556,7 @@ namespace CodeImp.DoomBuilder.Config
if(General.Map == null || General.Map.Options == null) return;
// Default texture missing?
if(!General.Map.Options.OverrideWallTexture || string.IsNullOrEmpty(General.Map.Options.DefaultWallTexture)) //mxd
if(!General.Map.Options.OverrideMiddleTexture || string.IsNullOrEmpty(General.Map.Options.DefaultWallTexture)) //mxd
{
// Find default texture from map
foundone = false;
@ -561,7 +565,7 @@ namespace CodeImp.DoomBuilder.Config
if(sd.MiddleTexture != "-")
{
General.Map.Options.DefaultWallTexture = sd.MiddleTexture;
if(General.Map.Data.GetTextureExists(General.Map.Options.DefaultWallTexture))
if(General.Map.Data.GetTextureExists(sd.MiddleTexture))
{
foundone = true;
break;
@ -593,6 +597,10 @@ namespace CodeImp.DoomBuilder.Config
}
}
//mxd.
if(!General.Map.Options.OverrideTopTexture) General.Map.Options.DefaultTopTexture = General.Map.Options.DefaultWallTexture;
if(!General.Map.Options.OverrideBottomTexture) General.Map.Options.DefaultBottomTexture = General.Map.Options.DefaultWallTexture;
// Default floor missing?
if(!General.Map.Options.OverrideFloorTexture || string.IsNullOrEmpty(General.Map.Options.DefaultFloorTexture))
{
@ -676,7 +684,9 @@ namespace CodeImp.DoomBuilder.Config
}
// Texture names may not be null
if(string.IsNullOrEmpty(General.Map.Options.DefaultTopTexture)) General.Map.Options.DefaultTopTexture = "-";
if(string.IsNullOrEmpty(General.Map.Options.DefaultWallTexture)) General.Map.Options.DefaultWallTexture = "-";
if(string.IsNullOrEmpty(General.Map.Options.DefaultBottomTexture)) General.Map.Options.DefaultBottomTexture = "-";
if(string.IsNullOrEmpty(General.Map.Options.DefaultFloorTexture)) General.Map.Options.DefaultFloorTexture = "-";
if(string.IsNullOrEmpty(General.Map.Options.DefaultCeilingTexture)) General.Map.Options.DefaultCeilingTexture = "-";
}

View file

@ -0,0 +1,67 @@
namespace CodeImp.DoomBuilder.Controls
{
partial class HintsPanel
{
/// <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() {
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(HintsPanel));
this.hints = new System.Windows.Forms.RichTextBox();
this.SuspendLayout();
//
// hints
//
this.hints.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.hints.BackColor = System.Drawing.SystemColors.Window;
this.hints.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.hints.Cursor = System.Windows.Forms.Cursors.Arrow;
this.hints.DetectUrls = false;
this.hints.Font = new System.Drawing.Font("Verdana", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
this.hints.Location = new System.Drawing.Point(3, 3);
this.hints.Name = "hints";
this.hints.ReadOnly = true;
this.hints.ScrollBars = System.Windows.Forms.RichTextBoxScrollBars.Vertical;
this.hints.ShortcutsEnabled = false;
this.hints.Size = new System.Drawing.Size(384, 542);
this.hints.TabIndex = 1;
this.hints.Text = resources.GetString("hints.Text");
//
// HintsPanel
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Controls.Add(this.hints);
this.Name = "HintsPanel";
this.Size = new System.Drawing.Size(390, 548);
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.RichTextBox hints;
}
}

View file

@ -0,0 +1,43 @@
using System;
using System.Drawing;
using System.Windows.Forms;
namespace CodeImp.DoomBuilder.Controls
{
internal partial class HintsPanel : UserControl
{
public HintsPanel() {
InitializeComponent();
hints.Clear();
}
internal void SetHints(string[] hintsText) {
hints.Clear();
foreach (string s in hintsText) {
hints.AppendText(s + Environment.NewLine + Environment.NewLine);
}
//apply <b> tags
int start = hints.Text.IndexOf("<b>");
int end = hints.Text.IndexOf("</b>");
Font regular = hints.Font;
Font bold = new Font(hints.SelectionFont, FontStyle.Bold);
while(start != -1 && end != -1) {
hints.Select(start, end + 4 - start);
hints.SelectionFont = bold;
hints.SelectedText = hints.SelectedText.Replace("<b>", "").Replace("</b>", "");
start = hints.Text.IndexOf("<b>");
end = hints.Text.IndexOf("</b>");
}
hints.SelectionFont = regular;
}
internal void ClearHints() {
hints.Clear();
}
}
}

View file

@ -0,0 +1,145 @@
<?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>
<data name="hints.Text" xml:space="preserve">
<value>To look around, look around!
Press any key to Jason!
Awesome stuff can be found in the manual!
Press Use to Use Press!
Place things to gain experience!
You can expand your kingdom by adding new sectors!
Beware of exceptions, they can do MASSIVE sanity damage!
Press Space to SPAAACEEEEE!!!
Check our Exception Killer Day One DLC!
GZDB is very easy to use: just learn more than 300 awesome hot keys and you are ready to go!
To find the Broom Closet Ending, create the broom closet!
Press F1 to view Achievements!</value>
</data>
</root>

View file

@ -45,8 +45,6 @@ namespace CodeImp.DoomBuilder.Controls
// Initialize
this.SetStyle(ControlStyles.FixedWidth, true);
this.SetStyle(ControlStyles.FixedHeight, true);
this.MouseEnter += new System.EventHandler(RenderTargetControl_MouseEnter); //mxd
}
// Disposer
@ -72,11 +70,6 @@ namespace CodeImp.DoomBuilder.Controls
protected override void OnKeyUp(KeyEventArgs e) {
if(OnKeyReleased != null) OnKeyReleased(this, e);
}
//mxd
private void RenderTargetControl_MouseEnter(object sender, System.EventArgs e) {
this.Focus();
}
#endregion

View file

@ -27,6 +27,12 @@ namespace CodeImp.DoomBuilder.Data
{
internal abstract class DataReader
{
#region ================== Constants
protected const string SPRITE_NAME_PATTERN = "(?i)\\A[a-z0-9]{4}([a-z][0-9]{0,2})$"; //mxd
#endregion
#region ================== Variables
protected DataLocation location;
@ -165,9 +171,6 @@ namespace CodeImp.DoomBuilder.Data
//mxd. When implemented, this returns the list of voxel model names
public virtual string[] GetVoxelNames() { return null; }
//mxd. When implemented, this checks if the given voxel lump exists
public virtual bool GetVoxelExists(string name) { return false; }
//mxd. When implemented, this returns the voxel lump
public virtual Stream GetVoxelData(string name) { return null; }

View file

@ -240,6 +240,12 @@ namespace CodeImp.DoomBuilder.Data
// Error when suspended
if(issuspended) throw new Exception("Data reader is suspended");
// Find in any of the wad files
for(int i = wads.Count - 1; i >= 0; i--) {
Stream voxel = wads[i].GetVoxelData(name);
if(voxel != null) return voxel;
}
try {
// Find in voxels directory
string path = Path.Combine(VOXELS_DIR, Path.GetDirectoryName(name));
@ -255,26 +261,6 @@ namespace CodeImp.DoomBuilder.Data
return null;
}
//mxd. This checks if the given sprite exists
public override bool GetVoxelExists(string name) {
// Error when suspended
if(issuspended) throw new Exception("Data reader is suspended");
// Find in voxels directory
try {
string path = Path.Combine(VOXELS_DIR, Path.GetDirectoryName(name));
string filename = FindFirstFile(path, Path.GetFileName(name), true);
if((filename != null) && FileExists(filename)) {
return true;
}
} catch(Exception e) {
General.ErrorLogger.Add(ErrorType.Error, e.GetType().Name + " while checking voxel '" + name + "' existance in directory: " + e.Message);
}
// Nothing found
return false;
}
#endregion
#region ================== Methods

View file

@ -216,11 +216,11 @@ namespace CodeImp.DoomBuilder.Data
// This checks if the given sprite exists
public override bool GetSpriteExists(string pname)
{
string pfilename = pname.Replace('\\', '^');
// Error when suspended
if(issuspended) throw new Exception("Data reader is suspended");
string pfilename = pname.Replace('\\', '^');
// Find in any of the wad files
for(int i = wads.Count - 1; i >= 0; i--)
{
@ -242,11 +242,17 @@ namespace CodeImp.DoomBuilder.Data
#region ================== Voxels (mxd)
//mxd. This finds and returns a voxel stream
//mxd. This finds and returns a voxel stream or null if no voxel was found
public override Stream GetVoxelData(string name) {
// Error when suspended
if(issuspended) throw new Exception("Data reader is suspended");
// Find in any of the wad files
for(int i = wads.Count - 1; i >= 0; i--) {
Stream voxel = wads[i].GetVoxelData(name);
if(voxel != null) return voxel;
}
string pfilename = name.Replace('\\', '^');
// Find in sprites directory
@ -259,23 +265,6 @@ namespace CodeImp.DoomBuilder.Data
return null;
}
//mxd. This checks if the given voxel exists
public override bool GetVoxelExists(string name) {
// Error when suspended
if(issuspended) throw new Exception("Data reader is suspended");
string pfilename = name.Replace('\\', '^');
// Find in sprites directory
string filename = FindFirstFile(VOXELS_DIR, pfilename, true);
if((filename != null) && FileExists(filename)) {
return true;
}
// Nothing found
return false;
}
#endregion
#region ================== Methods

View file

@ -494,7 +494,7 @@ namespace CodeImp.DoomBuilder.Data
string[] files = GetAllFiles("voxels", false);
List<string> voxels = new List<string>();
Regex spriteName = new Regex("(?i)\\A[a-z0-9]{4}([a-z][0-9]{0,2})$");
Regex spriteName = new Regex(SPRITE_NAME_PATTERN);
for(int i = 0; i < files.Length; i++) {
string s = Path.GetFileNameWithoutExtension(files[i]).ToUpperInvariant();

View file

@ -23,6 +23,7 @@ using System.IO;
using CodeImp.DoomBuilder.IO;
using CodeImp.DoomBuilder.ZDoom;
using CodeImp.DoomBuilder.GZBuilder.Data;
using System.Text.RegularExpressions;
#endregion
@ -58,6 +59,7 @@ namespace CodeImp.DoomBuilder.Data
private List<LumpRange> spriteranges;
private List<LumpRange> textureranges;
private List<LumpRange> colormapranges;
private List<LumpRange> voxelranges; //mxd
#endregion
@ -86,6 +88,7 @@ namespace CodeImp.DoomBuilder.Data
flatranges = new List<LumpRange>();
textureranges = new List<LumpRange>();
colormapranges = new List<LumpRange>();
voxelranges = new List<LumpRange>(); //mxd
// Find ranges
FindRanges(patchranges, General.Map.Config.PatchRanges, "patches");
@ -93,6 +96,7 @@ namespace CodeImp.DoomBuilder.Data
FindRanges(flatranges, General.Map.Config.FlatRanges, "flats");
FindRanges(textureranges, General.Map.Config.TextureRanges, "textures");
FindRanges(colormapranges, General.Map.Config.ColormapRanges, "colormaps");
FindRanges(voxelranges, General.Map.Config.VoxelRanges, "voxels");
//mxd
invertedflatranges = new List<LumpRange>();
@ -284,11 +288,11 @@ namespace CodeImp.DoomBuilder.Data
// This finds and returns a colormap stream
public override Stream GetColormapData(string pname)
{
Lump lump;
// Error when suspended
if(issuspended) throw new Exception("Data reader is suspended");
Lump lump;
// Strictly read patches only between C_START and C_END?
if(strictpatches)
{
@ -316,12 +320,13 @@ namespace CodeImp.DoomBuilder.Data
// This loads the textures
public override ICollection<ImageData> LoadTextures(PatchNames pnames)
{
// Error when suspended
if(issuspended) throw new Exception("Data reader is suspended");
List<ImageData> images = new List<ImageData>();
int lumpindex;
Lump lump;
// Error when suspended
if(issuspended) throw new Exception("Data reader is suspended");
float defaultscale = General.Map.Config.DefaultTextureScale; //mxd
// Load two sets of textures, if available
lump = file.FindLump("TEXTURE1");
@ -332,8 +337,20 @@ namespace CodeImp.DoomBuilder.Data
// Read ranges from configuration
foreach(LumpRange range in textureranges)
{
// Load texture range
LoadTexturesRange(range.start, range.end, ref images, pnames);
// Go for all lumps between start and end exclusive
for(int i = range.start + 1; i < range.end; i++) {
// Lump not zero length?
if(file.Lumps[i].Length > 0) {
// Make the image
SimpleTextureImage image = new SimpleTextureImage(file.Lumps[i].Name, file.Lumps[i].Name, defaultscale, defaultscale);
// Add image to collection
images.Add(image);
} else {
// Can't load image without size
General.ErrorLogger.Add(ErrorType.Error, "Can't load texture '" + file.Lumps[i].Name + "' because it doesn't contain any data.");
}
}
}
// Load TEXTURES lump file
@ -355,32 +372,6 @@ namespace CodeImp.DoomBuilder.Data
// Return result
return images;
}
// This loads a range of textures
private void LoadTexturesRange(int startindex, int endindex, ref List<ImageData> images, PatchNames pnames)
{
// Determine default scale
float defaultscale = General.Map.Config.DefaultTextureScale;
// Go for all lumps between start and end exclusive
for(int i = startindex + 1; i < endindex; i++)
{
// Lump not zero length?
if(file.Lumps[i].Length > 0)
{
// Make the image
SimpleTextureImage image = new SimpleTextureImage(file.Lumps[i].Name, file.Lumps[i].Name, defaultscale, defaultscale);
// Add image to collection
images.Add(image);
}
else
{
// Can't load image without name
General.ErrorLogger.Add(ErrorType.Error, "Can't load an unnamed texture from lump index " + i + ". Please consider giving names to your resources.");
}
}
}
// This loads the texture definitions from a TEXTURES lump
public static void LoadHighresTextures(Stream stream, string filename, ref List<ImageData> images, Dictionary<long, ImageData> textures, Dictionary<long, ImageData> flats)
@ -579,33 +570,32 @@ namespace CodeImp.DoomBuilder.Data
#region ================== Flats
// This loads the textures
public override ICollection<ImageData> LoadFlats()
{
List<ImageData> images = new List<ImageData>();
string rangestart, rangeend;
int lumpindex;
//mxd. This loads the flats
public override ICollection<ImageData> LoadFlats() {
// Error when suspended
if(issuspended) throw new Exception("Data reader is suspended");
// Read ranges from configuration
foreach(DictionaryEntry r in General.Map.Config.FlatRanges)
{
// Read start and end
rangestart = General.Map.Config.ReadSetting("flats." + r.Key + ".start", "");
rangeend = General.Map.Config.ReadSetting("flats." + r.Key + ".end", "");
if((rangestart.Length > 0) && (rangeend.Length > 0))
{
// Load texture range
LoadFlatsRange(rangestart, rangeend, ref images);
List<ImageData> images = new List<ImageData>();
FlatImage image;
foreach(LumpRange range in flatranges){
if(range.end < range.start + 2) continue;
for(int i = range.start + 1; i < range.end; i++) {
// Lump not zero-length?
if(file.Lumps[i].Length > 0) {
// Make the image object
image = new FlatImage(file.Lumps[i].Name);
// Add image to collection
images.Add(image);
}
}
}
// Load TEXTURES lump file
lumpindex = file.FindLumpIndex("TEXTURES");
while(lumpindex > -1)
{
int lumpindex = file.FindLumpIndex("TEXTURES");
while(lumpindex > -1) {
MemoryStream filedata = new MemoryStream(file.Lumps[lumpindex].Stream.ReadAllBytes());
WADReader.LoadHighresFlats(filedata, "TEXTURES", ref images, null, null);
filedata.Dispose();
@ -613,49 +603,14 @@ namespace CodeImp.DoomBuilder.Data
// Find next
lumpindex = file.FindLumpIndex("TEXTURES", lumpindex + 1);
}
// Add images to the container-specific texture set
foreach(ImageData img in images)
textureset.AddFlat(img);
foreach(ImageData img in images) textureset.AddFlat(img);
// Return result
return images;
}
// This loads a range of flats
private void LoadFlatsRange(string startlump, string endlump, ref List<ImageData> images)
{
int startindex, endindex;
FlatImage image;
// Continue until no more start can be found
startindex = file.FindLumpIndex(startlump);
while(startindex > -1)
{
// Find end index
endindex = file.FindLumpIndex(endlump, startindex + 1);
if(endindex > -1)
{
// Go for all lumps between start and end exclusive
for(int i = startindex + 1; i < endindex; i++)
{
// Lump not zero-length?
if(file.Lumps[i].Length > 0)
{
// Make the image object
image = new FlatImage(file.Lumps[i].Name);
// Add image to collection
images.Add(image);
}
}
}
// Find the next start
startindex = file.FindLumpIndex(startlump, startindex + 1);
}
}
// This loads the flat definitions from a TEXTURES lump
public static void LoadHighresFlats(Stream stream, string filename, ref List<ImageData> images, Dictionary<long, ImageData> textures, Dictionary<long, ImageData> flats)
{
@ -683,11 +638,11 @@ namespace CodeImp.DoomBuilder.Data
// This finds and returns a patch stream
public override Stream GetFlatData(string pname)
{
Lump lump;
// Error when suspended
if(issuspended) throw new Exception("Data reader is suspended");
Lump lump;
// Find the lump in ranges
foreach(LumpRange range in flatranges)
{
@ -705,15 +660,13 @@ namespace CodeImp.DoomBuilder.Data
// This loads the textures
public override ICollection<ImageData> LoadSprites()
{
List<ImageData> images = new List<ImageData>();
//string rangestart, rangeend;
int lumpindex;
// Error when suspended
if(issuspended) throw new Exception("Data reader is suspended");
List<ImageData> images = new List<ImageData>();
// Load TEXTURES lump file
lumpindex = file.FindLumpIndex("TEXTURES");
int lumpindex = file.FindLumpIndex("TEXTURES");
while(lumpindex > -1)
{
MemoryStream filedata = new MemoryStream(file.Lumps[lumpindex].Stream.ReadAllBytes());
@ -790,6 +743,52 @@ namespace CodeImp.DoomBuilder.Data
#endregion
#region ================== Voxels (mxd)
//mxd. This returns the list of voxels, which can be used without VOXELDEF definition
public override string[] GetVoxelNames() {
// Error when suspended
if(issuspended) throw new Exception("Data reader is suspended");
List<string> voxels = new List<string>();
Regex spriteName = new Regex(SPRITE_NAME_PATTERN);
foreach(LumpRange range in voxelranges) {
if(range.start == range.end) continue;
for(int i = range.start + 1; i < range.end; i++) {
if(spriteName.IsMatch(file.Lumps[i].Name)) voxels.Add(file.Lumps[i].Name);
}
}
return voxels.ToArray();
}
//mxd
public override KeyValuePair<string, Stream> GetVoxeldefData() {
Lump lump = file.FindLump("VOXELDEF");
if(lump != null) return new KeyValuePair<string, Stream>("VOXELDEF", lump.Stream);
return new KeyValuePair<string, Stream>();
}
//mxd. This finds and returns a voxel stream or null if no voxel was found
public override Stream GetVoxelData(string name) {
// Error when suspended
if(issuspended) throw new Exception("Data reader is suspended");
Lump lump;
foreach(LumpRange range in voxelranges) {
if(range.start == range.end) continue;
lump = file.FindLump(name, range.start, range.end);
if(lump != null) return lump.Stream;
}
return null;
}
#endregion
#region ================== Decorate, Gldefs, Mapinfo, etc...
// This finds and returns a sprite stream

View file

@ -79,10 +79,6 @@ namespace CodeImp.DoomBuilder.Editing
//mxd. used in "Play From Here" Action
private Thing playerStart;
private Vector3D playerStartPosition;
//mxd. Hints
protected string[] hints;
protected string[] multiselectionHints;
#endregion
@ -141,9 +137,6 @@ namespace CodeImp.DoomBuilder.Editing
Vector2D campos = new Vector2D(General.Map.VisualCamera.Position.x, General.Map.VisualCamera.Position.y);
renderer2d.PositionView(campos.x, campos.y);
}
SetupHints(); //mxd
SetupMultiselectionHints(); //mxd
}
// Disposer
@ -598,10 +591,6 @@ namespace CodeImp.DoomBuilder.Editing
/// </summary>
public override void OnEngage()
{
//mxd. Update hints
General.Interface.HideInfo();
General.Interface.ShowEditModeHints(hints);
// Clear display overlay
renderer.StartOverlay(true);
renderer.Finish();
@ -808,20 +797,6 @@ namespace CodeImp.DoomBuilder.Editing
ScrollBy(lastmappos.x - mousemappos.x, lastmappos.y - mousemappos.y);
}
}
/// <summary>
/// Override this to setup hints for this editing mode
/// </summary>
protected virtual void SetupHints() { //mxd
hints = new[] { "Press F1 to view help about current editing mode" };
}
/// <summary>
/// Override this to setup hints shown while multiselecting for this editing mode
/// </summary>
protected virtual void SetupMultiselectionHints() { //mxd
multiselectionHints = new[] { "Press F1 to view help about current editing mode" };
}
#endregion

View file

@ -47,6 +47,10 @@ namespace CodeImp.DoomBuilder.Editing
// Disposing
protected bool isdisposed = false;
//mxd. Hints
protected string[] hints;
protected string[] multiselectionHints;
#endregion
#region ================== Properties
@ -84,6 +88,9 @@ namespace CodeImp.DoomBuilder.Editing
// No attributes found?
if(attributes == null) throw new Exception("Editing mode \"" + this.GetType().Name + "\" is missing EditMode attributes!");
SetupHints(); //mxd
SetupMultiselectionHints(); //mxd
// We have no destructor
GC.SuppressFinalize(this);
@ -129,6 +136,25 @@ namespace CodeImp.DoomBuilder.Editing
#endregion
#region ================== Methods (mxd)
/// <summary>
/// Override this to setup hints for this editing mode
/// </summary>
protected virtual void SetupHints() { //mxd
hints = new[] { "Press F1 to view help about current editing mode" };
}
/// <summary>
/// Override this to setup hints shown while multiselecting for this editing mode
/// </summary>
protected virtual void SetupMultiselectionHints() { //mxd
multiselectionHints = new[] { "Press F1 to view help about current editing mode" };
}
#endregion
#region ================== Events
//
@ -146,6 +172,9 @@ namespace CodeImp.DoomBuilder.Editing
{
// Bind any methods
General.Actions.BindMethods(this);
//mxd. Show hints for this mode
General.Interface.ShowEditModeHints(hints);
}
// Mode disengages

View file

@ -1032,6 +1032,7 @@ namespace CodeImp.DoomBuilder
mainwindow.UpdateThingsFilters();
mainwindow.UpdateInterface();
//mxd
mainwindow.AddHintsDocker();
mainwindow.UpdateGZDoomPanel();
mainwindow.HideInfo();
@ -1083,6 +1084,7 @@ namespace CodeImp.DoomBuilder
mainwindow.HideInfo();
mainwindow.UpdateThingsFilters();
//mxd
mainwindow.RemoveHintsDocker();
mainwindow.UpdateGZDoomPanel();
mainwindow.UpdateInterface();
mainwindow.DisplayReady();
@ -1175,6 +1177,7 @@ namespace CodeImp.DoomBuilder
mainwindow.UpdateThingsFilters();
mainwindow.UpdateInterface();
mainwindow.HideInfo();
mainwindow.AddHintsDocker(); //mxd
//mxd
mainwindow.UpdateGZDoomPanel();
@ -1264,6 +1267,7 @@ namespace CodeImp.DoomBuilder
mainwindow.UpdateThingsFilters();
mainwindow.UpdateInterface();
mainwindow.HideInfo();
mainwindow.AddHintsDocker(); //mxd
if(errorlogger.IsErrorAdded)
{

View file

@ -558,6 +558,11 @@ namespace CodeImp.DoomBuilder.Geometry
}
// Update line
if(useOverrides) { //mxd
if(ls.Line.Front != null) ls.Line.Front.ShiftTextures();
if(ls.Line.Back != null) ls.Line.Back.ShiftTextures();
}
if(ls.Line.Front != null) ls.Line.Front.RemoveUnneededTextures(wassinglesided);
if(ls.Line.Back != null) ls.Line.Back.RemoveUnneededTextures(wassinglesided);
@ -597,7 +602,7 @@ namespace CodeImp.DoomBuilder.Geometry
ls.Line.ApplySidedFlags();
// We must remove the (now useless) middle texture on the other side
if(ls.Line.Back != null) ls.Line.Back.RemoveUnneededTextures(true, true);
if(ls.Line.Back != null) ls.Line.Back.RemoveUnneededTextures(true, false, true);
}
// Added 23-9-08, can we do this or will it break things?
else if(!original.Sector.IsDisposed) //mxd
@ -617,7 +622,7 @@ namespace CodeImp.DoomBuilder.Geometry
ls.Line.ApplySidedFlags();
// We must remove the (now useless) middle texture on the other side
if(ls.Line.Front != null) ls.Line.Front.RemoveUnneededTextures(true, true);
if(ls.Line.Front != null) ls.Line.Front.RemoveUnneededTextures(true, false, true);
}
// Added 23-9-08, can we do this or will it break things?
else if(!original.Sector.IsDisposed) //mxd
@ -676,12 +681,12 @@ namespace CodeImp.DoomBuilder.Geometry
private static void TakeSidedefDefaults(ref SidedefSettings settings, bool useOverrides)
{
// Use defaults where no settings could be found
if(settings.newtexhigh == null || (useOverrides && General.Map.Options.OverrideWallTexture))
settings.newtexhigh = General.Map.Options.DefaultWallTexture;
if(settings.newtexmid == null || (useOverrides && General.Map.Options.OverrideWallTexture))
if(settings.newtexhigh == null || (useOverrides && General.Map.Options.OverrideTopTexture))
settings.newtexhigh = General.Map.Options.DefaultTopTexture;
if(settings.newtexmid == null || (useOverrides && General.Map.Options.OverrideMiddleTexture))
settings.newtexmid = General.Map.Options.DefaultWallTexture;
if(settings.newtexlow == null || (useOverrides && General.Map.Options.OverrideWallTexture))
settings.newtexlow = General.Map.Options.DefaultWallTexture;
if(settings.newtexlow == null || (useOverrides && General.Map.Options.OverrideBottomTexture))
settings.newtexlow = General.Map.Options.DefaultBottomTexture;
}
// This takes sidedef settings if not taken yet

View file

@ -530,10 +530,8 @@ namespace CodeImp.DoomBuilder.Map
// This checks and returns a flag without creating it
public bool IsFlagSet(string flagname)
{
if(flags.ContainsKey(flagname))
return flags[flagname];
else
return false;
if(flags.ContainsKey(flagname)) return flags[flagname];
return false;
}
// This sets a flag
@ -546,7 +544,6 @@ namespace CodeImp.DoomBuilder.Map
flags[flagname] = value;
// Cached flags
//if(flagname == General.Map.Config.SoundLinedefFlag) blocksoundflag = value; //mxd
if(flagname == General.Map.Config.ImpassableFlag) impassableflag = value;
//mxd
@ -565,7 +562,6 @@ namespace CodeImp.DoomBuilder.Map
{
BeforePropsChange();
flags.Clear();
//blocksoundflag = false;
impassableflag = false;
//mxd

View file

@ -60,7 +60,9 @@ namespace CodeImp.DoomBuilder.Map
//mxd. Sector drawing options
private string defaultfloortexture;
private string defaultceiltexture;
private string defaulttoptexture;
private string defaultwalltexture;
private string defaultbottomtexture;
private int custombrightness;
private int customfloorheight;
private int customceilheight;
@ -68,7 +70,9 @@ namespace CodeImp.DoomBuilder.Map
//mxd. Sector drawing overrides
private bool overridefloortexture;
private bool overrideceiltexture;
private bool overridewalltexture;
private bool overridetoptexture;
private bool overridemiddletexture;
private bool overridebottomtexture;
private bool overridefloorheight;
private bool overrideceilheight;
private bool overridebrightness;
@ -102,7 +106,9 @@ namespace CodeImp.DoomBuilder.Map
private Dictionary<int, string> tagLabels;
//mxd. Sector drawing options
public string DefaultTopTexture { get { return defaulttoptexture; } set { defaulttoptexture = value; } }
public string DefaultWallTexture { get { return defaultwalltexture; } set { defaultwalltexture = value; } }
public string DefaultBottomTexture { get { return defaultbottomtexture; } set { defaultbottomtexture = value; } }
public string DefaultFloorTexture { get { return defaultfloortexture; } set { defaultfloortexture = value; } }
public string DefaultCeilingTexture { get { return defaultceiltexture; } set { defaultceiltexture = value; } }
public int CustomBrightness { get { return custombrightness; } set { custombrightness = value; } }
@ -112,7 +118,9 @@ namespace CodeImp.DoomBuilder.Map
//mxd. Sector drawing overrides
public bool OverrideFloorTexture { get { return overridefloortexture; } set { overridefloortexture = value; } }
public bool OverrideCeilingTexture { get { return overrideceiltexture; } set { overrideceiltexture = value; } }
public bool OverrideWallTexture { get { return overridewalltexture; } set { overridewalltexture = value; } }
public bool OverrideTopTexture { get { return overridetoptexture; } set { overridetoptexture = value; } }
public bool OverrideMiddleTexture { get { return overridemiddletexture; } set { overridemiddletexture = value; } }
public bool OverrideBottomTexture { get { return overridebottomtexture; } set { overridebottomtexture = value; } }
public bool OverrideFloorHeight { get { return overridefloorheight; } set { overridefloorheight = value; } }
public bool OverrideCeilingHeight { get { return overrideceilheight; } set { overrideceilheight = value; } }
public bool OverrideBrightness { get { return overridebrightness; } set { overridebrightness = value; } }
@ -177,7 +185,9 @@ namespace CodeImp.DoomBuilder.Map
//mxd. Read Sector drawing options
defaultfloortexture = this.mapconfig.ReadSetting("defaultfloortexture", string.Empty);
defaultceiltexture = this.mapconfig.ReadSetting("defaultceiltexture", string.Empty);
defaulttoptexture = this.mapconfig.ReadSetting("defaulttoptexture", string.Empty);
defaultwalltexture = this.mapconfig.ReadSetting("defaultwalltexture", string.Empty);
defaultbottomtexture = this.mapconfig.ReadSetting("defaultbottomtexture", string.Empty);
custombrightness = General.Clamp(this.mapconfig.ReadSetting("custombrightness", 196), 0, 255);
customfloorheight = this.mapconfig.ReadSetting("customfloorheight", 0);
customceilheight = this.mapconfig.ReadSetting("customceilheight", 128);
@ -185,7 +195,9 @@ namespace CodeImp.DoomBuilder.Map
//mxd. Read Sector drawing overrides
overridefloortexture = this.mapconfig.ReadSetting("overridefloortexture", false);
overrideceiltexture = this.mapconfig.ReadSetting("overrideceiltexture", false);
overridewalltexture = this.mapconfig.ReadSetting("overridewalltexture", false);
overridetoptexture = this.mapconfig.ReadSetting("overridetoptexture", false);
overridemiddletexture = this.mapconfig.ReadSetting("overridemiddletexture", false);
overridebottomtexture = this.mapconfig.ReadSetting("overridebottomtexture", false);
overridefloorheight = this.mapconfig.ReadSetting("overridefloorheight", false);
overrideceilheight = this.mapconfig.ReadSetting("overrideceilheight", false);
overridebrightness = this.mapconfig.ReadSetting("overridebrightness", false);
@ -289,7 +301,9 @@ namespace CodeImp.DoomBuilder.Map
//mxd. Write Sector drawing options
mapconfig.WriteSetting("defaultfloortexture", defaultfloortexture);
mapconfig.WriteSetting("defaultceiltexture", defaultceiltexture);
mapconfig.WriteSetting("defaulttoptexture", defaulttoptexture);
mapconfig.WriteSetting("defaultwalltexture", defaultwalltexture);
mapconfig.WriteSetting("defaultbottomtexture", defaultbottomtexture);
mapconfig.WriteSetting("custombrightness", custombrightness);
mapconfig.WriteSetting("customfloorheight", customfloorheight);
mapconfig.WriteSetting("customceilheight", customceilheight);
@ -297,7 +311,9 @@ namespace CodeImp.DoomBuilder.Map
//mxd. Write Sector drawing overrides
mapconfig.WriteSetting("overridefloortexture", overridefloortexture);
mapconfig.WriteSetting("overrideceiltexture", overrideceiltexture);
mapconfig.WriteSetting("overridewalltexture", overridewalltexture);
mapconfig.WriteSetting("overridetoptexture", overridetoptexture);
mapconfig.WriteSetting("overridemiddletexture", overridemiddletexture);
mapconfig.WriteSetting("overridebottomtexture", overridebottomtexture);
mapconfig.WriteSetting("overridefloorheight", overridefloorheight);
mapconfig.WriteSetting("overrideceilheight", overrideceilheight);
mapconfig.WriteSetting("overridebrightness", overridebrightness);

View file

@ -299,13 +299,14 @@ namespace CodeImp.DoomBuilder.Map
// This removes textures that are not required
public void RemoveUnneededTextures(bool removemiddle)
{
RemoveUnneededTextures(removemiddle, false);
RemoveUnneededTextures(removemiddle, !General.Settings.AutoClearSidedefTextures, false);
}
// This removes textures that are not required
public void RemoveUnneededTextures(bool removemiddle, bool force)
public void RemoveUnneededTextures(bool removemiddle, bool shiftMiddle, bool force)
{
bool changed = false; //mxd
string curMidTex = this.texnamemid; //mxd
// The middle texture can be removed regardless of any sector tag or linedef action
if(!MiddleRequired() && removemiddle)
@ -319,30 +320,66 @@ namespace CodeImp.DoomBuilder.Map
// Check if the line or sectors have no action or tags because
// if they do, any texture on this side could be needed
if(((linedef.Tag <= 0) && (linedef.Action == 0) && (sector.Tag <= 0) &&
((Other == null) || (Other.sector.Tag <= 0))) ||
force)
if(force || ((linedef.Tag <= 0) && (linedef.Action == 0) && (sector.Tag <= 0) &&
((Other == null) || (Other.sector.Tag <= 0))))
{
if(!HighRequired())
{
if(!changed) { //mxd
BeforePropsChange();
changed = true;
if(shiftMiddle) { //mxd
if(string.IsNullOrEmpty(this.texnamehigh) || this.texnamehigh == "-")
SetTextureHigh(curMidTex);
} else {
if(!changed) { //mxd
BeforePropsChange();
changed = true;
}
this.texnamehigh = "-";
this.longtexnamehigh = MapSet.EmptyLongName;
General.Map.IsChanged = true;
}
this.texnamehigh = "-";
this.longtexnamehigh = MapSet.EmptyLongName;
General.Map.IsChanged = true;
}
if(!LowRequired())
{
if(!changed) BeforePropsChange(); //mxd
this.texnamelow = "-";
this.longtexnamelow = MapSet.EmptyLongName;
General.Map.IsChanged = true;
if(shiftMiddle) { //mxd
if(string.IsNullOrEmpty(this.texnamelow) || this.texnamelow == "-")
SetTextureLow(curMidTex);
} else {
if(!changed) BeforePropsChange(); //mxd
this.texnamelow = "-";
this.longtexnamelow = MapSet.EmptyLongName;
General.Map.IsChanged = true;
}
}
}
}
//mxd
internal void ShiftTextures() {
BeforePropsChange();
if(string.IsNullOrEmpty(texnamehigh) || texnamehigh == "-" && HighRequired()) {
if(General.Map.Options.OverrideTopTexture) {
texnamehigh = General.Map.Options.DefaultTopTexture;
longtexnamehigh = Lump.MakeLongName(texnamehigh);
} else {
texnamehigh = texnamemid;
longtexnamehigh = longtexnamemid;
}
}
if(string.IsNullOrEmpty(texnamelow) || texnamelow == "-" && LowRequired()) {
if(General.Map.Options.OverrideBottomTexture) {
texnamelow = General.Map.Options.DefaultBottomTexture;
longtexnamelow = Lump.MakeLongName(texnamelow);
} else {
texnamelow = texnamemid;
longtexnamelow = longtexnamemid;
}
}
General.Map.IsChanged = true;
}
/// <summary>
/// This checks if a texture is required

View file

@ -1,7 +1,7 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:2.0.50727.4927
// Runtime Version:2.0.50727.5466
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
@ -95,6 +95,13 @@ namespace CodeImp.DoomBuilder.Properties {
}
}
internal static System.Drawing.Bitmap ClearTextures {
get {
object obj = ResourceManager.GetObject("ClearTextures", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
internal static System.Drawing.Bitmap CLogo {
get {
object obj = ResourceManager.GetObject("CLogo", resourceCulture);

View file

@ -118,6 +118,9 @@
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="Cut" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Cut.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="ArrowUp" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\ArrowUp.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
@ -172,15 +175,15 @@
<data name="Splash3_small" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Splash3_small.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="Model" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Model.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="ScriptPalette" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\ScriptPalette.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="ScriptHelp" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\ScriptHelp.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="KnownTextureSet" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\KnownTextureSet.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="Splash3_trans" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Splash3_trans.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
@ -190,14 +193,17 @@
<data name="Status2" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Status2.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="Redo" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Redo.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
<data name="Unpin" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Unpin.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="Status0" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Status0.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="Model" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Model.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
<data name="ViewBrightness" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\ViewBrightness.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="Zoom" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Zoom.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="mergegeometry" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\mergegeometry.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
@ -277,6 +283,9 @@
<data name="ErrorLarge" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\ErrorLarge.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="Lightbulb" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Lightbulb.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="MCrash" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\MCrash.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
@ -286,9 +295,6 @@
<data name="Zoom_arrowup" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Zoom_arrowup.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="Zoom" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Zoom.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="Model_selected" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Model_selected.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
@ -307,8 +313,8 @@
<data name="Script2" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Script2.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="Cut" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Cut.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
<data name="Redo" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Redo.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="Prefab" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Prefab.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
@ -337,14 +343,14 @@
<data name="Add" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Add.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="Test" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Test.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="Undo" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Undo.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="Unpin" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Unpin.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
<data name="SlimDX_small" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\SlimDX_small.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="KnownTextureSet" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\KnownTextureSet.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="Angle" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Angle.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
@ -361,17 +367,14 @@
<data name="ViewNormal" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\ViewNormal.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="MissingThing" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\MissingThing.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="Monster3" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Monster3.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="Copy" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Copy.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="ViewBrightness" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\ViewBrightness.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
<data name="Test" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Test.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="Light" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Light.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
@ -382,8 +385,8 @@
<data name="OpenScript" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\OpenScript.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="SlimDX_small" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\SlimDX_small.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
<data name="MissingThing" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\MissingThing.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="Status11" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Status11.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
@ -400,7 +403,7 @@
<data name="Check" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Check.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="Lightbulb" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\Lightbulb.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
<data name="ClearTextures" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\ClearTextures.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
</root>

View file

@ -82,9 +82,10 @@ namespace CodeImp.DoomBuilder.Rendering
dragThings = new Presentation();
dragThings.layers.Add(new PresentLayer(RendererLayer.Background, BlendingMode.Mask, General.Settings.BackgroundAlpha));
dragThings.layers.Add(new PresentLayer(RendererLayer.Surface, BlendingMode.Mask));
dragThings.layers.Add(new PresentLayer(RendererLayer.Geometry, BlendingMode.Alpha, 1.0f, true));
dragThings.layers.Add(new PresentLayer(RendererLayer.Things, BlendingMode.Alpha, 1f, false));
dragThings.layers.Add(new PresentLayer(RendererLayer.Grid, BlendingMode.Mask));
dragThings.layers.Add(new PresentLayer(RendererLayer.Geometry, BlendingMode.Alpha, 1f, true));
dragThings.layers.Add(new PresentLayer(RendererLayer.Geometry, BlendingMode.Alpha, 0.5f, true));
dragThings.layers.Add(new PresentLayer(RendererLayer.Overlay, BlendingMode.Alpha, 1f, true));
}
}

View file

@ -348,6 +348,18 @@ deleteitem
allowscroll = true;
}
//mxd
dissolveitem
{
title = "Dissolve Item";
category = "edit";
description = "Deletes the highlighted or selected items in classic modes, trying to preserve the rest of the map geometry intact.";
allowkeys = true;
allowmouse = true;
allowscroll = true;
//default = 131192;
}
gridsetup
{
title = "Grid Setup";
@ -419,6 +431,17 @@ toggleautomerge
allowscroll = true;
}
//mxd
toggleautoclearsidetextures
{
title = "Auto Clear Sidedef Textures";
category = "edit";
description = "Toggles automatic removal of sidedef textures when floor or ceiling height is changed or when geometry is drawn, copied or pasted.";
allowkeys = true;
allowmouse = true;
allowscroll = true;
}
clearselection
{
title = "Clear Selection";
@ -941,7 +964,7 @@ visualselect
{
title = "Select";
category = "visual";
description = "Selects the highlighted item. Hold Shift to select adjacent surfaces with the same texture. Hold Ctrl to adjacent surfaces with the same height";
description = "Selects the highlighted item. Hold Shift to select adjacent surfaces with the same texture. Hold Ctrl to select adjacent surfaces with the same height";
allowkeys = true;
allowmouse = true;
allowscroll = false;

Binary file not shown.

After

Width:  |  Height:  |  Size: 760 B

View file

@ -531,6 +531,8 @@ namespace CodeImp.DoomBuilder.Windows
// This is called when an editing mode item is checked or unchecked
private void listmodes_ItemChecked(object sender, ItemCheckedEventArgs e)
{
if(preventchanges) return; //mxd
// Leave when no configuration selected
if(configinfo == null) return;

View file

@ -38,14 +38,6 @@ namespace CodeImp.DoomBuilder.Windows
System.Windows.Forms.ToolStripSeparator toolStripSeparator2;
System.Windows.Forms.ToolStripSeparator toolStripSeparator3;
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainForm));
System.Windows.Forms.ListViewItem listViewItem9 = new System.Windows.Forms.ListViewItem("Press Use to use");
System.Windows.Forms.ListViewItem listViewItem10 = new System.Windows.Forms.ListViewItem("To look around, look around");
System.Windows.Forms.ListViewItem listViewItem11 = new System.Windows.Forms.ListViewItem("Another usefull hint");
System.Windows.Forms.ListViewItem listViewItem12 = new System.Windows.Forms.ListViewItem("Yet another usefull hint");
System.Windows.Forms.ListViewItem listViewItem13 = new System.Windows.Forms.ListViewItem("Yet another usefull hint");
System.Windows.Forms.ListViewItem listViewItem14 = new System.Windows.Forms.ListViewItem("Yet another usefull hint");
System.Windows.Forms.ListViewItem listViewItem15 = new System.Windows.Forms.ListViewItem("Yet another usefull hint");
System.Windows.Forms.ListViewItem listViewItem16 = new System.Windows.Forms.ListViewItem("Yet another usefull hint");
this.seperatorfileopen = new System.Windows.Forms.ToolStripSeparator();
this.seperatorfilerecent = new System.Windows.Forms.ToolStripSeparator();
this.seperatoreditgrid = new System.Windows.Forms.ToolStripSeparator();
@ -79,6 +71,7 @@ namespace CodeImp.DoomBuilder.Windows
this.itempastespecial = new System.Windows.Forms.ToolStripMenuItem();
this.itemsnaptogrid = new System.Windows.Forms.ToolStripMenuItem();
this.itemautomerge = new System.Windows.Forms.ToolStripMenuItem();
this.itemautoclearsidetextures = new System.Windows.Forms.ToolStripMenuItem();
this.seperatoreditgeometry = new System.Windows.Forms.ToolStripSeparator();
this.itemgridinc = new System.Windows.Forms.ToolStripMenuItem();
this.itemgriddec = new System.Windows.Forms.ToolStripMenuItem();
@ -239,10 +232,9 @@ namespace CodeImp.DoomBuilder.Windows
this.yposlabel = new System.Windows.Forms.ToolStripStatusLabel();
this.warnsLabel = new System.Windows.Forms.ToolStripStatusLabel();
this.panelinfo = new System.Windows.Forms.Panel();
this.hintIcon = new System.Windows.Forms.PictureBox();
this.hints = new System.Windows.Forms.ListView();
this.heightpanel1 = new System.Windows.Forms.Panel();
this.labelcollapsedinfo = new System.Windows.Forms.Label();
this.modename = new System.Windows.Forms.Label();
this.buttontoggleinfo = new System.Windows.Forms.Button();
this.vertexinfo = new CodeImp.DoomBuilder.Controls.VertexInfoPanel();
this.linedefinfo = new CodeImp.DoomBuilder.Controls.LinedefInfoPanel();
@ -256,6 +248,7 @@ namespace CodeImp.DoomBuilder.Windows
this.dockersspace = new System.Windows.Forms.Panel();
this.dockerspanel = new CodeImp.DoomBuilder.Controls.DockersControl();
this.dockerscollapser = new System.Windows.Forms.Timer(this.components);
this.buttonautoclearsidetextures = new System.Windows.Forms.ToolStripButton();
toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();
toolStripSeparator9 = new System.Windows.Forms.ToolStripSeparator();
toolStripSeparator12 = new System.Windows.Forms.ToolStripSeparator();
@ -267,7 +260,6 @@ namespace CodeImp.DoomBuilder.Windows
this.toolbarContextMenu.SuspendLayout();
this.statusbar.SuspendLayout();
this.panelinfo.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.hintIcon)).BeginInit();
this.SuspendLayout();
//
// toolStripSeparator1
@ -320,13 +312,13 @@ namespace CodeImp.DoomBuilder.Windows
//
this.seperatoreditgrid.Margin = new System.Windows.Forms.Padding(0, 3, 0, 3);
this.seperatoreditgrid.Name = "seperatoreditgrid";
this.seperatoreditgrid.Size = new System.Drawing.Size(211, 6);
this.seperatoreditgrid.Size = new System.Drawing.Size(216, 6);
//
// seperatoreditcopypaste
//
this.seperatoreditcopypaste.Margin = new System.Windows.Forms.Padding(0, 3, 0, 3);
this.seperatoreditcopypaste.Name = "seperatoreditcopypaste";
this.seperatoreditcopypaste.Size = new System.Drawing.Size(211, 6);
this.seperatoreditcopypaste.Size = new System.Drawing.Size(216, 6);
//
// seperatorfile
//
@ -499,6 +491,7 @@ namespace CodeImp.DoomBuilder.Windows
this.seperatoreditcopypaste,
this.itemsnaptogrid,
this.itemautomerge,
this.itemautoclearsidetextures,
this.seperatoreditgeometry,
this.itemgridinc,
this.itemgriddec,
@ -519,7 +512,7 @@ namespace CodeImp.DoomBuilder.Windows
//
this.itemundo.Image = global::CodeImp.DoomBuilder.Properties.Resources.Undo;
this.itemundo.Name = "itemundo";
this.itemundo.Size = new System.Drawing.Size(214, 22);
this.itemundo.Size = new System.Drawing.Size(219, 22);
this.itemundo.Tag = "builder_undo";
this.itemundo.Text = "&Undo";
this.itemundo.Click += new System.EventHandler(this.InvokeTaggedAction);
@ -528,7 +521,7 @@ namespace CodeImp.DoomBuilder.Windows
//
this.itemredo.Image = global::CodeImp.DoomBuilder.Properties.Resources.Redo;
this.itemredo.Name = "itemredo";
this.itemredo.Size = new System.Drawing.Size(214, 22);
this.itemredo.Size = new System.Drawing.Size(219, 22);
this.itemredo.Tag = "builder_redo";
this.itemredo.Text = "&Redo";
this.itemredo.Click += new System.EventHandler(this.InvokeTaggedAction);
@ -537,13 +530,13 @@ namespace CodeImp.DoomBuilder.Windows
//
this.seperatoreditundo.Margin = new System.Windows.Forms.Padding(0, 3, 0, 3);
this.seperatoreditundo.Name = "seperatoreditundo";
this.seperatoreditundo.Size = new System.Drawing.Size(211, 6);
this.seperatoreditundo.Size = new System.Drawing.Size(216, 6);
//
// itemcut
//
this.itemcut.Image = global::CodeImp.DoomBuilder.Properties.Resources.Cut;
this.itemcut.Name = "itemcut";
this.itemcut.Size = new System.Drawing.Size(214, 22);
this.itemcut.Size = new System.Drawing.Size(219, 22);
this.itemcut.Tag = "builder_cutselection";
this.itemcut.Text = "Cu&t";
this.itemcut.Click += new System.EventHandler(this.InvokeTaggedAction);
@ -552,7 +545,7 @@ namespace CodeImp.DoomBuilder.Windows
//
this.itemcopy.Image = global::CodeImp.DoomBuilder.Properties.Resources.Copy;
this.itemcopy.Name = "itemcopy";
this.itemcopy.Size = new System.Drawing.Size(214, 22);
this.itemcopy.Size = new System.Drawing.Size(219, 22);
this.itemcopy.Tag = "builder_copyselection";
this.itemcopy.Text = "&Copy";
this.itemcopy.Click += new System.EventHandler(this.InvokeTaggedAction);
@ -561,7 +554,7 @@ namespace CodeImp.DoomBuilder.Windows
//
this.itempaste.Image = global::CodeImp.DoomBuilder.Properties.Resources.Paste;
this.itempaste.Name = "itempaste";
this.itempaste.Size = new System.Drawing.Size(214, 22);
this.itempaste.Size = new System.Drawing.Size(219, 22);
this.itempaste.Tag = "builder_pasteselection";
this.itempaste.Text = "&Paste";
this.itempaste.Click += new System.EventHandler(this.InvokeTaggedAction);
@ -570,7 +563,7 @@ namespace CodeImp.DoomBuilder.Windows
//
this.itempastespecial.Image = global::CodeImp.DoomBuilder.Properties.Resources.PasteSpecial;
this.itempastespecial.Name = "itempastespecial";
this.itempastespecial.Size = new System.Drawing.Size(214, 22);
this.itempastespecial.Size = new System.Drawing.Size(219, 22);
this.itempastespecial.Tag = "builder_pasteselectionspecial";
this.itempastespecial.Text = "Paste Special...";
this.itempastespecial.Click += new System.EventHandler(this.InvokeTaggedAction);
@ -581,7 +574,7 @@ namespace CodeImp.DoomBuilder.Windows
this.itemsnaptogrid.CheckState = System.Windows.Forms.CheckState.Checked;
this.itemsnaptogrid.Image = global::CodeImp.DoomBuilder.Properties.Resources.Grid4;
this.itemsnaptogrid.Name = "itemsnaptogrid";
this.itemsnaptogrid.Size = new System.Drawing.Size(214, 22);
this.itemsnaptogrid.Size = new System.Drawing.Size(219, 22);
this.itemsnaptogrid.Tag = "builder_togglesnap";
this.itemsnaptogrid.Text = "&Snap to Grid";
this.itemsnaptogrid.Click += new System.EventHandler(this.InvokeTaggedAction);
@ -592,21 +585,32 @@ namespace CodeImp.DoomBuilder.Windows
this.itemautomerge.CheckState = System.Windows.Forms.CheckState.Checked;
this.itemautomerge.Image = global::CodeImp.DoomBuilder.Properties.Resources.mergegeometry2;
this.itemautomerge.Name = "itemautomerge";
this.itemautomerge.Size = new System.Drawing.Size(214, 22);
this.itemautomerge.Size = new System.Drawing.Size(219, 22);
this.itemautomerge.Tag = "builder_toggleautomerge";
this.itemautomerge.Text = "&Merge Geometry";
this.itemautomerge.Click += new System.EventHandler(this.InvokeTaggedAction);
//
// itemautoclearsidetextures
//
this.itemautoclearsidetextures.Checked = true;
this.itemautoclearsidetextures.CheckState = System.Windows.Forms.CheckState.Checked;
this.itemautoclearsidetextures.Image = global::CodeImp.DoomBuilder.Properties.Resources.ClearTextures;
this.itemautoclearsidetextures.Name = "itemautoclearsidetextures";
this.itemautoclearsidetextures.Size = new System.Drawing.Size(219, 22);
this.itemautoclearsidetextures.Tag = "builder_toggleautoclearsidetextures";
this.itemautoclearsidetextures.Text = "&Auto Clear Sidedef Textures";
this.itemautoclearsidetextures.Click += new System.EventHandler(this.InvokeTaggedAction);
//
// seperatoreditgeometry
//
this.seperatoreditgeometry.Margin = new System.Windows.Forms.Padding(0, 3, 0, 3);
this.seperatoreditgeometry.Name = "seperatoreditgeometry";
this.seperatoreditgeometry.Size = new System.Drawing.Size(211, 6);
this.seperatoreditgeometry.Size = new System.Drawing.Size(216, 6);
//
// itemgridinc
//
this.itemgridinc.Name = "itemgridinc";
this.itemgridinc.Size = new System.Drawing.Size(214, 22);
this.itemgridinc.Size = new System.Drawing.Size(219, 22);
this.itemgridinc.Tag = "builder_griddec";
this.itemgridinc.Text = "&Increase Grid";
this.itemgridinc.Click += new System.EventHandler(this.InvokeTaggedAction);
@ -614,7 +618,7 @@ namespace CodeImp.DoomBuilder.Windows
// itemgriddec
//
this.itemgriddec.Name = "itemgriddec";
this.itemgriddec.Size = new System.Drawing.Size(214, 22);
this.itemgriddec.Size = new System.Drawing.Size(219, 22);
this.itemgriddec.Tag = "builder_gridinc";
this.itemgriddec.Text = "&Decrease Grid";
this.itemgriddec.Click += new System.EventHandler(this.InvokeTaggedAction);
@ -623,7 +627,7 @@ namespace CodeImp.DoomBuilder.Windows
//
this.itemgridsetup.Image = global::CodeImp.DoomBuilder.Properties.Resources.Grid2;
this.itemgridsetup.Name = "itemgridsetup";
this.itemgridsetup.Size = new System.Drawing.Size(214, 22);
this.itemgridsetup.Size = new System.Drawing.Size(219, 22);
this.itemgridsetup.Tag = "builder_gridsetup";
this.itemgridsetup.Text = "&Grid and Backdrop Setup...";
this.itemgridsetup.Click += new System.EventHandler(this.InvokeTaggedAction);
@ -631,7 +635,7 @@ namespace CodeImp.DoomBuilder.Windows
// toolStripSeparator5
//
this.toolStripSeparator5.Name = "toolStripSeparator5";
this.toolStripSeparator5.Size = new System.Drawing.Size(211, 6);
this.toolStripSeparator5.Size = new System.Drawing.Size(216, 6);
//
// addToGroup
//
@ -647,7 +651,7 @@ namespace CodeImp.DoomBuilder.Windows
this.addGroup9,
this.addGroup10});
this.addToGroup.Name = "addToGroup";
this.addToGroup.Size = new System.Drawing.Size(214, 22);
this.addToGroup.Size = new System.Drawing.Size(219, 22);
this.addToGroup.Text = "Add Selection to Group";
this.addToGroup.DropDownOpening += new System.EventHandler(this.addToGroup_DropDownOpening);
//
@ -745,7 +749,7 @@ namespace CodeImp.DoomBuilder.Windows
this.selectGroup9,
this.selectGroup10});
this.selectGroup.Name = "selectGroup";
this.selectGroup.Size = new System.Drawing.Size(214, 22);
this.selectGroup.Size = new System.Drawing.Size(219, 22);
this.selectGroup.Text = "Select Group";
this.selectGroup.DropDownOpening += new System.EventHandler(this.selectGroup_DropDownOpening);
//
@ -843,7 +847,7 @@ namespace CodeImp.DoomBuilder.Windows
this.clearGroup9,
this.clearGroup10});
this.clearGroup.Name = "clearGroup";
this.clearGroup.Size = new System.Drawing.Size(214, 22);
this.clearGroup.Size = new System.Drawing.Size(219, 22);
this.clearGroup.Text = "Clear Group";
this.clearGroup.DropDownOpening += new System.EventHandler(this.selectGroup_DropDownOpening);
//
@ -931,7 +935,7 @@ namespace CodeImp.DoomBuilder.Windows
//
this.itemmapoptions.Image = global::CodeImp.DoomBuilder.Properties.Resources.Properties;
this.itemmapoptions.Name = "itemmapoptions";
this.itemmapoptions.Size = new System.Drawing.Size(214, 22);
this.itemmapoptions.Size = new System.Drawing.Size(219, 22);
this.itemmapoptions.Tag = "builder_mapoptions";
this.itemmapoptions.Text = "Map &Options....";
this.itemmapoptions.Click += new System.EventHandler(this.InvokeTaggedAction);
@ -940,7 +944,7 @@ namespace CodeImp.DoomBuilder.Windows
//
this.itemviewusedtags.Image = global::CodeImp.DoomBuilder.Properties.Resources.TagStatistics;
this.itemviewusedtags.Name = "itemviewusedtags";
this.itemviewusedtags.Size = new System.Drawing.Size(214, 22);
this.itemviewusedtags.Size = new System.Drawing.Size(219, 22);
this.itemviewusedtags.Tag = "builder_viewusedtags";
this.itemviewusedtags.Text = "View Used Tags...";
this.itemviewusedtags.Click += new System.EventHandler(this.InvokeTaggedAction);
@ -1368,6 +1372,7 @@ namespace CodeImp.DoomBuilder.Windows
this.seperatorviews,
this.buttonsnaptogrid,
this.buttonautomerge,
this.buttonautoclearsidetextures,
this.seperatorgeometry,
this.buttontogglefx,
this.buttontoggledynlight,
@ -2132,10 +2137,9 @@ namespace CodeImp.DoomBuilder.Windows
//
// panelinfo
//
this.panelinfo.Controls.Add(this.hintIcon);
this.panelinfo.Controls.Add(this.hints);
this.panelinfo.Controls.Add(this.heightpanel1);
this.panelinfo.Controls.Add(this.labelcollapsedinfo);
this.panelinfo.Controls.Add(this.modename);
this.panelinfo.Controls.Add(this.buttontoggleinfo);
this.panelinfo.Controls.Add(this.vertexinfo);
this.panelinfo.Controls.Add(this.linedefinfo);
@ -2147,42 +2151,6 @@ namespace CodeImp.DoomBuilder.Windows
this.panelinfo.Size = new System.Drawing.Size(986, 106);
this.panelinfo.TabIndex = 4;
//
// hintIcon
//
this.hintIcon.Location = new System.Drawing.Point(4, 20);
this.hintIcon.Name = "hintIcon";
this.hintIcon.Size = new System.Drawing.Size(16, 16);
this.hintIcon.TabIndex = 9;
this.hintIcon.TabStop = false;
this.hintIcon.Visible = false;
//
// hints
//
this.hints.BackColor = System.Drawing.SystemColors.Control;
this.hints.BorderStyle = System.Windows.Forms.BorderStyle.None;
this.hints.Font = new System.Drawing.Font("Verdana", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.hints.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.None;
this.hints.Items.AddRange(new System.Windows.Forms.ListViewItem[] {
listViewItem9,
listViewItem10,
listViewItem11,
listViewItem12,
listViewItem13,
listViewItem14,
listViewItem15,
listViewItem16});
this.hints.LabelWrap = false;
this.hints.Location = new System.Drawing.Point(20, 21);
this.hints.MultiSelect = false;
this.hints.Name = "hints";
this.hints.Scrollable = false;
this.hints.ShowGroups = false;
this.hints.Size = new System.Drawing.Size(946, 110);
this.hints.TabIndex = 8;
this.hints.UseCompatibleStateImageBehavior = false;
this.hints.View = System.Windows.Forms.View.List;
this.hints.Visible = false;
//
// heightpanel1
//
this.heightpanel1.BackColor = System.Drawing.Color.Navy;
@ -2196,14 +2164,28 @@ namespace CodeImp.DoomBuilder.Windows
// labelcollapsedinfo
//
this.labelcollapsedinfo.AutoSize = true;
this.labelcollapsedinfo.Font = new System.Drawing.Font("Verdana", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.labelcollapsedinfo.Font = new System.Drawing.Font("Verdana", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.labelcollapsedinfo.Location = new System.Drawing.Point(2, 2);
this.labelcollapsedinfo.Name = "labelcollapsedinfo";
this.labelcollapsedinfo.Size = new System.Drawing.Size(155, 13);
this.labelcollapsedinfo.Size = new System.Drawing.Size(137, 13);
this.labelcollapsedinfo.TabIndex = 6;
this.labelcollapsedinfo.Text = "Collapsed Descriptions";
this.labelcollapsedinfo.Visible = false;
//
// modename
//
this.modename.AutoSize = true;
this.modename.Font = new System.Drawing.Font("Verdana", 36F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.modename.ForeColor = System.Drawing.SystemColors.GrayText;
this.modename.Location = new System.Drawing.Point(12, 20);
this.modename.Name = "modename";
this.modename.Size = new System.Drawing.Size(244, 59);
this.modename.TabIndex = 8;
this.modename.Text = "Vertices";
this.modename.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
this.modename.UseMnemonic = false;
this.modename.Visible = false;
//
// buttontoggleinfo
//
this.buttontoggleinfo.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
@ -2328,6 +2310,19 @@ namespace CodeImp.DoomBuilder.Windows
this.dockerscollapser.Interval = 200;
this.dockerscollapser.Tick += new System.EventHandler(this.dockerscollapser_Tick);
//
// buttonautoclearsidetextures
//
this.buttonautoclearsidetextures.Checked = true;
this.buttonautoclearsidetextures.CheckState = System.Windows.Forms.CheckState.Checked;
this.buttonautoclearsidetextures.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
this.buttonautoclearsidetextures.Image = global::CodeImp.DoomBuilder.Properties.Resources.ClearTextures;
this.buttonautoclearsidetextures.ImageTransparentColor = System.Drawing.Color.Magenta;
this.buttonautoclearsidetextures.Name = "buttonautoclearsidetextures";
this.buttonautoclearsidetextures.Size = new System.Drawing.Size(23, 22);
this.buttonautoclearsidetextures.Tag = "builder_toggleautoclearsidetextures";
this.buttonautoclearsidetextures.Text = "Auto Clear Sidedef Textures";
this.buttonautoclearsidetextures.Click += new System.EventHandler(this.InvokeTaggedAction);
//
// MainForm
//
this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F);
@ -2346,7 +2341,7 @@ namespace CodeImp.DoomBuilder.Windows
this.MainMenuStrip = this.menumain;
this.Name = "MainForm";
this.StartPosition = System.Windows.Forms.FormStartPosition.Manual;
this.Text = "GZDoomBuilder";
this.Text = "GZDoom Builder";
this.Deactivate += new System.EventHandler(this.MainForm_Deactivate);
this.Load += new System.EventHandler(this.MainForm_Load);
this.Shown += new System.EventHandler(this.MainForm_Shown);
@ -2366,7 +2361,6 @@ namespace CodeImp.DoomBuilder.Windows
this.statusbar.PerformLayout();
this.panelinfo.ResumeLayout(false);
this.panelinfo.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.hintIcon)).EndInit();
this.ResumeLayout(false);
this.PerformLayout();
@ -2582,7 +2576,8 @@ namespace CodeImp.DoomBuilder.Windows
private System.Windows.Forms.ToolStripMenuItem itemopenmapincurwad;
private System.Windows.Forms.ToolStripMenuItem itemgrid1;
private System.Windows.Forms.ToolStripMenuItem itemzoom400;
private System.Windows.Forms.ListView hints;
private System.Windows.Forms.PictureBox hintIcon;
private System.Windows.Forms.Label modename;
private System.Windows.Forms.ToolStripMenuItem itemautoclearsidetextures;
private System.Windows.Forms.ToolStripButton buttonautoclearsidetextures;
}
}

View file

@ -131,7 +131,6 @@ namespace CodeImp.DoomBuilder.Windows
// Last info on panels
private object lastinfoobject;
private string currentModeName; //mxd
// Recent files
private ToolStripMenuItem[] recentitems;
@ -166,6 +165,10 @@ namespace CodeImp.DoomBuilder.Windows
// Updating
private int lockupdatecount;
//mxd. Hints
private Docker hintsDocker;
private HintsPanel hintsPanel;
//mxd
private System.Timers.Timer blinkTimer;
@ -200,7 +203,6 @@ namespace CodeImp.DoomBuilder.Windows
editmodeitems = new List<ToolStripItem>();
labelcollapsedinfo.Text = "";
display.Dock = DockStyle.Fill;
hintIcon.Image = Resources.Lightbulb; //mxd
// Fetch pointer
windowptr = base.Handle;
@ -250,6 +252,10 @@ namespace CodeImp.DoomBuilder.Windows
blinkTimer = new System.Timers.Timer();
blinkTimer.Interval = 500;
blinkTimer.Elapsed += blinkTimer_Elapsed;
//mxd. Hints
hintsPanel = new HintsPanel();
hintsDocker = new Docker("hints", "Help", hintsPanel);
}
#endregion
@ -1121,6 +1127,7 @@ namespace CodeImp.DoomBuilder.Windows
{
General.Plugins.OnEditMouseEnter(e);
General.Editing.Mode.OnMouseEnter(e);
if(!General.Map.IsScriptsWindowOpen) display.Focus(); //mxd
}
}
@ -1741,6 +1748,7 @@ namespace CodeImp.DoomBuilder.Windows
buttonviewnormal.Visible = General.Settings.ToolbarViewModes;
buttonsnaptogrid.Visible = General.Settings.ToolbarGeometry;
buttonautomerge.Visible = General.Settings.ToolbarGeometry;
buttonautoclearsidetextures.Visible = General.Settings.ToolbarGeometry; //mxd
buttontest.Visible = General.Settings.ToolbarTesting;
//mxd
@ -2350,6 +2358,8 @@ namespace CodeImp.DoomBuilder.Windows
itemmapoptions.Enabled = (General.Map != null);
itemsnaptogrid.Enabled = (General.Map != null);
itemautomerge.Enabled = (General.Map != null);
itemautoclearsidetextures.Enabled = (General.Map != null); //mxd
itemautoclearsidetextures.Checked = General.Settings.AutoClearSidedefTextures; //mxd
itemgridsetup.Enabled = (General.Map != null);
itemgridinc.Enabled = (General.Map != null);
itemgriddec.Enabled = (General.Map != null);
@ -2377,6 +2387,8 @@ namespace CodeImp.DoomBuilder.Windows
buttonredo.ToolTipText = itemredo.Text;
buttonsnaptogrid.Enabled = (General.Map != null);
buttonautomerge.Enabled = (General.Map != null);
buttonautoclearsidetextures.Enabled = (General.Map != null); //mxd
buttonautoclearsidetextures.Checked = itemautoclearsidetextures.Checked; //mxd
buttoncut.Enabled = itemcut.Enabled;
buttoncopy.Enabled = itemcopy.Enabled;
buttonpaste.Enabled = itempaste.Enabled;
@ -2416,8 +2428,7 @@ namespace CodeImp.DoomBuilder.Windows
{
buttonsnaptogrid.Checked = !buttonsnaptogrid.Checked;
itemsnaptogrid.Checked = buttonsnaptogrid.Checked;
string onoff = buttonsnaptogrid.Checked ? "ON" : "OFF";
DisplayStatus(StatusType.Action, "Snap to grid is now " + onoff + " by default.");
DisplayStatus(StatusType.Action, "Snap to grid is " + (buttonsnaptogrid.Checked ? "ENABLED" : "DISABLED"));
}
// Action to toggle auto merge
@ -2426,14 +2437,21 @@ namespace CodeImp.DoomBuilder.Windows
{
buttonautomerge.Checked = !buttonautomerge.Checked;
itemautomerge.Checked = buttonautomerge.Checked;
string onoff = buttonautomerge.Checked ? "ON" : "OFF";
DisplayStatus(StatusType.Action, "Snap to geometry is now " + onoff + " by default.");
DisplayStatus(StatusType.Action, "Snap to geometry is " + (buttonautomerge.Checked ? "ENABLED" : "DISABLED"));
}
//mxd
[BeginAction("toggleautoclearsidetextures")]
internal void ToggleAutoClearSideTextures() {
buttonautoclearsidetextures.Checked = !buttonautoclearsidetextures.Checked;
itemautoclearsidetextures.Checked = buttonautoclearsidetextures.Checked;
General.Settings.AutoClearSidedefTextures = buttonautoclearsidetextures.Checked;
DisplayStatus(StatusType.Action, "Auto removal of unused sidedef textures is " + (buttonautoclearsidetextures.Checked ? "ENABLED" : "DISABLED"));
}
//mxd
[BeginAction("viewusedtags")]
internal void ViewUsedTags() {
//ShowTagStatistics();
TagStatisticsForm f = new TagStatisticsForm();
f.ShowDialog(this);
}
@ -2797,8 +2815,7 @@ namespace CodeImp.DoomBuilder.Windows
if(vertexinfo.Visible) vertexinfo.Hide();
if(sectorinfo.Visible) sectorinfo.Hide();
if(thinginfo.Visible) thinginfo.Hide();
hints.Visible = false; //mxd
hintIcon.Visible = false; //mxd
modename.Visible = false;
labelcollapsedinfo.Visible = true;
itemtoggleinfo.Checked = false;
}
@ -2827,9 +2844,12 @@ namespace CodeImp.DoomBuilder.Windows
// This displays the current mode name
internal void DisplayModeName(string name)
{
currentModeName = name; //mxd
labelcollapsedinfo.Text = name;
labelcollapsedinfo.Refresh();
if(lastinfoobject == null) {
labelcollapsedinfo.Text = name;
labelcollapsedinfo.Refresh();
}
modename.Text = name;
modename.Refresh();
}
// This hides all info panels
@ -2841,14 +2861,10 @@ namespace CodeImp.DoomBuilder.Windows
if(vertexinfo.Visible) vertexinfo.Hide();
if(sectorinfo.Visible) sectorinfo.Hide();
if(thinginfo.Visible) thinginfo.Hide();
labelcollapsedinfo.Text = currentModeName;
labelcollapsedinfo.Visible = true;
labelcollapsedinfo.Text = modename.Text;
labelcollapsedinfo.Refresh();
//mxd. Show hints?
bool showHints = ((General.Map != null) && IsInfoPanelExpanded);
hints.Visible = showHints;
hintIcon.Visible = showHints && hints.Items.Count > 0;
modename.Visible = ((General.Map != null) && IsInfoPanelExpanded);
modename.Refresh();
//mxd. let the plugins know
General.Plugins.OnHighlightLost();
@ -2869,12 +2885,7 @@ namespace CodeImp.DoomBuilder.Windows
//mxd
public void ShowEditModeHints(string[] hintsText) {
if (hintsText != null) {
hintIcon.Visible = true;
hints.BeginUpdate();
hints.Items.Clear();
foreach (string s in hintsText) hints.Items.Add(s);
hints.EndUpdate();
hintsPanel.SetHints(hintsText);
} else {
ClearEditModeHints();
}
@ -2882,8 +2893,17 @@ namespace CodeImp.DoomBuilder.Windows
//mxd
public void ClearEditModeHints() {
hintIcon.Visible = false;
hints.Items.Clear();
hintsPanel.ClearHints();
}
//mxd
internal void AddHintsDocker() {
dockerspanel.Add(hintsDocker);
}
//mxd
internal void RemoveHintsDocker() {
dockerspanel.Remove(hintsDocker);
}
// Show linedef info
@ -2896,27 +2916,22 @@ namespace CodeImp.DoomBuilder.Windows
}
lastinfoobject = l;
hints.Visible = false; //mxd
hintIcon.Visible = false; //mxd
modename.Visible = false;
if(vertexinfo.Visible) vertexinfo.Hide();
if(sectorinfo.Visible) sectorinfo.Hide();
if(thinginfo.Visible) thinginfo.Hide();
if (IsInfoPanelExpanded) {
linedefinfo.ShowInfo(l);
labelcollapsedinfo.Visible = false; //mxd
} else {
// Show info on collapsed label
labelcollapsedinfo.Visible = true; //mxd
if(General.Map.Config.LinedefActions.ContainsKey(l.Action)) {
LinedefActionInfo act = General.Map.Config.LinedefActions[l.Action];
labelcollapsedinfo.Text = act.ToString();
} else if(l.Action == 0)
labelcollapsedinfo.Text = l.Action.ToString() + " - None";
else
labelcollapsedinfo.Text = l.Action.ToString() + " - Unknown";
if(IsInfoPanelExpanded) linedefinfo.ShowInfo(l);
labelcollapsedinfo.Refresh();
}
// Show info on collapsed label
if(General.Map.Config.LinedefActions.ContainsKey(l.Action)) {
LinedefActionInfo act = General.Map.Config.LinedefActions[l.Action];
labelcollapsedinfo.Text = act.ToString();
} else if(l.Action == 0)
labelcollapsedinfo.Text = l.Action.ToString() + " - None";
else
labelcollapsedinfo.Text = l.Action.ToString() + " - Unknown";
labelcollapsedinfo.Refresh();
//mxd. let the plugins know
General.Plugins.OnHighlightLinedef(l);
@ -2930,20 +2945,15 @@ namespace CodeImp.DoomBuilder.Windows
}
lastinfoobject = v;
hints.Visible = false; //mxd
hintIcon.Visible = false; //mxd
modename.Visible = false;
if (linedefinfo.Visible) linedefinfo.Hide();
if (sectorinfo.Visible) sectorinfo.Hide();
if (thinginfo.Visible) thinginfo.Hide();
if (IsInfoPanelExpanded) {
vertexinfo.ShowInfo(v);
labelcollapsedinfo.Visible = false; //mxd
} else {
// Show info on collapsed label
labelcollapsedinfo.Visible = true; //mxd
labelcollapsedinfo.Text = v.Position.x.ToString("0.##") + ", " + v.Position.y.ToString("0.##");
labelcollapsedinfo.Refresh();
}
if (IsInfoPanelExpanded) vertexinfo.ShowInfo(v);
// Show info on collapsed label
labelcollapsedinfo.Text = v.Position.x.ToString("0.##") + ", " + v.Position.y.ToString("0.##");
labelcollapsedinfo.Refresh();
//mxd. let the plugins know
General.Plugins.OnHighlightVertex(v);
@ -2957,26 +2967,21 @@ namespace CodeImp.DoomBuilder.Windows
}
lastinfoobject = s;
hints.Visible = false;
hintIcon.Visible = false; //mxd
modename.Visible = false;
if (linedefinfo.Visible) linedefinfo.Hide();
if (vertexinfo.Visible) vertexinfo.Hide();
if (thinginfo.Visible) thinginfo.Hide();
if (IsInfoPanelExpanded) {
sectorinfo.ShowInfo(s);
labelcollapsedinfo.Visible = false; //mxd
} else {
// Show info on collapsed label
labelcollapsedinfo.Visible = true; //mxd
if (General.Map.Config.SectorEffects.ContainsKey(s.Effect))
labelcollapsedinfo.Text = General.Map.Config.SectorEffects[s.Effect].ToString();
else if (s.Effect == 0)
labelcollapsedinfo.Text = s.Effect.ToString() + " - Normal";
else
labelcollapsedinfo.Text = s.Effect.ToString() + " - Unknown";
if(IsInfoPanelExpanded) sectorinfo.ShowInfo(s);
labelcollapsedinfo.Refresh();
}
// Show info on collapsed label
if(General.Map.Config.SectorEffects.ContainsKey(s.Effect))
labelcollapsedinfo.Text = General.Map.Config.SectorEffects[s.Effect].ToString();
else if(s.Effect == 0)
labelcollapsedinfo.Text = s.Effect.ToString() + " - Normal";
else
labelcollapsedinfo.Text = s.Effect.ToString() + " - Unknown";
labelcollapsedinfo.Refresh();
//mxd. let the plugins know
General.Plugins.OnHighlightSector(s);
@ -2992,21 +2997,16 @@ namespace CodeImp.DoomBuilder.Windows
}
lastinfoobject = t;
hints.Visible = false;
hintIcon.Visible = false; //mxd
modename.Visible = false;
if(linedefinfo.Visible) linedefinfo.Hide();
if(vertexinfo.Visible) vertexinfo.Hide();
if(sectorinfo.Visible) sectorinfo.Hide();
if (IsInfoPanelExpanded) {
thinginfo.ShowInfo(t);
labelcollapsedinfo.Visible = false; //mxd
} else {
// Show info on collapsed label
labelcollapsedinfo.Visible = true; //mxd
ThingTypeInfo ti = General.Map.Data.GetThingInfo(t.Type);
labelcollapsedinfo.Text = t.Type + " - " + ti.Title;
labelcollapsedinfo.Refresh();
}
if(IsInfoPanelExpanded) thinginfo.ShowInfo(t);
// Show info on collapsed label
ThingTypeInfo ti = General.Map.Data.GetThingInfo(t.Type);
labelcollapsedinfo.Text = t.Type + " - " + ti.Title;
labelcollapsedinfo.Refresh();
//mxd. let the plugins know
General.Plugins.OnHighlightThing(t);

View file

@ -183,22 +183,7 @@
<metadata name="labelcollapsedinfo.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="buttontoggleinfo.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="linedefinfo.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="thinginfo.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="sectorinfo.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="heightpanel1.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="labelcollapsedinfo.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<metadata name="modename.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="buttontoggleinfo.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">

View file

@ -1,145 +1,145 @@
<?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.
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.
-->
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: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>
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
<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>
<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>
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AACQWzEBkFsxRJBbMWiQWzGBkFsxnpBbMbqQWzHYkFsx9ZVhOf+aaUH/o3RP/62CX/+QWzG4kFsxCgAA
AAAAAAAAlF8zKriQbf/WuqP/38az/+fUw//u39P/9eri//v07//9+vb///79//vr3//77+b/wZ2A/5Rf
MzAAAAAAAAAAAJlkNknHpIX////////////////////////+/P/++/f//vfx//728f/krob/+ujb/86v
lf+ZZDZLAAAAAAAAAACeaTkdnmk57bSFWf/ZpXv/2J5v/9ebav/YlmP/1pJd/9SPWf/Tjlf/4p1p//rj
0f/Yu6L/nmk5YQAAAAAAAAAApG88AaRvPHLVroz//fDl//bGof/2zqz/+NS0//bYu//127//997D//rk
zP/99ez/4s66/6RvPH0AAAAAAAAAAAAAAACqdUAGt4ZW//7+/f/ozrT/z7ae/861n//OtZ//zreg/9a7
pP/63MP//eve/+zczf+qdUCgAAAAAAAAAAAAAAAAsXtDA7mGUv/+/Pn/99q9/+3Rtf/u0rf/8tS8//LV
u//z173/+dzC//vn1P/17eL/sXtDywAAAAAAAAAAAAAAAAAAAAC5hUv//vv3/+/Tuf/QuaD/z7ig/8+3
of/PuKD/z7ig//HWvP/74sv//Pn1/7eCR/cAAAAAAAAAAAAAAAAAAAAAvYhL8/z28P/538f/8dW3//LV
uP/y1Lr/8ta8//LWu//43MP/++DJ///8+v/BjVP/AAAAAAAAAAAAAAAAAAAAAMSOTrr159j/+eTR/9K4
n//SuZ//07mh/9O7o//Tu6P/8ta+//vhyP///fv/yJRX/8SOTgEAAAAAAAAAAAAAAADKlFKJ8NnB//vt
4f/42b//+NvB//fcw//43sX/99/H//ffyv/65dD///79/8uPWv/KlFLjypRSEgAAAAAAAAAA0JpVae3Q
sv//9vD/6NG7/8+7qP/Pu6v/z76u/8/AsP/Xx7j//Orb/////f/SnXH/7tnB/9CaVc0AAAAAAAAAANWf
WFPryqX///37//vn0//66NX/+ufY//vr3f/77uD//PDj//zw5P//////4KBw///7+f/fuIf/AAAAAAAA
AADapFtE68aa///////87+L//fDn//3x6//99e7//fjx//369////Pr///////779//02sD/2qRb1gAA
AAAAAAAA3qhdLurAjP///////////////////////fn0//vz6v/469n/+ObT//Xfxv/py6b/3qhd3N6o
XSEAAAAAAAAAAOKsXwvirF+Z6ryB/+i3d//msm3/5LBo/+KsX+HirF/K4qxfqOKsX6PirF+J4qxfbuKs
XxYAAAAAAAOsQQADrEEAA6xBAAOsQQADrEGAA6xBgAOsQcADrEHAA6xBwAGsQcAArEHAAKxBwACsQcAA
rEHAAKxBwAGsQQ==
<value>
AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AACQWzEBkFsxRJBbMWiQWzGBkFsxnpBbMbqQWzHYkFsx9ZVhOf+aaUH/o3RP/62CX/+QWzG4kFsxCgAA
AAAAAAAAlF8zKriQbf/WuqP/38az/+fUw//u39P/9eri//v07//9+vb///79//vr3//77+b/wZ2A/5Rf
MzAAAAAAAAAAAJlkNknHpIX////////////////////////+/P/++/f//vfx//728f/krob/+ujb/86v
lf+ZZDZLAAAAAAAAAACeaTkdnmk57bSFWf/ZpXv/2J5v/9ebav/YlmP/1pJd/9SPWf/Tjlf/4p1p//rj
0f/Yu6L/nmk5YQAAAAAAAAAApG88AaRvPHLVroz//fDl//bGof/2zqz/+NS0//bYu//127//997D//rk
zP/99ez/4s66/6RvPH0AAAAAAAAAAAAAAACqdUAGt4ZW//7+/f/ozrT/z7ae/861n//OtZ//zreg/9a7
pP/63MP//eve/+zczf+qdUCgAAAAAAAAAAAAAAAAsXtDA7mGUv/+/Pn/99q9/+3Rtf/u0rf/8tS8//LV
u//z173/+dzC//vn1P/17eL/sXtDywAAAAAAAAAAAAAAAAAAAAC5hUv//vv3/+/Tuf/QuaD/z7ig/8+3
of/PuKD/z7ig//HWvP/74sv//Pn1/7eCR/cAAAAAAAAAAAAAAAAAAAAAvYhL8/z28P/538f/8dW3//LV
uP/y1Lr/8ta8//LWu//43MP/++DJ///8+v/BjVP/AAAAAAAAAAAAAAAAAAAAAMSOTrr159j/+eTR/9K4
n//SuZ//07mh/9O7o//Tu6P/8ta+//vhyP///fv/yJRX/8SOTgEAAAAAAAAAAAAAAADKlFKJ8NnB//vt
4f/42b//+NvB//fcw//43sX/99/H//ffyv/65dD///79/8uPWv/KlFLjypRSEgAAAAAAAAAA0JpVae3Q
sv//9vD/6NG7/8+7qP/Pu6v/z76u/8/AsP/Xx7j//Orb/////f/SnXH/7tnB/9CaVc0AAAAAAAAAANWf
WFPryqX///37//vn0//66NX/+ufY//vr3f/77uD//PDj//zw5P//////4KBw///7+f/fuIf/AAAAAAAA
AADapFtE68aa///////87+L//fDn//3x6//99e7//fjx//369////Pr///////779//02sD/2qRb1gAA
AAAAAAAA3qhdLurAjP///////////////////////fn0//vz6v/469n/+ObT//Xfxv/py6b/3qhd3N6o
XSEAAAAAAAAAAOKsXwvirF+Z6ryB/+i3d//msm3/5LBo/+KsX+HirF/K4qxfqOKsX6PirF+J4qxfbuKs
XxYAAAAAAAOsQQADrEEAA6xBAAOsQQADrEGAA6xBgAOsQcADrEHAA6xBwAGsQcAArEHAAKxBwACsQcAA
rEHAAKxBwAGsQQ==
</value>
</data>
</root>

View file

@ -104,8 +104,13 @@ namespace CodeImp.DoomBuilder.Windows
//mxd. Select the last one that was selected
string selectname = General.Settings.ReadSetting("browserwindow.textureset", "");
TreeNode match;
if (string.IsNullOrEmpty(selectname)) {
match = tvTextureSets.Nodes[tvTextureSets.Nodes.Count - 1];
} else {
match = findNodeByName(tvTextureSets.Nodes, selectname);
}
TreeNode match = findNodeByName(tvTextureSets.Nodes, selectname);
if (match != null) {
IFilledTextureSet set = (match.Tag as IFilledTextureSet);

View file

@ -411,16 +411,10 @@ namespace CodeImp.DoomBuilder.BuilderModes
//mxd. Setup hints for current editing mode
protected override void SetupHints() {
string selectKey = Actions.Action.GetShortcutKeyDesc("builder_classicselect");
string editKey = Actions.Action.GetShortcutKeyDesc("builder_classicedit");
string acceptKey = Actions.Action.GetShortcutKeyDesc("builder_acceptmode");
string cancelKey = Actions.Action.GetShortcutKeyDesc("builder_cancelmode");
string removeKey = Actions.Action.GetShortcutKeyDesc("buildermodes_removepoint");
hints = new[]{ "Press " + selectKey + " to place a vertex",
"Press " + removeKey + " to remove last vertex",
"Press " + acceptKey + " to accept",
"Press " + cancelKey + " or " + editKey + " to cancel"
hints = new[]{ "Press <b>" + Actions.Action.GetShortcutKeyDesc("builder_classicselect") + "</b> to place a vertex",
"Press <b>" + Actions.Action.GetShortcutKeyDesc("buildermodes_removepoint") + "</b> to remove last vertex",
"Press <b>" + Actions.Action.GetShortcutKeyDesc("builder_acceptmode") + "</b> to accept",
"Press <b>" + Actions.Action.GetShortcutKeyDesc("builder_cancelmode") + "</b> or <b>" + Actions.Action.GetShortcutKeyDesc("builder_classicedit") + "</b> to cancel"
};
}

View file

@ -184,19 +184,11 @@ namespace CodeImp.DoomBuilder.BuilderModes.ClassicModes
//mxd. Setup hints for current editing mode
protected override void SetupHints() {
string selectKey = Actions.Action.GetShortcutKeyDesc("builder_classicselect");
string editKey = Actions.Action.GetShortcutKeyDesc("builder_classicedit");
string cancelKey = Actions.Action.GetShortcutKeyDesc("builder_cancelmode");
string incSub = Actions.Action.GetShortcutKeyDesc("buildermodes_increasesubdivlevel");
string decSub = Actions.Action.GetShortcutKeyDesc("buildermodes_decreasesubdivlevel");
string incBvl = Actions.Action.GetShortcutKeyDesc("buildermodes_increasebevel");
string decBvl = Actions.Action.GetShortcutKeyDesc("buildermodes_decreasebevel");
hints = new[]{"Press " + selectKey + " to place a vertex",
"Use " + incBvl + " and " + decBvl + " to change corners bevel by current grid size",
"Use " + incSub + " and " + decSub + " to change bevel detail level",
hints = new[]{"Press <b>" + Actions.Action.GetShortcutKeyDesc("builder_classicselect") + "</b> to place a vertex",
"Use <b>" + Actions.Action.GetShortcutKeyDesc("buildermodes_increasebevel") + "</b> and <b>" + Actions.Action.GetShortcutKeyDesc("buildermodes_decreasebevel") + "</b> to change corners bevel by current grid size",
"Use <b>" + Actions.Action.GetShortcutKeyDesc("buildermodes_increasesubdivlevel") + "</b> and <b>" + Actions.Action.GetShortcutKeyDesc("buildermodes_decreasesubdivlevel") + "</b> to change bevel detail level",
"Place second vertex to finish drawing",
"Press " + cancelKey + " or " + editKey + " to cancel"
"Press <b>" + Actions.Action.GetShortcutKeyDesc("builder_cancelmode") + "</b> or <b>" + Actions.Action.GetShortcutKeyDesc("builder_classicedit") + "</b> to cancel"
};
}

View file

@ -260,31 +260,27 @@ namespace CodeImp.DoomBuilder.BuilderModes
//mxd. Setup hints for current editing mode
protected override void SetupHints() {
string selectKey = Actions.Action.GetShortcutKeyDesc("builder_classicselect");
string editKey = Actions.Action.GetShortcutKeyDesc("builder_classicedit");
string clearKey = Actions.Action.GetShortcutKeyDesc("builder_clearselection");
string insertKey = Actions.Action.GetShortcutKeyDesc("builder_insertitem");
string deleteKey = Actions.Action.GetShortcutKeyDesc("builder_deleteitem");
string panKey = Actions.Action.GetShortcutKeyDesc("builder_pan_view");
string drawKey = Actions.Action.GetShortcutKeyDesc("buildermodes_drawlinesmode");
string gridIncKey = Actions.Action.GetShortcutKeyDesc("builder_griddec");
string gridDecKey = Actions.Action.GetShortcutKeyDesc("builder_gridinc");
hints = new[]{ "Hold " + panKey + " to pan the view",
"Press " + selectKey + " to select a linedef",
"Hold " + selectKey + " and drag to use rectangular selection",
"Press " + clearKey + " to clear selection",
"Press " + deleteKey + " to delete selected linedef(s)",
"Press " + editKey + " to edit properties of current selection",
"Use " + gridIncKey + " and " + gridDecKey + " to change grid size",
"Press " + drawKey + " or " + insertKey + " to start drawing lines",
hints = new[]{ "Hold <b>" + Actions.Action.GetShortcutKeyDesc("builder_pan_view") + "</b> to pan the view",
"Press <b>" + selectKey + "</b> to select a linedef",
"Hold <b>" + selectKey + "</b> and drag to use rectangular selection",
"Press <b>" + Actions.Action.GetShortcutKeyDesc("builder_clearselection") + "</b> to clear selection",
"Press <b>" + Actions.Action.GetShortcutKeyDesc("builder_deleteitem") + "</b> to delete selected linedef(s)",
"Press <b>" + Actions.Action.GetShortcutKeyDesc("builder_classicedit") + "</b> to edit properties of current selection",
"Use <b>" + Actions.Action.GetShortcutKeyDesc("builder_griddec") + "</b> and <b>" + Actions.Action.GetShortcutKeyDesc("builder_gridinc") + "</b> to change grid size",
"Press <b>" + Actions.Action.GetShortcutKeyDesc("buildermodes_drawlinesmode") + "</b> or <b>" + Actions.Action.GetShortcutKeyDesc("builder_insertitem") + "</b> to start drawing lines",
"Press <b>" + Actions.Action.GetShortcutKeyDesc("buildermodes_flipsidedefs") + "</b> to flips the sidedefs on the selected linedefs around",
"Press <b>" + Actions.Action.GetShortcutKeyDesc("buildermodes_selectsinglesided") + "</b> to keep only the single-sided lines in your selection selected",
"Press <b>" + Actions.Action.GetShortcutKeyDesc("buildermodes_selectdoublesided") + "</b> to keep only the double-sided lines in your selection selected",
"Check <b>'Linedefs'</b> menu for additional actions"
};
}
//mxd
protected override void SetupMultiselectionHints() {
multiselectionHints = new[] { "Hold Shift to " + (BuilderPlug.Me.AdditiveSelect ? "disable" : "enable") + " additive selection",
"Hold Ctrl to enable subtractive selection",
"Hold Ctrl-Shift to intersect the new selection with already existing one",
multiselectionHints = new[] { "Hold <b>Shift</b> to " + (BuilderPlug.Me.AdditiveSelect ? "disable" : "enable") + " additive selection",
"Hold <b>Ctrl</b> to enable subtractive selection",
"Hold <b>Ctrl-Shift</b> to intersect the new selection with already existing one",
};
}
@ -875,9 +871,40 @@ namespace CodeImp.DoomBuilder.BuilderModes
}
General.Editing.ChangeMode(drawmode);
}
[BeginAction("deleteitem", BaseAction = true)]
public void DeleteItem()
public void DeleteItem() {
// Make list of selected linedefs
ICollection<Linedef> selected = General.Map.Map.GetSelectedLinedefs(true);
if((selected.Count == 0) && (highlighted != null) && !highlighted.IsDisposed) selected.Add(highlighted);
if(selected.Count == 0) return;
// Make undo
if(selected.Count > 1) {
General.Map.UndoRedo.CreateUndo("Delete " + selected.Count + " linedefs");
General.Interface.DisplayStatus(StatusType.Action, "Deleted " + selected.Count + " linedefs.");
} else {
General.Map.UndoRedo.CreateUndo("Delete linedef");
General.Interface.DisplayStatus(StatusType.Action, "Deleted a linedef.");
}
// Dispose selected linedefs
foreach(Linedef ld in selected) ld.Dispose();
// Update cache values
General.Map.IsChanged = true;
General.Map.Map.Update();
// Invoke a new mousemove so that the highlighted item updates
MouseEventArgs e = new MouseEventArgs(MouseButtons.None, 0, (int)mousepos.x, (int)mousepos.y, 0);
OnMouseMove(e);
// Redraw screen
General.Interface.RedrawDisplay();
}
[BeginAction("dissolveitem", BaseAction = true)] //mxd
public void DissolveItem()
{
// Make list of selected linedefs
ICollection<Linedef> selected = General.Map.Map.GetSelectedLinedefs(true);
@ -889,13 +916,13 @@ namespace CodeImp.DoomBuilder.BuilderModes
// Make undo
if(selected.Count > 1)
{
General.Map.UndoRedo.CreateUndo("Delete " + selected.Count + " linedefs");
General.Interface.DisplayStatus(StatusType.Action, "Deleted " + selected.Count + " linedefs.");
General.Map.UndoRedo.CreateUndo("Dissolve " + selected.Count + " linedefs");
General.Interface.DisplayStatus(StatusType.Action, "Dissolved " + selected.Count + " linedefs.");
}
else
{
General.Map.UndoRedo.CreateUndo("Delete linedef");
General.Interface.DisplayStatus(StatusType.Action, "Deleted a linedef.");
General.Map.UndoRedo.CreateUndo("Dissolve linedef");
General.Interface.DisplayStatus(StatusType.Action, "Dissolved a linedef.");
}
//mxd. Find sectors, which will become invalid after linedefs removal.

View file

@ -527,33 +527,30 @@ namespace CodeImp.DoomBuilder.BuilderModes
//mxd. Setup hints for current editing mode
protected override void SetupHints() {
string selectKey = Actions.Action.GetShortcutKeyDesc("builder_classicselect");
string editKey = Actions.Action.GetShortcutKeyDesc("builder_classicedit");
string clearKey = Actions.Action.GetShortcutKeyDesc("builder_clearselection");
string insertKey = Actions.Action.GetShortcutKeyDesc("builder_insertitem");
string deleteKey = Actions.Action.GetShortcutKeyDesc("builder_deleteitem");
string panKey = Actions.Action.GetShortcutKeyDesc("builder_pan_view");
string drawKey = Actions.Action.GetShortcutKeyDesc("buildermodes_drawlinesmode");
string gridIncKey = Actions.Action.GetShortcutKeyDesc("builder_griddec");
string gridDecKey = Actions.Action.GetShortcutKeyDesc("builder_gridinc");
hints = new[]{ "Hold " + panKey + " to pan the view",
"Press " + selectKey + " to select a sector",
"Hold " + selectKey + " and drag to use rectangular selection",
"Press " + clearKey + " to clear selection",
"Press " + deleteKey + " to delete selected sector(s)",
"Press " + editKey + " to edit properties of current selection",
"Use " + gridIncKey + " and " + gridDecKey + " to change grid size",
"Press " + drawKey + " or " + insertKey + " to start drawing lines",
hints = new[]{ "Hold <b>" + Actions.Action.GetShortcutKeyDesc("builder_pan_view") + "</b> to pan the view",
"Press <b>" + selectKey + "</b> to select a sector",
"Hold <b>" + selectKey + "</b> and drag to use rectangular selection",
"Press <b>" + Actions.Action.GetShortcutKeyDesc("builder_clearselection") + "</b> to clear selection",
"Press <b>" + Actions.Action.GetShortcutKeyDesc("builder_deleteitem") + "</b> to delete selected sector(s)",
"Press <b>" + Actions.Action.GetShortcutKeyDesc("builder_classicedit") + "</b> to edit properties of current selection",
"Use <b>" + Actions.Action.GetShortcutKeyDesc("builder_griddec") + "</b> and <b>" + Actions.Action.GetShortcutKeyDesc("builder_gridinc") + "</b> to change grid size",
"Press <b>" + Actions.Action.GetShortcutKeyDesc("buildermodes_joinsectors") + "</b> to join two or more selected sectors together and keep all linedefs",
"Press <b>" + Actions.Action.GetShortcutKeyDesc("buildermodes_mergesectors") + "</b> to join two or more selected sectors together and remove the shared inedefs",
"Press <b>" + Actions.Action.GetShortcutKeyDesc("buildermodes_gradientbrightness") + "</b> to create a brightness or color gradient over all selected sectors from the first to the last selected sector",
"Press <b>" + Actions.Action.GetShortcutKeyDesc("buildermodes_gradientfloors") + "</b> to create a floor heights gradient over all selected sectors from the first to the last selected sector",
"Press <b>" + Actions.Action.GetShortcutKeyDesc("buildermodes_gradientceilings") + "</b> to create a ceiling heights gradient over all selected sectors from the first to the last selected sector",
"Press <b>" + Actions.Action.GetShortcutKeyDesc("buildermodes_makedoor") + "</b> to create doors from the highlighted or selected sectors",
"Press <b>" + Actions.Action.GetShortcutKeyDesc("buildermodes_drawlinesmode") + "</b> or <b>" + Actions.Action.GetShortcutKeyDesc("builder_insertitem") + "</b> to start drawing lines",
"Check <b>'Sectors'</b> menu for additional actions"
};
}
//mxd
protected override void SetupMultiselectionHints() {
multiselectionHints = new[] { "Hold Shift to " + (BuilderPlug.Me.AdditiveSelect ? "disable" : "enable") + " additive selection",
"Hold Ctrl to enable subtractive selection",
"Hold Ctrl-Shift to intersect the new selection with already existing one",
multiselectionHints = new[] { "Hold <b>Shift</b> to " + (BuilderPlug.Me.AdditiveSelect ? "disable" : "enable") + " additive selection",
"Hold <b>Ctrl</b> to enable subtractive selection",
"Hold <b>Ctrl-Shift</b> to intersect the new selection with already existing one",
};
}
@ -1435,11 +1432,6 @@ namespace CodeImp.DoomBuilder.BuilderModes
// Dispose selected sectors
foreach(Sector s in selected)
{
// Get all the linedefs
/*General.Map.Map.ClearMarkedLinedefs(false);
foreach(Sidedef sd in s.Sidedefs) sd.Line.Marked = true;
List<Linedef> lines = General.Map.Map.GetMarkedLinedefs(true);*/
//mxd. Get all the linedefs
List<Linedef> lines = new List<Linedef>(s.Sidedefs.Count);
foreach(Sidedef side in s.Sidedefs) lines.Add(side.Line);
@ -1475,11 +1467,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
}
//mxd. Do we still need high/low textures?
if(!lines[i].Front.HighRequired() && lines[i].Front.HighTexture.Length > 0 && lines[i].Front.HighTexture != "-")
lines[i].Front.SetTextureHigh("-");
if(!lines[i].Front.LowRequired() && lines[i].Front.LowTexture.Length > 0 && lines[i].Front.LowTexture != "-")
lines[i].Front.SetTextureLow("-");
lines[i].Front.RemoveUnneededTextures(false);
// Update sided flags
lines[i].ApplySidedFlags();
@ -1502,6 +1490,12 @@ namespace CodeImp.DoomBuilder.BuilderModes
General.Interface.RedrawDisplay();
}
}
[BeginAction("dissolveitem", BaseAction = true)] //mxd
public void DissolveItem() {
///TODO handle this differently?..
DeleteItem();
}
// This joins sectors together and keeps all lines
[BeginAction("joinsectors")]

View file

@ -638,32 +638,28 @@ namespace CodeImp.DoomBuilder.BuilderModes
//mxd. Setup hints for current editing mode
protected override void SetupHints() {
string selectKey = Actions.Action.GetShortcutKeyDesc("builder_classicselect");
string editKey = Actions.Action.GetShortcutKeyDesc("builder_classicedit");
string clearKey = Actions.Action.GetShortcutKeyDesc("builder_clearselection");
string insertKey = Actions.Action.GetShortcutKeyDesc("builder_insertitem");
string deleteKey = Actions.Action.GetShortcutKeyDesc("builder_deleteitem");
string panKey = Actions.Action.GetShortcutKeyDesc("builder_pan_view");
string drawKey = Actions.Action.GetShortcutKeyDesc("buildermodes_drawlinesmode");
string gridIncKey = Actions.Action.GetShortcutKeyDesc("builder_griddec");
string gridDecKey = Actions.Action.GetShortcutKeyDesc("builder_gridinc");
hints = new[]{ "Hold " + panKey + " to pan the view",
"Press " + selectKey + " to select a thing",
"Hold " + selectKey + " and drag to use rectangular selection",
"Press " + clearKey + " to clear selection",
"Press " + deleteKey + " to delete selected thing(s)",
"Press " + editKey + " to edit properties of current selection",
"Use " + gridIncKey + " and " + gridDecKey + " to change grid size",
"Press " + insertKey + " to create a new thing",
"Press " + drawKey + " to start drawing lines",
hints = new[]{ "Hold <b>" + Actions.Action.GetShortcutKeyDesc("builder_pan_view") + "</b> to pan the view",
"Press <b>" + selectKey + "</b> to select a thing",
"Hold <b>" + selectKey + "</b> and drag to use rectangular selection",
"Press <b>" + Actions.Action.GetShortcutKeyDesc("buildermodes_thingsselectinsectors") + "</b> to select things in selected sectors",
"Press <b>" + Actions.Action.GetShortcutKeyDesc("builder_clearselection") + "</b> to clear selection",
"Press <b>" + Actions.Action.GetShortcutKeyDesc("builder_deleteitem") + "</b> to delete selected thing(s)",
"Press <b>" + Actions.Action.GetShortcutKeyDesc("builder_classicedit") + "</b> to edit properties of current selection",
"Use <b>" + Actions.Action.GetShortcutKeyDesc("builder_griddec") + "</b> and <b>" + Actions.Action.GetShortcutKeyDesc("builder_gridinc") + "</b> to change grid size",
"Press <b>" + Actions.Action.GetShortcutKeyDesc("builder_insertitem") + "</b> to create a new thing",
"Press <b>" + Actions.Action.GetShortcutKeyDesc("buildermodes_thinglookatcursor") + "</b> to point selected things to cursor position. Hold <b>Ctrl</b> to point away from cursor",
"Press <b>" + Actions.Action.GetShortcutKeyDesc("buildermodes_thingaligntowall") + "</b> to align selected things to closest linedef",
"Press <b>" + Actions.Action.GetShortcutKeyDesc("buildermodes_drawlinesmode") + "</b> to start drawing lines",
"Check <b>'Things'</b> menu for additional actions"
};
}
//mxd
protected override void SetupMultiselectionHints() {
multiselectionHints = new[] { "Hold Shift to " + (BuilderPlug.Me.AdditiveSelect ? "disable" : "enable") + " additive selection",
"Hold Ctrl to enable subtractive selection",
"Hold Ctrl-Shift to intersect the new selection with already existing one",
multiselectionHints = new[] { "Hold <b>Shift</b> to " + (BuilderPlug.Me.AdditiveSelect ? "disable" : "enable") + " additive selection",
"Hold <b>Ctrl</b> to enable subtractive selection",
"Hold <b>Ctrl-Shift</b> to intersect the new selection with already existing one",
};
}

View file

@ -25,6 +25,7 @@ using CodeImp.DoomBuilder.Rendering;
using CodeImp.DoomBuilder.Geometry;
using CodeImp.DoomBuilder.Editing;
using CodeImp.DoomBuilder.Actions;
using System.Drawing;
#endregion
@ -48,7 +49,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
// Highlighted item
protected Vertex highlighted;
private Linedef highlightedLine;
private Vector2D insertPreview = new Vector2D(float.NaN, float.NaN); //mxd
// Interface
private bool editpressed;
@ -150,15 +151,11 @@ namespace CodeImp.DoomBuilder.BuilderModes
renderer.Finish();
}
// Selecting?
if(selecting)
// Render selection
if(selecting && renderer.StartOverlay(true))
{
// Render selection
if(renderer.StartOverlay(true))
{
RenderMultiSelection();
renderer.Finish();
}
RenderMultiSelection();
renderer.Finish();
}
renderer.Present();
@ -193,42 +190,6 @@ namespace CodeImp.DoomBuilder.BuilderModes
General.Interface.HideInfo();
}
//mxd
private void HighlightLine(Linedef l) {
// Update display
if(renderer.StartPlotter(false)) {
// Undraw previous highlight
if((highlightedLine != null) && !highlightedLine.IsDisposed) {
renderer.PlotLinedef(highlightedLine, renderer.DetermineLinedefColor(highlightedLine));
if(highlighted == null) {
renderer.PlotVertex(highlightedLine.Start, renderer.DetermineVertexColor(highlightedLine.Start));
renderer.PlotVertex(highlightedLine.End, renderer.DetermineVertexColor(highlightedLine.End));
}
}
// Set new highlight
highlightedLine = l;
// Render highlighted item
if((highlightedLine != null) && !highlightedLine.IsDisposed) {
renderer.PlotLinedef(highlightedLine, General.Colors.InfoLine.WithAlpha(128));
if(highlighted != null && !highlighted.IsDisposed) {
renderer.PlotVertex(highlightedLine.Start, highlightedLine.Start == highlighted ? ColorCollection.HIGHLIGHT : renderer.DetermineVertexColor(highlightedLine.Start));
renderer.PlotVertex(highlightedLine.End, highlightedLine.End == highlighted ? ColorCollection.HIGHLIGHT : renderer.DetermineVertexColor(highlightedLine.End));
}else{
renderer.PlotVertex(highlightedLine.Start, renderer.DetermineVertexColor(highlightedLine.Start));
renderer.PlotVertex(highlightedLine.End, renderer.DetermineVertexColor(highlightedLine.End));
}
}
// Done
renderer.Finish();
renderer.Present();
}
}
//mxd
protected override void StartMultiSelection() {
General.Interface.ShowEditModeHints(multiselectionHints);
@ -442,7 +403,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
public override void OnMouseMove(MouseEventArgs e)
{
base.OnMouseMove(e);
if(panning) return; //mxd. Skip all this jass while panning
if(panning) return; //mxd. Skip all this jazz while panning
//mxd
if(selectpressed && !editpressed && !selecting) {
@ -485,12 +446,48 @@ namespace CodeImp.DoomBuilder.BuilderModes
}
else if(e.Button == MouseButtons.None) // Not holding any buttons?
{
//mxd
// Find the nearest linedef within split linedefs range
//mxd. Render insert vertex preview
Linedef l = General.Map.Map.NearestLinedefRange(mousemappos, BuilderPlug.Me.SplitLinedefsRange / renderer.Scale);
// Highlight if not the same
if(l != highlightedLine) HighlightLine(l);
if(l != null) {
// Snip to grid?
if(General.Interface.ShiftState ^ General.Interface.SnapToGrid) {
// Find all points where the grid intersects the line
List<Vector2D> points = l.GetGridIntersections();
if(points.Count == 0) {
insertPreview = l.NearestOnLine(mousemappos);
} else {
insertPreview = mousemappos;
float distance = float.MaxValue;
foreach(Vector2D p in points) {
float pdist = Vector2D.DistanceSq(p, mousemappos);
if(pdist < distance) {
insertPreview = p;
distance = pdist;
}
}
}
} else {
// Just use the nearest point on line
insertPreview = l.NearestOnLine(mousemappos);
}
//render preview
if(renderer.StartOverlay(true)) {
float vsize = (renderer.VertexSize + 1.0f) / renderer.Scale;
renderer.RenderRectangleFilled(new RectangleF(insertPreview.x - vsize, insertPreview.y - vsize, vsize * 2.0f, vsize * 2.0f), General.Colors.InfoLine, true);
renderer.Finish();
renderer.Present();
}
} else if(insertPreview.IsFinite()) {
insertPreview.x = float.NaN;
//undraw preveiw
if(renderer.StartOverlay(true)) {
renderer.Finish();
renderer.Present();
}
}
// Find the nearest vertex within highlight range
Vertex v = General.Map.Map.NearestVertexSquareRange(mousemappos, BuilderPlug.Me.HighlightRange / renderer.Scale);
@ -509,6 +506,21 @@ namespace CodeImp.DoomBuilder.BuilderModes
Highlight(null);
}
//mxd
protected override void BeginViewPan() {
if (insertPreview.IsFinite()) {
insertPreview.x = float.NaN;
//undraw preveiw
if (renderer.StartOverlay(true)) {
renderer.Finish();
renderer.Present();
}
}
base.BeginViewPan();
}
//mxd
protected override void OnPaintSelectBegin() {
highlighted = null;
@ -649,32 +661,25 @@ namespace CodeImp.DoomBuilder.BuilderModes
//mxd. Setup hints for current editing mode
protected override void SetupHints() {
string selectKey = Actions.Action.GetShortcutKeyDesc("builder_classicselect");
string editKey = Actions.Action.GetShortcutKeyDesc("builder_classicedit");
string clearKey = Actions.Action.GetShortcutKeyDesc("builder_clearselection");
string insertKey = Actions.Action.GetShortcutKeyDesc("builder_insertitem");
string deleteKey = Actions.Action.GetShortcutKeyDesc("builder_deleteitem");
string panKey = Actions.Action.GetShortcutKeyDesc("builder_pan_view");
string drawKey = Actions.Action.GetShortcutKeyDesc("buildermodes_drawlinesmode");
string gridIncKey = Actions.Action.GetShortcutKeyDesc("builder_griddec");
string gridDecKey = Actions.Action.GetShortcutKeyDesc("builder_gridinc");
hints = new[]{ "Hold " + panKey + " to pan the view",
"Press " + selectKey + " to select a vertex",
"Hold " + selectKey + " and drag to use rectangular selection",
"Press " + clearKey + " to clear selection",
"Press " + insertKey + " to insert a new vertex",
"Press " + deleteKey + " to delete selected vertices",
"Press " + editKey + " to edit properties of current selection",
"Use " + gridIncKey + " and " + gridDecKey + " to change grid size",
"Press " + drawKey + " to start drawing lines",
hints = new[]{ "Hold <b>" + Actions.Action.GetShortcutKeyDesc("builder_pan_view") + "</b> to pan the view",
"Press <b>" + selectKey + "</b> to select a vertex",
"Hold <b>" + selectKey + "</b> and drag to use rectangular selection",
"Press <b>" + Actions.Action.GetShortcutKeyDesc("builder_clearselection") + "</b> to clear selection",
"Press <b>" + Actions.Action.GetShortcutKeyDesc("builder_insertitem") + "</b> to insert a new vertex",
"Press <b>" + Actions.Action.GetShortcutKeyDesc("builder_deleteitem") + "</b> to delete selected vertices",
"Press <b>" + Actions.Action.GetShortcutKeyDesc("builder_classicedit") + "</b> to edit properties of current selection",
"Use <b>" + Actions.Action.GetShortcutKeyDesc("builder_griddec") + "</b> and <b>" + Actions.Action.GetShortcutKeyDesc("builder_gridinc") + "</b> to change grid size",
"Press <b>" + Actions.Action.GetShortcutKeyDesc("buildermodes_drawlinesmode") + "</b> to start drawing lines",
"Check <b>'Vertices'</b> menu for additional actions"
};
}
//mxd
protected override void SetupMultiselectionHints() {
multiselectionHints = new[] { "Hold Shift to " + (BuilderPlug.Me.AdditiveSelect ? "disable" : "enable") + " additive selection",
"Hold Ctrl to enable subtractive selection",
"Hold Ctrl-Shift to intersect the new selection with already existing one",
multiselectionHints = new[] { "Hold <b>Shift</b> to " + (BuilderPlug.Me.AdditiveSelect ? "disable" : "enable") + " additive selection",
"Hold <b>Ctrl</b> to enable subtractive selection",
"Hold <b>Ctrl-Shift</b> to intersect the new selection with already existing one",
};
}
@ -775,15 +780,20 @@ namespace CodeImp.DoomBuilder.BuilderModes
{
// Find all points where the grid intersects the line
List<Vector2D> points = l.GetGridIntersections();
insertpos = mousemappos;
float distance = float.MaxValue;
foreach(Vector2D p in points)
{
float pdist = Vector2D.DistanceSq(p, mousemappos);
if(pdist < distance)
if(points.Count == 0) {
//mxd. Just use the nearest point on line
insertpos = l.NearestOnLine(mousemappos);
} else {
insertpos = mousemappos;
float distance = float.MaxValue;
foreach(Vector2D p in points)
{
insertpos = p;
distance = pdist;
float pdist = Vector2D.DistanceSq(p, mousemappos);
if(pdist < distance)
{
insertpos = p;
distance = pdist;
}
}
}
}
@ -847,8 +857,55 @@ namespace CodeImp.DoomBuilder.BuilderModes
}
}
[BeginAction("deleteitem", BaseAction = true)] //mxd
[BeginAction("deleteitem", BaseAction = true)]
public void DeleteItem() {
// Make list of selected vertices
ICollection<Vertex> selected = General.Map.Map.GetSelectedVertices(true);
if((selected.Count == 0) && (highlighted != null) && !highlighted.IsDisposed) selected.Add(highlighted);
if(selected.Count == 0) return;
// Make undo
if(selected.Count > 1) {
General.Map.UndoRedo.CreateUndo("Delete " + selected.Count + " vertices");
General.Interface.DisplayStatus(StatusType.Action, "Deleted " + selected.Count + " vertices.");
} else {
General.Map.UndoRedo.CreateUndo("Delete vertex");
General.Interface.DisplayStatus(StatusType.Action, "Deleted a vertex.");
}
// Go for all vertices that need to be removed
foreach(Vertex v in selected) {
// Not already removed automatically?
if(!v.IsDisposed) {
// If the vertex only has 2 linedefs attached, then merge the linedefs
if(v.Linedefs.Count == 2) {
Linedef ld1 = General.GetByIndex(v.Linedefs, 0);
Linedef ld2 = General.GetByIndex(v.Linedefs, 1);
Vertex v1 = (ld1.Start == v) ? ld1.End : ld1.Start;
Vertex v2 = (ld2.Start == v) ? ld2.End : ld2.Start;
if(ld1.Start == v) ld1.SetStartVertex(v2); else ld1.SetEndVertex(v2);
ld2.Dispose();
}
// Trash vertex
v.Dispose();
}
}
// Update cache values
General.Map.IsChanged = true;
General.Map.Map.Update();
// Invoke a new mousemove so that the highlighted item updates
MouseEventArgs e = new MouseEventArgs(MouseButtons.None, 0, (int)mousepos.x, (int)mousepos.y, 0);
OnMouseMove(e);
// Redraw screen
General.Interface.RedrawDisplay();
}
[BeginAction("dissolveitem", BaseAction = true)] //mxd
public void DissolveItem() {
// Make list of selected vertices
ICollection<Vertex> selected = General.Map.Map.GetSelectedVertices(true);
if(selected.Count == 0) {
@ -858,11 +915,11 @@ namespace CodeImp.DoomBuilder.BuilderModes
// Make undo
if(selected.Count > 1) {
General.Map.UndoRedo.CreateUndo("Delete " + selected.Count + " vertices");
General.Interface.DisplayStatus(StatusType.Action, "Deleted " + selected.Count + " vertices.");
General.Map.UndoRedo.CreateUndo("Dissolve " + selected.Count + " vertices");
General.Interface.DisplayStatus(StatusType.Action, "Dissolved " + selected.Count + " vertices.");
} else {
General.Map.UndoRedo.CreateUndo("Delete vertex");
General.Interface.DisplayStatus(StatusType.Action, "Deleted a vertex.");
General.Map.UndoRedo.CreateUndo("Dissolve vertex");
General.Interface.DisplayStatus(StatusType.Action, "Dissolved a vertex.");
}
//collect linedefs count per vertex

View file

@ -91,9 +91,9 @@ namespace CodeImp.DoomBuilder.BuilderModes
General.Settings.FindDefaultDrawSettings();
switch (part)
{
case SidedefPart.Upper: side.SetTextureHigh(General.Map.Options.DefaultWallTexture); break;
case SidedefPart.Upper: side.SetTextureHigh(General.Map.Options.DefaultTopTexture); break;
case SidedefPart.Middle: side.SetTextureMid(General.Map.Options.DefaultWallTexture); break;
case SidedefPart.Lower: side.SetTextureLow(General.Map.Options.DefaultWallTexture); break;
case SidedefPart.Lower: side.SetTextureLow(General.Map.Options.DefaultBottomTexture); break;
}
General.Map.Map.Update();

View file

@ -105,9 +105,9 @@ namespace CodeImp.DoomBuilder.BuilderModes
General.Settings.FindDefaultDrawSettings();
switch(part)
{
case SidedefPart.Upper: side.SetTextureHigh(General.Map.Options.DefaultWallTexture); break;
case SidedefPart.Upper: side.SetTextureHigh(General.Map.Options.DefaultTopTexture); break;
case SidedefPart.Middle: side.SetTextureMid(General.Map.Options.DefaultWallTexture); break;
case SidedefPart.Lower: side.SetTextureLow(General.Map.Options.DefaultWallTexture); break;
case SidedefPart.Lower: side.SetTextureLow(General.Map.Options.DefaultBottomTexture); break;
}
General.Map.Map.Update();

View file

@ -25,42 +25,73 @@
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent() {
this.components = new System.ComponentModel.Container();
this.groupBox1 = new System.Windows.Forms.GroupBox();
this.cbOverrideCeilingTexture = new System.Windows.Forms.CheckBox();
this.groupBox2 = new System.Windows.Forms.GroupBox();
this.cbOverrideFloorTexture = new System.Windows.Forms.CheckBox();
this.cbOverrideWallTexture = new System.Windows.Forms.CheckBox();
this.cbFloorHeight = new System.Windows.Forms.CheckBox();
this.cbCeilHeight = new System.Windows.Forms.CheckBox();
this.cbBrightness = new System.Windows.Forms.CheckBox();
this.label14 = new System.Windows.Forms.Label();
this.label1 = new System.Windows.Forms.Label();
this.brightness = new CodeImp.DoomBuilder.Controls.ButtonsNumericTextbox();
this.floorHeight = new CodeImp.DoomBuilder.Controls.ButtonsNumericTextbox();
this.ceilHeight = new CodeImp.DoomBuilder.Controls.ButtonsNumericTextbox();
this.walls = new CodeImp.DoomBuilder.Controls.TextureSelectorControl();
this.cbOverrideCeilingTexture = new System.Windows.Forms.CheckBox();
this.floor = new CodeImp.DoomBuilder.Controls.TextureSelectorControl();
this.ceiling = new CodeImp.DoomBuilder.Controls.TextureSelectorControl();
this.groupBox2 = new System.Windows.Forms.GroupBox();
this.label1 = new System.Windows.Forms.Label();
this.label14 = new System.Windows.Forms.Label();
this.cbBrightness = new System.Windows.Forms.CheckBox();
this.brightness = new CodeImp.DoomBuilder.Controls.ButtonsNumericTextbox();
this.floorHeight = new CodeImp.DoomBuilder.Controls.ButtonsNumericTextbox();
this.cbCeilHeight = new System.Windows.Forms.CheckBox();
this.cbFloorHeight = new System.Windows.Forms.CheckBox();
this.ceilHeight = new CodeImp.DoomBuilder.Controls.ButtonsNumericTextbox();
this.cbOverrideBottomTexture = new System.Windows.Forms.CheckBox();
this.cbOverrideMiddleTexture = new System.Windows.Forms.CheckBox();
this.bottom = new CodeImp.DoomBuilder.Controls.TextureSelectorControl();
this.cbOverrideTopTexture = new System.Windows.Forms.CheckBox();
this.middle = new CodeImp.DoomBuilder.Controls.TextureSelectorControl();
this.top = new CodeImp.DoomBuilder.Controls.TextureSelectorControl();
this.groupBox3 = new System.Windows.Forms.GroupBox();
this.groupBox4 = new System.Windows.Forms.GroupBox();
this.fillceiling = new System.Windows.Forms.Button();
this.fillfloor = new System.Windows.Forms.Button();
this.fillupper = new System.Windows.Forms.Button();
this.fillmiddle = new System.Windows.Forms.Button();
this.filllower = new System.Windows.Forms.Button();
this.toolTip1 = new System.Windows.Forms.ToolTip(this.components);
this.groupBox5 = new System.Windows.Forms.GroupBox();
this.clearlower = new System.Windows.Forms.Button();
this.clearmiddle = new System.Windows.Forms.Button();
this.clearupper = new System.Windows.Forms.Button();
this.clearfloor = new System.Windows.Forms.Button();
this.clearceiling = new System.Windows.Forms.Button();
this.groupBox1.SuspendLayout();
this.groupBox2.SuspendLayout();
this.groupBox3.SuspendLayout();
this.groupBox4.SuspendLayout();
this.groupBox5.SuspendLayout();
this.SuspendLayout();
//
// groupBox1
//
this.groupBox1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.groupBox1.Controls.Add(this.cbOverrideWallTexture);
this.groupBox1.Controls.Add(this.cbOverrideFloorTexture);
this.groupBox1.Controls.Add(this.walls);
this.groupBox1.Controls.Add(this.cbOverrideCeilingTexture);
this.groupBox1.Controls.Add(this.floor);
this.groupBox1.Controls.Add(this.ceiling);
this.groupBox1.Location = new System.Drawing.Point(3, 3);
this.groupBox1.Name = "groupBox1";
this.groupBox1.Size = new System.Drawing.Size(243, 138);
this.groupBox1.Size = new System.Drawing.Size(243, 137);
this.groupBox1.TabIndex = 0;
this.groupBox1.TabStop = false;
this.groupBox1.Text = "Texture overrides:";
this.groupBox1.Text = "Sector texture overrides:";
//
// cbOverrideFloorTexture
//
this.cbOverrideFloorTexture.AutoSize = true;
this.cbOverrideFloorTexture.Location = new System.Drawing.Point(88, 19);
this.cbOverrideFloorTexture.Name = "cbOverrideFloorTexture";
this.cbOverrideFloorTexture.Size = new System.Drawing.Size(49, 17);
this.cbOverrideFloorTexture.TabIndex = 21;
this.cbOverrideFloorTexture.Text = "Floor";
this.cbOverrideFloorTexture.UseVisualStyleBackColor = true;
this.cbOverrideFloorTexture.CheckedChanged += new System.EventHandler(this.cbOverrideFloorTexture_CheckedChanged);
//
// cbOverrideCeilingTexture
//
@ -73,6 +104,26 @@
this.cbOverrideCeilingTexture.UseVisualStyleBackColor = true;
this.cbOverrideCeilingTexture.CheckedChanged += new System.EventHandler(this.cbOverrideCeilingTexture_CheckedChanged);
//
// floor
//
this.floor.Location = new System.Drawing.Point(87, 41);
this.floor.Name = "floor";
this.floor.Required = false;
this.floor.Size = new System.Drawing.Size(68, 90);
this.floor.TabIndex = 17;
this.floor.TextureName = "";
this.floor.OnValueChanged += new System.EventHandler(this.floor_OnValueChanged);
//
// ceiling
//
this.ceiling.Location = new System.Drawing.Point(6, 41);
this.ceiling.Name = "ceiling";
this.ceiling.Required = false;
this.ceiling.Size = new System.Drawing.Size(68, 90);
this.ceiling.TabIndex = 16;
this.ceiling.TextureName = "";
this.ceiling.OnValueChanged += new System.EventHandler(this.ceiling_OnValueChanged);
//
// groupBox2
//
this.groupBox2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
@ -85,56 +136,30 @@
this.groupBox2.Controls.Add(this.cbCeilHeight);
this.groupBox2.Controls.Add(this.cbFloorHeight);
this.groupBox2.Controls.Add(this.ceilHeight);
this.groupBox2.Location = new System.Drawing.Point(3, 147);
this.groupBox2.Location = new System.Drawing.Point(3, 397);
this.groupBox2.Name = "groupBox2";
this.groupBox2.Size = new System.Drawing.Size(243, 118);
this.groupBox2.TabIndex = 21;
this.groupBox2.TabStop = false;
this.groupBox2.Text = "Geometry overrides:";
//
// cbOverrideFloorTexture
// label1
//
this.cbOverrideFloorTexture.AutoSize = true;
this.cbOverrideFloorTexture.Location = new System.Drawing.Point(88, 19);
this.cbOverrideFloorTexture.Name = "cbOverrideFloorTexture";
this.cbOverrideFloorTexture.Size = new System.Drawing.Size(49, 17);
this.cbOverrideFloorTexture.TabIndex = 21;
this.cbOverrideFloorTexture.Text = "Floor";
this.cbOverrideFloorTexture.UseVisualStyleBackColor = true;
this.cbOverrideFloorTexture.CheckedChanged += new System.EventHandler(this.cbOverrideFloorTexture_CheckedChanged);
this.label1.AutoSize = true;
this.label1.Location = new System.Drawing.Point(182, 53);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(27, 13);
this.label1.TabIndex = 29;
this.label1.Text = "m.u.";
//
// cbOverrideWallTexture
// label14
//
this.cbOverrideWallTexture.AutoSize = true;
this.cbOverrideWallTexture.Location = new System.Drawing.Point(170, 19);
this.cbOverrideWallTexture.Name = "cbOverrideWallTexture";
this.cbOverrideWallTexture.Size = new System.Drawing.Size(52, 17);
this.cbOverrideWallTexture.TabIndex = 22;
this.cbOverrideWallTexture.Text = "Walls";
this.cbOverrideWallTexture.UseVisualStyleBackColor = true;
this.cbOverrideWallTexture.CheckedChanged += new System.EventHandler(this.cbOverrideWallTexture_CheckedChanged);
//
// cbFloorHeight
//
this.cbFloorHeight.AutoSize = true;
this.cbFloorHeight.Location = new System.Drawing.Point(7, 52);
this.cbFloorHeight.Name = "cbFloorHeight";
this.cbFloorHeight.Size = new System.Drawing.Size(84, 17);
this.cbFloorHeight.TabIndex = 23;
this.cbFloorHeight.Text = "Floor height:";
this.cbFloorHeight.UseVisualStyleBackColor = true;
this.cbFloorHeight.CheckedChanged += new System.EventHandler(this.cbFloorHeight_CheckedChanged);
//
// cbCeilHeight
//
this.cbCeilHeight.AutoSize = true;
this.cbCeilHeight.Location = new System.Drawing.Point(7, 23);
this.cbCeilHeight.Name = "cbCeilHeight";
this.cbCeilHeight.Size = new System.Drawing.Size(92, 17);
this.cbCeilHeight.TabIndex = 24;
this.cbCeilHeight.Text = "Ceiling height:";
this.cbCeilHeight.UseVisualStyleBackColor = true;
this.cbCeilHeight.CheckedChanged += new System.EventHandler(this.cbCeilHeight_CheckedChanged);
this.label14.AutoSize = true;
this.label14.Location = new System.Drawing.Point(182, 24);
this.label14.Name = "label14";
this.label14.Size = new System.Drawing.Size(27, 13);
this.label14.TabIndex = 28;
this.label14.Text = "m.u.";
//
// cbBrightness
//
@ -147,24 +172,6 @@
this.cbBrightness.UseVisualStyleBackColor = true;
this.cbBrightness.CheckedChanged += new System.EventHandler(this.cbBrightness_CheckedChanged);
//
// label14
//
this.label14.AutoSize = true;
this.label14.Location = new System.Drawing.Point(182, 24);
this.label14.Name = "label14";
this.label14.Size = new System.Drawing.Size(27, 13);
this.label14.TabIndex = 28;
this.label14.Text = "m.u.";
//
// label1
//
this.label1.AutoSize = true;
this.label1.Location = new System.Drawing.Point(182, 53);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(27, 13);
this.label1.TabIndex = 29;
this.label1.Text = "m.u.";
//
// brightness
//
this.brightness.AllowDecimal = false;
@ -193,6 +200,28 @@
this.floorHeight.TabIndex = 25;
this.floorHeight.WhenTextChanged += new System.EventHandler(this.floorHeight_WhenTextChanged);
//
// cbCeilHeight
//
this.cbCeilHeight.AutoSize = true;
this.cbCeilHeight.Location = new System.Drawing.Point(7, 23);
this.cbCeilHeight.Name = "cbCeilHeight";
this.cbCeilHeight.Size = new System.Drawing.Size(92, 17);
this.cbCeilHeight.TabIndex = 24;
this.cbCeilHeight.Text = "Ceiling height:";
this.cbCeilHeight.UseVisualStyleBackColor = true;
this.cbCeilHeight.CheckedChanged += new System.EventHandler(this.cbCeilHeight_CheckedChanged);
//
// cbFloorHeight
//
this.cbFloorHeight.AutoSize = true;
this.cbFloorHeight.Location = new System.Drawing.Point(7, 52);
this.cbFloorHeight.Name = "cbFloorHeight";
this.cbFloorHeight.Size = new System.Drawing.Size(84, 17);
this.cbFloorHeight.TabIndex = 23;
this.cbFloorHeight.Text = "Floor height:";
this.cbFloorHeight.UseVisualStyleBackColor = true;
this.cbFloorHeight.CheckedChanged += new System.EventHandler(this.cbFloorHeight_CheckedChanged);
//
// ceilHeight
//
this.ceilHeight.AllowDecimal = false;
@ -207,40 +236,236 @@
this.ceilHeight.TabIndex = 11;
this.ceilHeight.WhenTextChanged += new System.EventHandler(this.ceilHeight_WhenTextChanged);
//
// walls
// cbOverrideBottomTexture
//
this.walls.Location = new System.Drawing.Point(168, 41);
this.walls.Name = "walls";
this.walls.Required = false;
this.walls.Size = new System.Drawing.Size(68, 90);
this.walls.TabIndex = 19;
this.walls.TextureName = "";
this.walls.OnValueChanged += new System.EventHandler(this.walls_OnValueChanged);
this.cbOverrideBottomTexture.AutoSize = true;
this.cbOverrideBottomTexture.Location = new System.Drawing.Point(170, 19);
this.cbOverrideBottomTexture.Name = "cbOverrideBottomTexture";
this.cbOverrideBottomTexture.Size = new System.Drawing.Size(55, 17);
this.cbOverrideBottomTexture.TabIndex = 28;
this.cbOverrideBottomTexture.Text = "Lower";
this.cbOverrideBottomTexture.UseVisualStyleBackColor = true;
this.cbOverrideBottomTexture.CheckedChanged += new System.EventHandler(this.cbOverrideBottomTexture_CheckedChanged);
//
// floor
// cbOverrideMiddleTexture
//
this.floor.Location = new System.Drawing.Point(87, 41);
this.floor.Name = "floor";
this.floor.Required = false;
this.floor.Size = new System.Drawing.Size(68, 90);
this.floor.TabIndex = 17;
this.floor.TextureName = "";
this.floor.OnValueChanged += new System.EventHandler(this.floor_OnValueChanged);
this.cbOverrideMiddleTexture.AutoSize = true;
this.cbOverrideMiddleTexture.Location = new System.Drawing.Point(88, 19);
this.cbOverrideMiddleTexture.Name = "cbOverrideMiddleTexture";
this.cbOverrideMiddleTexture.Size = new System.Drawing.Size(57, 17);
this.cbOverrideMiddleTexture.TabIndex = 27;
this.cbOverrideMiddleTexture.Text = "Middle";
this.cbOverrideMiddleTexture.UseVisualStyleBackColor = true;
this.cbOverrideMiddleTexture.CheckedChanged += new System.EventHandler(this.cbOverrideMiddleTexture_CheckedChanged);
//
// ceiling
// bottom
//
this.ceiling.Location = new System.Drawing.Point(6, 41);
this.ceiling.Name = "ceiling";
this.ceiling.Required = false;
this.ceiling.Size = new System.Drawing.Size(68, 90);
this.ceiling.TabIndex = 16;
this.ceiling.TextureName = "";
this.ceiling.OnValueChanged += new System.EventHandler(this.ceiling_OnValueChanged);
this.bottom.Location = new System.Drawing.Point(168, 41);
this.bottom.Name = "bottom";
this.bottom.Required = false;
this.bottom.Size = new System.Drawing.Size(68, 90);
this.bottom.TabIndex = 25;
this.bottom.TextureName = "";
this.bottom.OnValueChanged += new System.EventHandler(this.bottom_OnValueChanged);
//
// cbOverrideTopTexture
//
this.cbOverrideTopTexture.AutoSize = true;
this.cbOverrideTopTexture.Location = new System.Drawing.Point(7, 19);
this.cbOverrideTopTexture.Name = "cbOverrideTopTexture";
this.cbOverrideTopTexture.Size = new System.Drawing.Size(55, 17);
this.cbOverrideTopTexture.TabIndex = 26;
this.cbOverrideTopTexture.Text = "Upper";
this.cbOverrideTopTexture.UseVisualStyleBackColor = true;
this.cbOverrideTopTexture.CheckedChanged += new System.EventHandler(this.cbOverrideTopTexture_CheckedChanged);
//
// middle
//
this.middle.Location = new System.Drawing.Point(87, 41);
this.middle.Name = "middle";
this.middle.Required = false;
this.middle.Size = new System.Drawing.Size(68, 90);
this.middle.TabIndex = 24;
this.middle.TextureName = "";
this.middle.OnValueChanged += new System.EventHandler(this.middle_OnValueChanged);
//
// top
//
this.top.Location = new System.Drawing.Point(6, 41);
this.top.Name = "top";
this.top.Required = false;
this.top.Size = new System.Drawing.Size(68, 90);
this.top.TabIndex = 23;
this.top.TextureName = "";
this.top.OnValueChanged += new System.EventHandler(this.top_OnValueChanged);
//
// groupBox3
//
this.groupBox3.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.groupBox3.Controls.Add(this.cbOverrideBottomTexture);
this.groupBox3.Controls.Add(this.top);
this.groupBox3.Controls.Add(this.cbOverrideMiddleTexture);
this.groupBox3.Controls.Add(this.middle);
this.groupBox3.Controls.Add(this.bottom);
this.groupBox3.Controls.Add(this.cbOverrideTopTexture);
this.groupBox3.Location = new System.Drawing.Point(3, 146);
this.groupBox3.Name = "groupBox3";
this.groupBox3.Size = new System.Drawing.Size(243, 137);
this.groupBox3.TabIndex = 29;
this.groupBox3.TabStop = false;
this.groupBox3.Text = "Sidedef texture overrides:";
//
// groupBox4
//
this.groupBox4.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.groupBox4.Controls.Add(this.filllower);
this.groupBox4.Controls.Add(this.fillmiddle);
this.groupBox4.Controls.Add(this.fillupper);
this.groupBox4.Controls.Add(this.fillfloor);
this.groupBox4.Controls.Add(this.fillceiling);
this.groupBox4.Location = new System.Drawing.Point(3, 289);
this.groupBox4.Name = "groupBox4";
this.groupBox4.Size = new System.Drawing.Size(243, 48);
this.groupBox4.TabIndex = 30;
this.groupBox4.TabStop = false;
this.groupBox4.Text = "Fill Selection with Textures:";
//
// fillceiling
//
this.fillceiling.Location = new System.Drawing.Point(6, 19);
this.fillceiling.Name = "fillceiling";
this.fillceiling.Size = new System.Drawing.Size(26, 23);
this.fillceiling.TabIndex = 0;
this.fillceiling.Text = "C";
this.toolTip1.SetToolTip(this.fillceiling, "Fill all ceiling textures within selection \r\nwith current ceiling override textur" +
"e");
this.fillceiling.UseVisualStyleBackColor = true;
this.fillceiling.Click += new System.EventHandler(this.fillceiling_Click);
//
// fillfloor
//
this.fillfloor.Location = new System.Drawing.Point(38, 19);
this.fillfloor.Name = "fillfloor";
this.fillfloor.Size = new System.Drawing.Size(26, 23);
this.fillfloor.TabIndex = 1;
this.fillfloor.Text = "F";
this.toolTip1.SetToolTip(this.fillfloor, "Fill all floor textures within selection \r\nwith current floor override texture");
this.fillfloor.UseVisualStyleBackColor = true;
this.fillfloor.Click += new System.EventHandler(this.fillfloor_Click);
//
// fillupper
//
this.fillupper.Location = new System.Drawing.Point(69, 19);
this.fillupper.Name = "fillupper";
this.fillupper.Size = new System.Drawing.Size(26, 23);
this.fillupper.TabIndex = 2;
this.fillupper.Text = "U";
this.toolTip1.SetToolTip(this.fillupper, "Fill all upper textures within selection \r\nwith current upper override texture");
this.fillupper.UseVisualStyleBackColor = true;
this.fillupper.Click += new System.EventHandler(this.fillupper_Click);
//
// fillmiddle
//
this.fillmiddle.Location = new System.Drawing.Point(101, 19);
this.fillmiddle.Name = "fillmiddle";
this.fillmiddle.Size = new System.Drawing.Size(26, 23);
this.fillmiddle.TabIndex = 3;
this.fillmiddle.Text = "M";
this.toolTip1.SetToolTip(this.fillmiddle, "Fill all middle textures within selection \r\nwith current middle override texture");
this.fillmiddle.UseVisualStyleBackColor = true;
this.fillmiddle.Click += new System.EventHandler(this.fillmiddle_Click);
//
// filllower
//
this.filllower.Location = new System.Drawing.Point(133, 19);
this.filllower.Name = "filllower";
this.filllower.Size = new System.Drawing.Size(26, 23);
this.filllower.TabIndex = 4;
this.filllower.Text = "L";
this.toolTip1.SetToolTip(this.filllower, "Fill all lower textures within selection \r\nwith current lower override texture");
this.filllower.UseVisualStyleBackColor = true;
this.filllower.Click += new System.EventHandler(this.filllower_Click);
//
// groupBox5
//
this.groupBox5.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.groupBox5.Controls.Add(this.clearlower);
this.groupBox5.Controls.Add(this.clearmiddle);
this.groupBox5.Controls.Add(this.clearupper);
this.groupBox5.Controls.Add(this.clearfloor);
this.groupBox5.Controls.Add(this.clearceiling);
this.groupBox5.Location = new System.Drawing.Point(3, 343);
this.groupBox5.Name = "groupBox5";
this.groupBox5.Size = new System.Drawing.Size(243, 48);
this.groupBox5.TabIndex = 31;
this.groupBox5.TabStop = false;
this.groupBox5.Text = "Remove Textures form Selection:";
//
// clearlower
//
this.clearlower.Location = new System.Drawing.Point(133, 19);
this.clearlower.Name = "clearlower";
this.clearlower.Size = new System.Drawing.Size(26, 23);
this.clearlower.TabIndex = 4;
this.clearlower.Text = "L";
this.toolTip1.SetToolTip(this.clearlower, "Remove all lower textures within selection ");
this.clearlower.UseVisualStyleBackColor = true;
this.clearlower.Click += new System.EventHandler(this.clearlower_Click);
//
// clearmiddle
//
this.clearmiddle.Location = new System.Drawing.Point(101, 19);
this.clearmiddle.Name = "clearmiddle";
this.clearmiddle.Size = new System.Drawing.Size(26, 23);
this.clearmiddle.TabIndex = 3;
this.clearmiddle.Text = "M";
this.toolTip1.SetToolTip(this.clearmiddle, "Remove all middle textures within selection");
this.clearmiddle.UseVisualStyleBackColor = true;
this.clearmiddle.Click += new System.EventHandler(this.clearmiddle_Click);
//
// clearupper
//
this.clearupper.Location = new System.Drawing.Point(69, 19);
this.clearupper.Name = "clearupper";
this.clearupper.Size = new System.Drawing.Size(26, 23);
this.clearupper.TabIndex = 2;
this.clearupper.Text = "U";
this.toolTip1.SetToolTip(this.clearupper, "Remove all upper textures within selection");
this.clearupper.UseVisualStyleBackColor = true;
this.clearupper.Click += new System.EventHandler(this.clearupper_Click);
//
// clearfloor
//
this.clearfloor.Location = new System.Drawing.Point(38, 19);
this.clearfloor.Name = "clearfloor";
this.clearfloor.Size = new System.Drawing.Size(26, 23);
this.clearfloor.TabIndex = 1;
this.clearfloor.Text = "F";
this.toolTip1.SetToolTip(this.clearfloor, "Remove all floor textures within selection");
this.clearfloor.UseVisualStyleBackColor = true;
this.clearfloor.Click += new System.EventHandler(this.clearfloor_Click);
//
// clearceiling
//
this.clearceiling.Location = new System.Drawing.Point(6, 19);
this.clearceiling.Name = "clearceiling";
this.clearceiling.Size = new System.Drawing.Size(26, 23);
this.clearceiling.TabIndex = 0;
this.clearceiling.Text = "C";
this.toolTip1.SetToolTip(this.clearceiling, "Remove all ceiling textures within selection ");
this.clearceiling.UseVisualStyleBackColor = true;
this.clearceiling.Click += new System.EventHandler(this.clearceiling_Click);
//
// SectorDrawingOptionsPanel
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Controls.Add(this.groupBox5);
this.Controls.Add(this.groupBox4);
this.Controls.Add(this.groupBox3);
this.Controls.Add(this.groupBox2);
this.Controls.Add(this.groupBox1);
this.Name = "SectorDrawingOptionsPanel";
@ -249,6 +474,10 @@
this.groupBox1.PerformLayout();
this.groupBox2.ResumeLayout(false);
this.groupBox2.PerformLayout();
this.groupBox3.ResumeLayout(false);
this.groupBox3.PerformLayout();
this.groupBox4.ResumeLayout(false);
this.groupBox5.ResumeLayout(false);
this.ResumeLayout(false);
}
@ -257,11 +486,9 @@
private System.Windows.Forms.GroupBox groupBox1;
private System.Windows.Forms.CheckBox cbOverrideCeilingTexture;
private CodeImp.DoomBuilder.Controls.TextureSelectorControl walls;
private CodeImp.DoomBuilder.Controls.TextureSelectorControl floor;
private CodeImp.DoomBuilder.Controls.TextureSelectorControl ceiling;
private System.Windows.Forms.GroupBox groupBox2;
private System.Windows.Forms.CheckBox cbOverrideWallTexture;
private System.Windows.Forms.CheckBox cbOverrideFloorTexture;
private System.Windows.Forms.CheckBox cbBrightness;
private CodeImp.DoomBuilder.Controls.ButtonsNumericTextbox brightness;
@ -271,5 +498,25 @@
private CodeImp.DoomBuilder.Controls.ButtonsNumericTextbox ceilHeight;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.Label label14;
private System.Windows.Forms.CheckBox cbOverrideBottomTexture;
private System.Windows.Forms.CheckBox cbOverrideMiddleTexture;
private CodeImp.DoomBuilder.Controls.TextureSelectorControl bottom;
private System.Windows.Forms.CheckBox cbOverrideTopTexture;
private CodeImp.DoomBuilder.Controls.TextureSelectorControl middle;
private CodeImp.DoomBuilder.Controls.TextureSelectorControl top;
private System.Windows.Forms.GroupBox groupBox3;
private System.Windows.Forms.GroupBox groupBox4;
private System.Windows.Forms.Button filllower;
private System.Windows.Forms.Button fillmiddle;
private System.Windows.Forms.Button fillupper;
private System.Windows.Forms.Button fillfloor;
private System.Windows.Forms.Button fillceiling;
private System.Windows.Forms.ToolTip toolTip1;
private System.Windows.Forms.GroupBox groupBox5;
private System.Windows.Forms.Button clearlower;
private System.Windows.Forms.Button clearmiddle;
private System.Windows.Forms.Button clearupper;
private System.Windows.Forms.Button clearfloor;
private System.Windows.Forms.Button clearceiling;
}
}

View file

@ -2,6 +2,8 @@
using System;
using System.Windows.Forms;
using System.Collections.Generic;
using CodeImp.DoomBuilder.Map;
#endregion
@ -22,18 +24,24 @@ namespace CodeImp.DoomBuilder.BuilderModes.Interface
brightness.Text = General.Map.Options.CustomBrightness.ToString();
ceiling.TextureName = General.Map.Options.DefaultCeilingTexture;
floor.TextureName = General.Map.Options.DefaultFloorTexture;
walls.TextureName = General.Map.Options.DefaultWallTexture;
top.TextureName = General.Map.Options.DefaultTopTexture;
middle.TextureName = General.Map.Options.DefaultWallTexture;
bottom.TextureName = General.Map.Options.DefaultBottomTexture;
cbOverrideCeilingTexture.Checked = General.Map.Options.OverrideCeilingTexture;
cbOverrideFloorTexture.Checked = General.Map.Options.OverrideFloorTexture;
cbOverrideWallTexture.Checked = General.Map.Options.OverrideWallTexture;
cbOverrideTopTexture.Checked = General.Map.Options.OverrideTopTexture;
cbOverrideMiddleTexture.Checked = General.Map.Options.OverrideMiddleTexture;
cbOverrideBottomTexture.Checked = General.Map.Options.OverrideBottomTexture;
cbCeilHeight.Checked = General.Map.Options.OverrideCeilingHeight;
cbFloorHeight.Checked = General.Map.Options.OverrideFloorHeight;
cbBrightness.Checked = General.Map.Options.OverrideBrightness;
ceiling.Enabled = cbOverrideCeilingTexture.Checked;
floor.Enabled = cbOverrideFloorTexture.Checked;
walls.Enabled = cbOverrideWallTexture.Checked;
top.Enabled = cbOverrideTopTexture.Checked;
middle.Enabled = cbOverrideMiddleTexture.Checked;
bottom.Enabled = cbOverrideBottomTexture.Checked;
ceilHeight.Enabled = cbCeilHeight.Checked;
floorHeight.Enabled = cbFloorHeight.Checked;
brightness.Enabled = cbBrightness.Checked;
@ -53,9 +61,19 @@ namespace CodeImp.DoomBuilder.BuilderModes.Interface
General.Map.Options.OverrideFloorTexture = cbOverrideFloorTexture.Checked;
}
private void cbOverrideWallTexture_CheckedChanged(object sender, EventArgs e) {
walls.Enabled = cbOverrideWallTexture.Checked;
General.Map.Options.OverrideWallTexture = cbOverrideWallTexture.Checked;
private void cbOverrideTopTexture_CheckedChanged(object sender, EventArgs e) {
top.Enabled = cbOverrideTopTexture.Checked;
General.Map.Options.OverrideTopTexture = cbOverrideTopTexture.Checked;
}
private void cbOverrideMiddleTexture_CheckedChanged(object sender, EventArgs e) {
middle.Enabled = cbOverrideMiddleTexture.Checked;
General.Map.Options.OverrideMiddleTexture = cbOverrideMiddleTexture.Checked;
}
private void cbOverrideBottomTexture_CheckedChanged(object sender, EventArgs e) {
bottom.Enabled = cbOverrideBottomTexture.Checked;
General.Map.Options.OverrideBottomTexture = cbOverrideBottomTexture.Checked;
}
private void cbCeilHeight_CheckedChanged(object sender, EventArgs e) {
@ -97,8 +115,216 @@ namespace CodeImp.DoomBuilder.BuilderModes.Interface
General.Map.Options.DefaultFloorTexture = floor.TextureName;
}
private void walls_OnValueChanged(object sender, EventArgs e) {
General.Map.Options.DefaultWallTexture = walls.TextureName;
private void top_OnValueChanged(object sender, EventArgs e) {
General.Map.Options.DefaultTopTexture = top.TextureName;
}
private void middle_OnValueChanged(object sender, EventArgs e) {
General.Map.Options.DefaultWallTexture = middle.TextureName;
}
private void bottom_OnValueChanged(object sender, EventArgs e) {
General.Map.Options.DefaultBottomTexture = bottom.TextureName;
}
#endregion
#region Texture Fill
private void fillceiling_Click(object sender, EventArgs e) {
ICollection<Sector> sectors = General.Map.Map.GetSelectedSectors(true);
if(sectors.Count == 0) return;
string undodesc = "sector";
if(sectors.Count > 1) undodesc = sectors.Count + " sectors";
General.Map.UndoRedo.CreateUndo("Clear ceiling texture from " + undodesc);
foreach(Sector s in sectors) {
s.SetCeilTexture(ceiling.TextureName);
}
// Update the used textures
General.Map.Data.UpdateUsedTextures();
General.Map.IsChanged = true;
if(General.Map.Renderer2D.ViewMode == CodeImp.DoomBuilder.Rendering.ViewMode.CeilingTextures)
General.Interface.RedrawDisplay();
}
private void fillfloor_Click(object sender, EventArgs e) {
ICollection<Sector> sectors = General.Map.Map.GetSelectedSectors(true);
if(sectors.Count == 0) return;
string undodesc = "sector";
if(sectors.Count > 1) undodesc = sectors.Count + " sectors";
General.Map.UndoRedo.CreateUndo("Clear ceiling texture from " + undodesc);
foreach(Sector s in sectors) {
s.SetFloorTexture(floor.TextureName);
}
// Update the used textures
General.Map.Data.UpdateUsedTextures();
General.Map.IsChanged = true;
if(General.Map.Renderer2D.ViewMode == CodeImp.DoomBuilder.Rendering.ViewMode.FloorTextures)
General.Interface.RedrawDisplay();
}
private void fillupper_Click(object sender, EventArgs e) {
ICollection<Linedef> lines = General.Map.Map.GetSelectedLinedefs(true);
if(lines.Count == 0) return;
string undodesc = "linedef";
if(lines.Count > 1) undodesc = lines.Count + " linedefs";
General.Map.UndoRedo.CreateUndo("Fill upper texture for " + undodesc);
foreach(Linedef l in lines) {
if(l.Front != null && l.Front.HighRequired()) l.Front.SetTextureHigh(top.TextureName);
if(l.Back != null && l.Back.HighRequired()) l.Back.SetTextureHigh(top.TextureName);
}
// Update the used textures
General.Map.Data.UpdateUsedTextures();
General.Map.IsChanged = true;
}
private void fillmiddle_Click(object sender, EventArgs e) {
ICollection<Linedef> lines = General.Map.Map.GetSelectedLinedefs(true);
if(lines.Count == 0) return;
string undodesc = "linedef";
if(lines.Count > 1) undodesc = lines.Count + " linedefs";
General.Map.UndoRedo.CreateUndo("Fill middle texture for " + undodesc);
foreach(Linedef l in lines) {
if(l.Front != null && l.Front.MiddleRequired()) l.Front.SetTextureMid(middle.TextureName);
if(l.Back != null && l.Back.MiddleRequired()) l.Back.SetTextureMid(middle.TextureName);
}
// Update the used textures
General.Map.Data.UpdateUsedTextures();
General.Map.IsChanged = true;
}
private void filllower_Click(object sender, EventArgs e) {
ICollection<Linedef> lines = General.Map.Map.GetSelectedLinedefs(true);
if(lines.Count == 0) return;
string undodesc = "linedef";
if(lines.Count > 1) undodesc = lines.Count + " linedefs";
General.Map.UndoRedo.CreateUndo("Fill lower texture for " + undodesc);
foreach(Linedef l in lines) {
if(l.Front != null && l.Front.LowRequired()) l.Front.SetTextureLow(bottom.TextureName);
if(l.Back != null && l.Back.LowRequired()) l.Back.SetTextureLow(bottom.TextureName);
}
// Update the used textures
General.Map.Data.UpdateUsedTextures();
General.Map.IsChanged = true;
}
#endregion
#region Clear Textures
private void clearceiling_Click(object sender, EventArgs e) {
ICollection<Sector> sectors = General.Map.Map.GetSelectedSectors(true);
if(sectors.Count == 0) return;
string undodesc = "sector";
if(sectors.Count > 1) undodesc = sectors.Count + " sectors";
General.Map.UndoRedo.CreateUndo("Clear ceiling texture from " + undodesc);
foreach(Sector s in sectors){
s.SetCeilTexture("-");
}
// Update the used textures
General.Map.Data.UpdateUsedTextures();
General.Map.IsChanged = true;
// Update entire display
General.Map.Map.Update();
if(General.Map.Renderer2D.ViewMode == CodeImp.DoomBuilder.Rendering.ViewMode.CeilingTextures)
General.Interface.RedrawDisplay();
}
private void clearfloor_Click(object sender, EventArgs e) {
ICollection<Sector> sectors = General.Map.Map.GetSelectedSectors(true);
if(sectors.Count == 0) return;
string undodesc = "sector";
if(sectors.Count > 1) undodesc = sectors.Count + " sectors";
General.Map.UndoRedo.CreateUndo("Clear floor texture from " + undodesc);
foreach(Sector s in sectors) {
s.SetFloorTexture("-");
}
// Update the used textures
General.Map.Data.UpdateUsedTextures();
General.Map.IsChanged = true;
// Update entire display
General.Map.Map.Update();
if(General.Map.Renderer2D.ViewMode == CodeImp.DoomBuilder.Rendering.ViewMode.FloorTextures)
General.Interface.RedrawDisplay();
}
private void clearupper_Click(object sender, EventArgs e) {
ICollection<Linedef> lines = General.Map.Map.GetSelectedLinedefs(true);
if(lines.Count == 0) return;
string undodesc = "linedef";
if(lines.Count > 1) undodesc = lines.Count + " linedefs";
General.Map.UndoRedo.CreateUndo("Clear upper texture from " + undodesc);
foreach(Linedef l in lines) {
if(l.Front != null && l.Front.HighTexture != "-") l.Front.SetTextureHigh("-");
if(l.Back != null && l.Back.HighTexture != "-") l.Back.SetTextureHigh("-");
}
// Update the used textures
General.Map.Data.UpdateUsedTextures();
General.Map.IsChanged = true;
}
private void clearmiddle_Click(object sender, EventArgs e) {
ICollection<Linedef> lines = General.Map.Map.GetSelectedLinedefs(true);
if(lines.Count == 0) return;
string undodesc = "linedef";
if(lines.Count > 1) undodesc = lines.Count + " linedefs";
General.Map.UndoRedo.CreateUndo("Clear middle texture from " + undodesc);
foreach(Linedef l in lines) {
if(l.Front != null && l.Front.MiddleTexture != "-") l.Front.SetTextureMid("-");
if(l.Back != null && l.Back.MiddleTexture != "-") l.Back.SetTextureMid("-");
}
// Update the used textures
General.Map.Data.UpdateUsedTextures();
General.Map.IsChanged = true;
}
private void clearlower_Click(object sender, EventArgs e) {
ICollection<Linedef> lines = General.Map.Map.GetSelectedLinedefs(true);
if(lines.Count == 0) return;
string undodesc = "linedef";
if(lines.Count > 1) undodesc = lines.Count + " linedefs";
General.Map.UndoRedo.CreateUndo("Clear lower texture from " + undodesc);
foreach(Linedef l in lines) {
if(l.Front != null && l.Front.LowTexture != "-") l.Front.SetTextureLow("-");
if(l.Back != null && l.Back.LowTexture != "-") l.Back.SetTextureLow("-");
}
// Update the used textures
General.Map.Data.UpdateUsedTextures();
General.Map.IsChanged = true;
}
#endregion

View file

@ -117,4 +117,22 @@
<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">
<value>17, 17</value>
</metadata>
<metadata name="toolTip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<metadata name="toolTip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<metadata name="toolTip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<metadata name="toolTip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<metadata name="toolTip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
</root>

View file

@ -35,8 +35,9 @@ namespace CodeImp.DoomBuilder.BuilderModes
// list
//
this.list.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
this.coldescription});
this.coldescription});
this.list.Dock = System.Windows.Forms.DockStyle.Fill;
this.list.Font = new System.Drawing.Font("Arial", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
this.list.FullRowSelect = true;
this.list.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.None;
this.list.Location = new System.Drawing.Point(0, 0);

View file

@ -62,7 +62,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
}
// This refills the list
public unsafe void UpdateList()
public void UpdateList()
{
ignoreevents = true;
currentselection = -1;

View file

@ -1,120 +1,120 @@
<?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.
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.
-->
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: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>
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
<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>
<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>
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View file

@ -67,9 +67,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
private VisualPickResult target;
private float lastpicktime;
private bool locktarget;
private bool useSelectionFromClassicMode;//mxd
public bool UseSelectionFromClassicMode { get { return useSelectionFromClassicMode; } }
// This keeps extra element info
private Dictionary<Sector, SectorData> sectordata;
@ -93,8 +91,8 @@ namespace CodeImp.DoomBuilder.BuilderModes
private List<IVisualEventReceiver> selectedobjects;
//mxd. Used in Cut/PasteSelection actions
private List<ThingCopyData> copyBuffer;
private Type lasthighlighttype; //mxd
public static bool GZDoomRenderingEffects { get { return gzdoomRenderingEffects; } } //mxd
private static bool gzdoomRenderingEffects = true; //mxd
//mxd. Moved here from Tools
@ -112,6 +110,13 @@ namespace CodeImp.DoomBuilder.BuilderModes
// must be subtracted from the X offset first.
public bool forward;
}
//mxd. All sorts of hints
private string[] thingHints;
private string[] sidedefHints;
private string[] sectorHints;
private string[] vertexHints;
private string[] generalHints;
#endregion
@ -146,8 +151,9 @@ namespace CodeImp.DoomBuilder.BuilderModes
}
}
//mxd
public object HighlightedTarget { get { return target.picked; } }
public object HighlightedTarget { get { return target.picked; } } //mxd
public static bool GZDoomRenderingEffects { get { return gzdoomRenderingEffects; } } //mxd
public bool UseSelectionFromClassicMode { get { return useSelectionFromClassicMode; } } //mxd
new public IRenderer3D Renderer { get { return renderer; } }
@ -1240,7 +1246,25 @@ namespace CodeImp.DoomBuilder.BuilderModes
public override void OnMouseMove(MouseEventArgs e)
{
base.OnMouseMove(e);
GetTargetEventReceiver(true).OnMouseMove(e);
IVisualEventReceiver o = GetTargetEventReceiver(true);
o.OnMouseMove(e);
//mxd. Show hints!
if (o.GetType() != lasthighlighttype) {
if (o is BaseVisualGeometrySidedef) {
General.Interface.ShowEditModeHints(sidedefHints);
} else if (o is BaseVisualGeometrySector) {
General.Interface.ShowEditModeHints(sectorHints);
} else if (o is BaseVisualThing) {
General.Interface.ShowEditModeHints(thingHints);
} else if (o is BaseVisualVertex) {
General.Interface.ShowEditModeHints(vertexHints);
} else {
General.Interface.ShowEditModeHints(generalHints);
}
lasthighlighttype = o.GetType();
}
}
// Undo performed
@ -1315,6 +1339,75 @@ namespace CodeImp.DoomBuilder.BuilderModes
#endregion
#region ================== Hints (mxd)
protected override void SetupHints() {
base.SetupHints();
//GENERAL PURPOSE
List<string> generalHintsList = new List<string>() {
"Use <b>" + Actions.Action.GetShortcutKeyDesc("builder_moveforward") + "</b>, <b>" +
Actions.Action.GetShortcutKeyDesc("builder_movebackward") + "</b>, <b>" +
Actions.Action.GetShortcutKeyDesc("builder_moveleft") + "</b> and <b>" +
Actions.Action.GetShortcutKeyDesc("builder_moveright") + "</b> to move around. Hold <b>Shift</b> to double the speed",
"Use <b>" + Actions.Action.GetShortcutKeyDesc("builder_moveup") + "</b> and <b>" +
Actions.Action.GetShortcutKeyDesc("builder_movedown") + "</b> to move up and down",
};
if (General.Map.UDMF) {
generalHintsList.Add("Press <b>" + Actions.Action.GetShortcutKeyDesc("builder_gztogglevisualvertices") + "</b> to toggle vertex handles rendering");
}
//THINGS
List<string> thingHintsList = new List<string>() {
"Press <b>" + Actions.Action.GetShortcutKeyDesc("builder_visualselect") + "</b> to select the highlighted thing",
"Press <b>" + Actions.Action.GetShortcutKeyDesc("builder_clearselection") + "</b> to clear selection",
"Use <b>" + Actions.Action.GetShortcutKeyDesc("buildermodes_raisesector8") +
"</b> and <b>" + Actions.Action.GetShortcutKeyDesc("buildermodes_lowersector8") + "</b> to change height of selected/targeted things by 8 map units",
"Use <b>" + Actions.Action.GetShortcutKeyDesc("buildermodes_lowersectortonearest") +
"</b> and <b>" + Actions.Action.GetShortcutKeyDesc("buildermodes_raisesectortonearest") + "</b> to align selected/targeted things to floor or ceiling",
"Use <b>" + Actions.Action.GetShortcutKeyDesc("builder_movethingfwd") + "</b>, <b>" +
Actions.Action.GetShortcutKeyDesc("builder_movethingback") + "</b>, <b>" +
Actions.Action.GetShortcutKeyDesc("builder_movethingleft") + "</b> and <b>" +
Actions.Action.GetShortcutKeyDesc("builder_movethingright") + "</b> to move selected things around",
"Press <b>" + Actions.Action.GetShortcutKeyDesc("builder_placethingatcursor") + "</b> to move selected things to cursor location",
"Press <b>" + Actions.Action.GetShortcutKeyDesc("buildermodes_showvisualthings") + "</b> to cycle through the different ways the things are shown",
};
//SIDEDEFS
List<string> sidedefHintsList = new List<string>() {
"Press <b>" + Actions.Action.GetShortcutKeyDesc("builder_insertitem") + "</b> to insert a Thing at current cursor position",
"Press <b>" + Actions.Action.GetShortcutKeyDesc("builder_visualselect") + "</b> to select the highlighted surface. Hold <b>Shift</b> to select adjacent surfaces with the same texture. Hold <b>Ctrl</b> to select adjacent surfaces with the same height",
"TODO: show more sidedef-related hints here"
};
//SECTORS
List<string> sectorHintsList = new List<string>() {
"Press <b>" + Actions.Action.GetShortcutKeyDesc("builder_insertitem") + "</b> to insert a Thing at current cursor position",
"TODO: show more sector-related hints here"
};
//VERTICES
List<string> vertexHintsList = new List<string>() {
"Press <b>" + Actions.Action.GetShortcutKeyDesc("builder_insertitem") + "</b> to insert a Thing at current cursor position",
"TODO: show more vertex-related hints here"
};
//instert general stuff into each array
generalHints = generalHintsList.ToArray();
thingHintsList.InsertRange(0, generalHints);
sidedefHintsList.InsertRange(0, generalHints);
sectorHintsList.InsertRange(0, generalHints);
vertexHintsList.InsertRange(0, generalHints);
thingHints = thingHintsList.ToArray();
sidedefHints = sidedefHintsList.ToArray();
sectorHints = sectorHintsList.ToArray();
vertexHints = vertexHintsList.ToArray();
}
#endregion
#region ================== Action Assist
// Because some actions can only be called on a single (the targeted) object because