mirror of
https://git.do.srb2.org/STJr/UltimateZoneBuilder.git
synced 2025-02-18 10:01:48 +00:00
Added "Split Joined Sectors" Edit menu item and toolbar button. When enabled, joined sectors adjacent to drawn lines will be split.
Added "doomthingrotationangles" Game Configuration property. When enabled, editor actions related to changing thing angle will snap the resulting angle to 45 degree increments. This property is set to true for vanilla game configurations. Fixed a crash when changing game configuration from one without Thing actions support to one with them while in Things mode. Fixed, cosmetic, DB2 bug: current editing mode button was deselected after reloading resources. Updated documentation ("Game Configuration - Basic Settings" page).
This commit is contained in:
parent
07c2b3a826
commit
59c4a75b11
24 changed files with 168 additions and 31 deletions
|
@ -32,6 +32,9 @@ include("Includes\\Game_Hexen.cfg");
|
||||||
//mxd. No DECORATE support in vanilla
|
//mxd. No DECORATE support in vanilla
|
||||||
decorategames = "";
|
decorategames = "";
|
||||||
|
|
||||||
|
//mxd. Don't do vanilla-style thing rotation angle clamping
|
||||||
|
doomthingrotationangles = false;
|
||||||
|
|
||||||
// Default thing filters
|
// Default thing filters
|
||||||
// (these are not required, just useful for new users)
|
// (these are not required, just useful for new users)
|
||||||
thingsfilters
|
thingsfilters
|
||||||
|
|
|
@ -17,6 +17,9 @@ common
|
||||||
defaultflatscale = 1.0f;
|
defaultflatscale = 1.0f;
|
||||||
scaledtextureoffsets = true;
|
scaledtextureoffsets = true;
|
||||||
|
|
||||||
|
//mxd. Do vanilla-style thing rotation angle clamping
|
||||||
|
doomthingrotationangles = true;
|
||||||
|
|
||||||
// Texture sources
|
// Texture sources
|
||||||
textures
|
textures
|
||||||
{
|
{
|
||||||
|
|
|
@ -148,6 +148,10 @@ damagetypes = "None BFGSplash Drowning Slime";
|
||||||
Set this to <b>false</b> to use linear lighting in Doom Builder. Normally Doom Builder uses a simulation of Doom's light levels.<br />
|
Set this to <b>false</b> to use linear lighting in Doom Builder. Normally Doom Builder uses a simulation of Doom's light levels.<br />
|
||||||
Default value is <b>true</b>.<br />
|
Default value is <b>true</b>.<br />
|
||||||
<br />
|
<br />
|
||||||
|
<b class="fat">doomthingrotationangles</b> (boolean) - <span class="red">GZDB only</span>.<br />
|
||||||
|
When set to <b>true</b>, editor actions related to changing thing angle will snap the resulting angle to 45 degree increments.<br />
|
||||||
|
Default value is <b>false</b>.<br />
|
||||||
|
<br />
|
||||||
<b class="fat">start3dmode</b> (integer)<br />
|
<b class="fat">start3dmode</b> (integer)<br />
|
||||||
Thing type number that Doom Builder will use to keep your Visual Mode camera position stored in the map. Doom Builder will place a single thing of this type in your map and move it along as you move in Visual Mode.<br />
|
Thing type number that Doom Builder will use to keep your Visual Mode camera position stored in the map. Doom Builder will place a single thing of this type in your map and move it along as you move in Visual Mode.<br />
|
||||||
<br />
|
<br />
|
||||||
|
|
|
@ -1179,6 +1179,7 @@
|
||||||
<None Include="Resources\ModelDisabled.png" />
|
<None Include="Resources\ModelDisabled.png" />
|
||||||
<None Include="Resources\ModelFiltered.png" />
|
<None Include="Resources\ModelFiltered.png" />
|
||||||
<Content Include="Resources\Model_selected.png" />
|
<Content Include="Resources\Model_selected.png" />
|
||||||
|
<None Include="Resources\SplitSectors.png" />
|
||||||
<None Include="Resources\ScriptProperty.png" />
|
<None Include="Resources\ScriptProperty.png" />
|
||||||
<None Include="Resources\TextWhitespace.png" />
|
<None Include="Resources\TextWhitespace.png" />
|
||||||
<None Include="Resources\TextIndent.png" />
|
<None Include="Resources\TextIndent.png" />
|
||||||
|
|
|
@ -85,6 +85,7 @@ namespace CodeImp.DoomBuilder.Config
|
||||||
private readonly int bottomboundary;
|
private readonly int bottomboundary;
|
||||||
private readonly int safeboundary; //mxd
|
private readonly int safeboundary; //mxd
|
||||||
private readonly bool doomlightlevels;
|
private readonly bool doomlightlevels;
|
||||||
|
private readonly bool doomthingrotationangles; //mxd
|
||||||
private readonly string actionspecialhelp; //mxd
|
private readonly string actionspecialhelp; //mxd
|
||||||
private readonly string thingclasshelp; //mxd
|
private readonly string thingclasshelp; //mxd
|
||||||
private readonly bool sidedefcompressionignoresaction; //mxd
|
private readonly bool sidedefcompressionignoresaction; //mxd
|
||||||
|
@ -208,6 +209,7 @@ namespace CodeImp.DoomBuilder.Config
|
||||||
public int BottomBoundary { get { return bottomboundary; } }
|
public int BottomBoundary { get { return bottomboundary; } }
|
||||||
public int SafeBoundary { get { return safeboundary; } } //mxd
|
public int SafeBoundary { get { return safeboundary; } } //mxd
|
||||||
public bool DoomLightLevels { get { return doomlightlevels; } }
|
public bool DoomLightLevels { get { return doomlightlevels; } }
|
||||||
|
public bool DoomThingRotationAngles { get { return doomthingrotationangles; } } //mxd. When set to true, thing rotation angles will be clamped to the nearest 45 deg increment
|
||||||
public string ActionSpecialHelp { get { return actionspecialhelp; } } //mxd
|
public string ActionSpecialHelp { get { return actionspecialhelp; } } //mxd
|
||||||
public string ThingClassHelp { get { return thingclasshelp; } } //mxd
|
public string ThingClassHelp { get { return thingclasshelp; } } //mxd
|
||||||
internal bool SidedefCompressionIgnoresAction { get { return sidedefcompressionignoresaction; } } //mxd
|
internal bool SidedefCompressionIgnoresAction { get { return sidedefcompressionignoresaction; } } //mxd
|
||||||
|
@ -360,6 +362,7 @@ namespace CodeImp.DoomBuilder.Config
|
||||||
bottomboundary = cfg.ReadSetting("bottomboundary", -32768);
|
bottomboundary = cfg.ReadSetting("bottomboundary", -32768);
|
||||||
safeboundary = cfg.ReadSetting("safeboundary", 32767); //mxd
|
safeboundary = cfg.ReadSetting("safeboundary", 32767); //mxd
|
||||||
doomlightlevels = cfg.ReadSetting("doomlightlevels", true);
|
doomlightlevels = cfg.ReadSetting("doomlightlevels", true);
|
||||||
|
doomthingrotationangles = cfg.ReadSetting("doomthingrotationangles", false); //mxd
|
||||||
actionspecialhelp = cfg.ReadSetting("actionspecialhelp", string.Empty); //mxd
|
actionspecialhelp = cfg.ReadSetting("actionspecialhelp", string.Empty); //mxd
|
||||||
thingclasshelp = cfg.ReadSetting("thingclasshelp", string.Empty); //mxd
|
thingclasshelp = cfg.ReadSetting("thingclasshelp", string.Empty); //mxd
|
||||||
sidedefcompressionignoresaction = cfg.ReadSetting("sidedefcompressionignoresaction", false); //mxd
|
sidedefcompressionignoresaction = cfg.ReadSetting("sidedefcompressionignoresaction", false); //mxd
|
||||||
|
|
|
@ -92,6 +92,7 @@ namespace CodeImp.DoomBuilder.Config
|
||||||
private bool keeptexturefilterfocused; //mxd
|
private bool keeptexturefilterfocused; //mxd
|
||||||
private SplitLineBehavior splitlinebehavior; //mxd
|
private SplitLineBehavior splitlinebehavior; //mxd
|
||||||
private MergeGeometryMode mergegeomode; //mxd
|
private MergeGeometryMode mergegeomode; //mxd
|
||||||
|
private bool splitjoinedsectors; //mxd
|
||||||
private bool usehighlight; //mxd
|
private bool usehighlight; //mxd
|
||||||
private bool switchviewmodes; //mxd
|
private bool switchviewmodes; //mxd
|
||||||
|
|
||||||
|
@ -207,6 +208,7 @@ namespace CodeImp.DoomBuilder.Config
|
||||||
public bool KeepTextureFilterFocused { get { return keeptexturefilterfocused; } internal set { keeptexturefilterfocused = value; } } //mxd
|
public bool KeepTextureFilterFocused { get { return keeptexturefilterfocused; } internal set { keeptexturefilterfocused = value; } } //mxd
|
||||||
public SplitLineBehavior SplitLineBehavior { get { return splitlinebehavior; } set { splitlinebehavior = value; } } //mxd
|
public SplitLineBehavior SplitLineBehavior { get { return splitlinebehavior; } set { splitlinebehavior = value; } } //mxd
|
||||||
public MergeGeometryMode MergeGeometryMode { get { return mergegeomode; } internal set { mergegeomode = value; } } //mxd
|
public MergeGeometryMode MergeGeometryMode { get { return mergegeomode; } internal set { mergegeomode = value; } } //mxd
|
||||||
|
public bool SplitJoinedSectors { get { return splitjoinedsectors; } internal set { splitjoinedsectors = value; } } //mxd
|
||||||
|
|
||||||
//mxd. Highlight mode
|
//mxd. Highlight mode
|
||||||
public bool UseHighlight
|
public bool UseHighlight
|
||||||
|
@ -356,6 +358,7 @@ namespace CodeImp.DoomBuilder.Config
|
||||||
keeptexturefilterfocused = cfg.ReadSetting("keeptexturefilterfocused", true); //mxd
|
keeptexturefilterfocused = cfg.ReadSetting("keeptexturefilterfocused", true); //mxd
|
||||||
splitlinebehavior = (SplitLineBehavior)General.Clamp(cfg.ReadSetting("splitlinebehavior", 0), 0, Enum.GetValues(typeof(SplitLineBehavior)).Length - 1); //mxd
|
splitlinebehavior = (SplitLineBehavior)General.Clamp(cfg.ReadSetting("splitlinebehavior", 0), 0, Enum.GetValues(typeof(SplitLineBehavior)).Length - 1); //mxd
|
||||||
mergegeomode = (MergeGeometryMode)General.Clamp(cfg.ReadSetting("mergegeometrymode", (int)MergeGeometryMode.REPLACE), 0, Enum.GetValues(typeof(MergeGeometryMode)).Length - 1); //mxd
|
mergegeomode = (MergeGeometryMode)General.Clamp(cfg.ReadSetting("mergegeometrymode", (int)MergeGeometryMode.REPLACE), 0, Enum.GetValues(typeof(MergeGeometryMode)).Length - 1); //mxd
|
||||||
|
splitjoinedsectors = cfg.ReadSetting("splitjoinedsectors", true); //mxd
|
||||||
usehighlight = cfg.ReadSetting("usehighlight", true); //mxd
|
usehighlight = cfg.ReadSetting("usehighlight", true); //mxd
|
||||||
switchviewmodes = cfg.ReadSetting("switchviewmodes", false); //mxd
|
switchviewmodes = cfg.ReadSetting("switchviewmodes", false); //mxd
|
||||||
|
|
||||||
|
@ -474,6 +477,7 @@ namespace CodeImp.DoomBuilder.Config
|
||||||
cfg.WriteSetting("keeptexturefilterfocused", keeptexturefilterfocused); //mxd
|
cfg.WriteSetting("keeptexturefilterfocused", keeptexturefilterfocused); //mxd
|
||||||
cfg.WriteSetting("splitlinebehavior", (int)splitlinebehavior); //mxd
|
cfg.WriteSetting("splitlinebehavior", (int)splitlinebehavior); //mxd
|
||||||
cfg.WriteSetting("mergegeometrymode", (int)mergegeomode); //mxd
|
cfg.WriteSetting("mergegeometrymode", (int)mergegeomode); //mxd
|
||||||
|
cfg.WriteSetting("splitjoinedsectors", splitjoinedsectors); //mxd
|
||||||
cfg.WriteSetting("usehighlight", usehighlight); //mxd
|
cfg.WriteSetting("usehighlight", usehighlight); //mxd
|
||||||
cfg.WriteSetting("switchviewmodes", switchviewmodes); //mxd
|
cfg.WriteSetting("switchviewmodes", switchviewmodes); //mxd
|
||||||
|
|
||||||
|
|
|
@ -26,6 +26,8 @@ namespace CodeImp.DoomBuilder.Controls
|
||||||
private const int markScaler = 5;
|
private const int markScaler = 5;
|
||||||
private Point origin;
|
private Point origin;
|
||||||
|
|
||||||
|
private bool doomangleclamping;
|
||||||
|
|
||||||
//UI colors
|
//UI colors
|
||||||
private readonly Color fillColor = SystemColors.Window;
|
private readonly Color fillColor = SystemColors.Window;
|
||||||
private readonly Color fillInactiveColor = SystemColors.Control;
|
private readonly Color fillInactiveColor = SystemColors.Control;
|
||||||
|
@ -44,6 +46,7 @@ namespace CodeImp.DoomBuilder.Controls
|
||||||
|
|
||||||
public int Angle { get { return (angle == NO_ANGLE ? NO_ANGLE : angle - angleoffset); } set { angle = (value == NO_ANGLE ? NO_ANGLE : value + angleoffset); this.Refresh(); } }
|
public int Angle { get { return (angle == NO_ANGLE ? NO_ANGLE : angle - angleoffset); } set { angle = (value == NO_ANGLE ? NO_ANGLE : value + angleoffset); this.Refresh(); } }
|
||||||
public int AngleOffset { get { return angleoffset; } set { angleoffset = value; this.Refresh(); } }
|
public int AngleOffset { get { return angleoffset; } set { angleoffset = value; this.Refresh(); } }
|
||||||
|
public bool DoomAngleClamping { get { return doomangleclamping; } set { doomangleclamping = value; } }
|
||||||
public const int NO_ANGLE = int.MinValue;
|
public const int NO_ANGLE = int.MinValue;
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
@ -189,7 +192,7 @@ namespace CodeImp.DoomBuilder.Controls
|
||||||
{
|
{
|
||||||
int thisAngle = XYToDegrees(new Point(e.X, e.Y), origin);
|
int thisAngle = XYToDegrees(new Point(e.X, e.Y), origin);
|
||||||
|
|
||||||
if(e.Button == MouseButtons.Left)
|
if(e.Button == MouseButtons.Left || doomangleclamping)
|
||||||
{
|
{
|
||||||
thisAngle = (int)Math.Round(thisAngle / 45f) * 45;
|
thisAngle = (int)Math.Round(thisAngle / 45f) * 45;
|
||||||
if(thisAngle == 360) thisAngle = 0;
|
if(thisAngle == 360) thisAngle = 0;
|
||||||
|
|
|
@ -2258,7 +2258,13 @@ namespace CodeImp.DoomBuilder
|
||||||
General.Plugins.ReloadResources();
|
General.Plugins.ReloadResources();
|
||||||
|
|
||||||
// Inform editing mode that the resources are reloaded
|
// Inform editing mode that the resources are reloaded
|
||||||
if(General.Editing.Mode != null) General.Editing.Mode.OnReloadResources();
|
if(General.Editing.Mode != null)
|
||||||
|
{
|
||||||
|
General.Editing.Mode.OnReloadResources();
|
||||||
|
|
||||||
|
//mxd. Also Check appropriate button on interface
|
||||||
|
General.MainWindow.CheckEditModeButton(General.Editing.Mode.EditModeButtonName);
|
||||||
|
}
|
||||||
|
|
||||||
// Reset status
|
// Reset status
|
||||||
General.MainWindow.DisplayStatus(oldstatus);
|
General.MainWindow.DisplayStatus(oldstatus);
|
||||||
|
|
9
Source/Core/Properties/Resources.Designer.cs
generated
9
Source/Core/Properties/Resources.Designer.cs
generated
|
@ -1,7 +1,7 @@
|
||||||
//------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------
|
||||||
// <auto-generated>
|
// <auto-generated>
|
||||||
// This code was generated by a tool.
|
// This code was generated by a tool.
|
||||||
// Runtime Version:2.0.50727.5466
|
// Runtime Version:2.0.50727.5485
|
||||||
//
|
//
|
||||||
// Changes to this file may cause incorrect behavior and will be lost if
|
// Changes to this file may cause incorrect behavior and will be lost if
|
||||||
// the code is regenerated.
|
// the code is regenerated.
|
||||||
|
@ -963,6 +963,13 @@ namespace CodeImp.DoomBuilder.Properties {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
internal static System.Drawing.Bitmap SplitSectors {
|
||||||
|
get {
|
||||||
|
object obj = ResourceManager.GetObject("SplitSectors", resourceCulture);
|
||||||
|
return ((System.Drawing.Bitmap)(obj));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
internal static System.Drawing.Bitmap Status0 {
|
internal static System.Drawing.Bitmap Status0 {
|
||||||
get {
|
get {
|
||||||
object obj = ResourceManager.GetObject("Status0", resourceCulture);
|
object obj = ResourceManager.GetObject("Status0", resourceCulture);
|
||||||
|
|
|
@ -595,4 +595,7 @@
|
||||||
<data name="MergeGeoRemoveLines" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
<data name="MergeGeoRemoveLines" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||||
<value>..\Resources\MergeGeoRemoveLines.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
<value>..\Resources\MergeGeoRemoveLines.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="SplitSectors" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||||
|
<value>..\Resources\SplitSectors.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
|
@ -507,6 +507,17 @@ toggleautomerge
|
||||||
allowscroll = true;
|
allowscroll = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//mxd
|
||||||
|
togglejoinedsectorssplitting
|
||||||
|
{
|
||||||
|
title = "Split Joined Sectors";
|
||||||
|
category = "edit";
|
||||||
|
description = "When enabled, joined sectors adjacent to drawn lines will be split.";
|
||||||
|
allowkeys = true;
|
||||||
|
allowmouse = true;
|
||||||
|
allowscroll = true;
|
||||||
|
}
|
||||||
|
|
||||||
//mxd
|
//mxd
|
||||||
toggleautoclearsidetextures
|
toggleautoclearsidetextures
|
||||||
{
|
{
|
||||||
|
|
BIN
Source/Core/Resources/SplitSectors.png
Normal file
BIN
Source/Core/Resources/SplitSectors.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.6 KiB |
30
Source/Core/Windows/MainForm.Designer.cs
generated
30
Source/Core/Windows/MainForm.Designer.cs
generated
|
@ -75,6 +75,7 @@ namespace CodeImp.DoomBuilder.Windows
|
||||||
this.itempastespecial = new System.Windows.Forms.ToolStripMenuItem();
|
this.itempastespecial = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
this.itemsnaptogrid = new System.Windows.Forms.ToolStripMenuItem();
|
this.itemsnaptogrid = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
this.itemautomerge = new System.Windows.Forms.ToolStripMenuItem();
|
this.itemautomerge = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
|
this.itemsplitjoinedsectors = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
this.itemautoclearsidetextures = new System.Windows.Forms.ToolStripMenuItem();
|
this.itemautoclearsidetextures = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
this.seperatoreditgeometry = new System.Windows.Forms.ToolStripSeparator();
|
this.seperatoreditgeometry = new System.Windows.Forms.ToolStripSeparator();
|
||||||
this.itemgridinc = new System.Windows.Forms.ToolStripMenuItem();
|
this.itemgridinc = new System.Windows.Forms.ToolStripMenuItem();
|
||||||
|
@ -193,6 +194,7 @@ namespace CodeImp.DoomBuilder.Windows
|
||||||
this.buttontogglefixedthingsscale = new System.Windows.Forms.ToolStripButton();
|
this.buttontogglefixedthingsscale = new System.Windows.Forms.ToolStripButton();
|
||||||
this.buttonsnaptogrid = new System.Windows.Forms.ToolStripButton();
|
this.buttonsnaptogrid = new System.Windows.Forms.ToolStripButton();
|
||||||
this.buttonautomerge = new System.Windows.Forms.ToolStripButton();
|
this.buttonautomerge = new System.Windows.Forms.ToolStripButton();
|
||||||
|
this.buttonsplitjoinedsectors = new System.Windows.Forms.ToolStripButton();
|
||||||
this.buttonautoclearsidetextures = new System.Windows.Forms.ToolStripButton();
|
this.buttonautoclearsidetextures = new System.Windows.Forms.ToolStripButton();
|
||||||
this.seperatorgeometry = new System.Windows.Forms.ToolStripSeparator();
|
this.seperatorgeometry = new System.Windows.Forms.ToolStripSeparator();
|
||||||
this.buttontogglefx = new System.Windows.Forms.ToolStripButton();
|
this.buttontogglefx = new System.Windows.Forms.ToolStripButton();
|
||||||
|
@ -533,6 +535,7 @@ namespace CodeImp.DoomBuilder.Windows
|
||||||
this.itemsnaptogrid,
|
this.itemsnaptogrid,
|
||||||
this.itemdynamicgridsize,
|
this.itemdynamicgridsize,
|
||||||
this.itemautomerge,
|
this.itemautomerge,
|
||||||
|
this.itemsplitjoinedsectors,
|
||||||
this.itemautoclearsidetextures,
|
this.itemautoclearsidetextures,
|
||||||
this.seperatoreditgeometry,
|
this.seperatoreditgeometry,
|
||||||
this.itemgridinc,
|
this.itemgridinc,
|
||||||
|
@ -634,6 +637,17 @@ namespace CodeImp.DoomBuilder.Windows
|
||||||
this.itemautomerge.Text = "Snap to &Geometry";
|
this.itemautomerge.Text = "Snap to &Geometry";
|
||||||
this.itemautomerge.Click += new System.EventHandler(this.InvokeTaggedAction);
|
this.itemautomerge.Click += new System.EventHandler(this.InvokeTaggedAction);
|
||||||
//
|
//
|
||||||
|
// itemsplitjoinedsectors
|
||||||
|
//
|
||||||
|
this.itemsplitjoinedsectors.Checked = true;
|
||||||
|
this.itemsplitjoinedsectors.CheckState = System.Windows.Forms.CheckState.Checked;
|
||||||
|
this.itemsplitjoinedsectors.Image = global::CodeImp.DoomBuilder.Properties.Resources.SplitSectors;
|
||||||
|
this.itemsplitjoinedsectors.Name = "itemsplitjoinedsectors";
|
||||||
|
this.itemsplitjoinedsectors.Size = new System.Drawing.Size(219, 22);
|
||||||
|
this.itemsplitjoinedsectors.Tag = "builder_togglejoinedsectorssplitting";
|
||||||
|
this.itemsplitjoinedsectors.Text = "Split &Joined Sectors when Drawing Lines";
|
||||||
|
this.itemsplitjoinedsectors.Click += new System.EventHandler(this.InvokeTaggedAction);
|
||||||
|
//
|
||||||
// itemautoclearsidetextures
|
// itemautoclearsidetextures
|
||||||
//
|
//
|
||||||
this.itemautoclearsidetextures.Checked = true;
|
this.itemautoclearsidetextures.Checked = true;
|
||||||
|
@ -1306,6 +1320,7 @@ namespace CodeImp.DoomBuilder.Windows
|
||||||
this.buttonsnaptogrid,
|
this.buttonsnaptogrid,
|
||||||
this.buttontoggledynamicgrid,
|
this.buttontoggledynamicgrid,
|
||||||
this.buttonautomerge,
|
this.buttonautomerge,
|
||||||
|
this.buttonsplitjoinedsectors,
|
||||||
this.buttonautoclearsidetextures,
|
this.buttonautoclearsidetextures,
|
||||||
this.seperatorgeometry,
|
this.seperatorgeometry,
|
||||||
this.buttontogglefx,
|
this.buttontogglefx,
|
||||||
|
@ -1793,6 +1808,19 @@ namespace CodeImp.DoomBuilder.Windows
|
||||||
this.buttonautomerge.Text = "Snap to Geometry";
|
this.buttonautomerge.Text = "Snap to Geometry";
|
||||||
this.buttonautomerge.Click += new System.EventHandler(this.InvokeTaggedAction);
|
this.buttonautomerge.Click += new System.EventHandler(this.InvokeTaggedAction);
|
||||||
//
|
//
|
||||||
|
// buttonsplitjoinedsectors
|
||||||
|
//
|
||||||
|
this.buttonsplitjoinedsectors.Checked = true;
|
||||||
|
this.buttonsplitjoinedsectors.CheckState = System.Windows.Forms.CheckState.Checked;
|
||||||
|
this.buttonsplitjoinedsectors.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
|
||||||
|
this.buttonsplitjoinedsectors.Image = global::CodeImp.DoomBuilder.Properties.Resources.SplitSectors;
|
||||||
|
this.buttonsplitjoinedsectors.ImageTransparentColor = System.Drawing.Color.Magenta;
|
||||||
|
this.buttonsplitjoinedsectors.Name = "buttonsplitjoinedsectors";
|
||||||
|
this.buttonsplitjoinedsectors.Size = new System.Drawing.Size(23, 22);
|
||||||
|
this.buttonsplitjoinedsectors.Tag = "builder_togglejoinedsectorssplitting";
|
||||||
|
this.buttonsplitjoinedsectors.Text = "Split Joined Sectors when Drawing Lines";
|
||||||
|
this.buttonsplitjoinedsectors.Click += new System.EventHandler(this.InvokeTaggedAction);
|
||||||
|
//
|
||||||
// buttonautoclearsidetextures
|
// buttonautoclearsidetextures
|
||||||
//
|
//
|
||||||
this.buttonautoclearsidetextures.Checked = true;
|
this.buttonautoclearsidetextures.Checked = true;
|
||||||
|
@ -2680,6 +2708,8 @@ namespace CodeImp.DoomBuilder.Windows
|
||||||
private System.Windows.Forms.ToolStripMenuItem itemsnaptogrid;
|
private System.Windows.Forms.ToolStripMenuItem itemsnaptogrid;
|
||||||
private System.Windows.Forms.ToolStripButton buttonautomerge;
|
private System.Windows.Forms.ToolStripButton buttonautomerge;
|
||||||
private System.Windows.Forms.ToolStripMenuItem itemautomerge;
|
private System.Windows.Forms.ToolStripMenuItem itemautomerge;
|
||||||
|
private System.Windows.Forms.ToolStripButton buttonsplitjoinedsectors;
|
||||||
|
private System.Windows.Forms.ToolStripMenuItem itemsplitjoinedsectors;
|
||||||
private System.Windows.Forms.Timer processor;
|
private System.Windows.Forms.Timer processor;
|
||||||
private System.Windows.Forms.ToolStripSeparator separatorgzmodes;
|
private System.Windows.Forms.ToolStripSeparator separatorgzmodes;
|
||||||
private System.Windows.Forms.ToolStripSeparator seperatorfilesave;
|
private System.Windows.Forms.ToolStripSeparator seperatorfilesave;
|
||||||
|
|
|
@ -2114,6 +2114,8 @@ namespace CodeImp.DoomBuilder.Windows
|
||||||
buttontoggledynamicgrid.Visible = General.Settings.ToolbarGeometry && maploaded; //mxd
|
buttontoggledynamicgrid.Visible = General.Settings.ToolbarGeometry && maploaded; //mxd
|
||||||
buttontoggledynamicgrid.Checked = General.Settings.DynamicGridSize; //mxd
|
buttontoggledynamicgrid.Checked = General.Settings.DynamicGridSize; //mxd
|
||||||
buttonautomerge.Visible = General.Settings.ToolbarGeometry && maploaded;
|
buttonautomerge.Visible = General.Settings.ToolbarGeometry && maploaded;
|
||||||
|
buttonsplitjoinedsectors.Visible = General.Settings.ToolbarGeometry && maploaded; //mxd
|
||||||
|
buttonsplitjoinedsectors.Checked = General.Settings.SplitJoinedSectors; //mxd
|
||||||
buttonautoclearsidetextures.Visible = General.Settings.ToolbarGeometry && maploaded; //mxd
|
buttonautoclearsidetextures.Visible = General.Settings.ToolbarGeometry && maploaded; //mxd
|
||||||
buttontest.Visible = General.Settings.ToolbarTesting && maploaded;
|
buttontest.Visible = General.Settings.ToolbarTesting && maploaded;
|
||||||
|
|
||||||
|
@ -2762,6 +2764,7 @@ namespace CodeImp.DoomBuilder.Windows
|
||||||
itemcopy.Enabled = (General.Map != null) && (General.Editing.Mode != null) && General.Editing.Mode.Attributes.AllowCopyPaste;
|
itemcopy.Enabled = (General.Map != null) && (General.Editing.Mode != null) && General.Editing.Mode.Attributes.AllowCopyPaste;
|
||||||
itempaste.Enabled = (General.Map != null) && (General.Editing.Mode != null) && General.Editing.Mode.Attributes.AllowCopyPaste;
|
itempaste.Enabled = (General.Map != null) && (General.Editing.Mode != null) && General.Editing.Mode.Attributes.AllowCopyPaste;
|
||||||
itempastespecial.Enabled = (General.Map != null) && (General.Editing.Mode != null) && General.Editing.Mode.Attributes.AllowCopyPaste;
|
itempastespecial.Enabled = (General.Map != null) && (General.Editing.Mode != null) && General.Editing.Mode.Attributes.AllowCopyPaste;
|
||||||
|
itemsplitjoinedsectors.Checked = General.Settings.SplitJoinedSectors; //mxd
|
||||||
itemautoclearsidetextures.Checked = General.Settings.AutoClearSidedefTextures; //mxd
|
itemautoclearsidetextures.Checked = General.Settings.AutoClearSidedefTextures; //mxd
|
||||||
itemdynamicgridsize.Enabled = (General.Map != null); //mxd
|
itemdynamicgridsize.Enabled = (General.Map != null); //mxd
|
||||||
itemdynamicgridsize.Checked = General.Settings.DynamicGridSize; //mxd
|
itemdynamicgridsize.Checked = General.Settings.DynamicGridSize; //mxd
|
||||||
|
@ -2894,6 +2897,16 @@ namespace CodeImp.DoomBuilder.Windows
|
||||||
DisplayStatus(StatusType.Action, "Snap to geometry is " + (buttonautomerge.Checked ? "ENABLED" : "DISABLED"));
|
DisplayStatus(StatusType.Action, "Snap to geometry is " + (buttonautomerge.Checked ? "ENABLED" : "DISABLED"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//mxd
|
||||||
|
[BeginAction("togglejoinedsectorssplitting")]
|
||||||
|
internal void ToggleJoinedSectorsSplitting()
|
||||||
|
{
|
||||||
|
buttonsplitjoinedsectors.Checked = !buttonsplitjoinedsectors.Checked;
|
||||||
|
itemsplitjoinedsectors.Checked = buttonsplitjoinedsectors.Checked;
|
||||||
|
General.Settings.SplitJoinedSectors = buttonsplitjoinedsectors.Checked;
|
||||||
|
DisplayStatus(StatusType.Action, "Joined sectors splitting is " + (General.Settings.SplitJoinedSectors ? "ENABLED" : "DISABLED"));
|
||||||
|
}
|
||||||
|
|
||||||
//mxd
|
//mxd
|
||||||
[BeginAction("togglebrightness")]
|
[BeginAction("togglebrightness")]
|
||||||
internal void ToggleBrightness()
|
internal void ToggleBrightness()
|
||||||
|
|
|
@ -114,6 +114,9 @@ namespace CodeImp.DoomBuilder.Windows
|
||||||
posZ.AllowDecimal = true;
|
posZ.AllowDecimal = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//mxd. Use doom angle clamping?
|
||||||
|
anglecontrol.DoomAngleClamping = General.Map.Config.DoomThingRotationAngles;
|
||||||
|
|
||||||
//mxd. Arrange inteface
|
//mxd. Arrange inteface
|
||||||
int targetheight;
|
int targetheight;
|
||||||
if(General.Map.FormatInterface.HasThingAction)
|
if(General.Map.FormatInterface.HasThingAction)
|
||||||
|
@ -364,7 +367,12 @@ namespace CodeImp.DoomBuilder.Windows
|
||||||
foreach(Thing t in things)
|
foreach(Thing t in things)
|
||||||
{
|
{
|
||||||
// Coordination
|
// Coordination
|
||||||
if(cbRandomAngle.Checked) t.Rotate(General.Random(0, 359)); //mxd
|
if(cbRandomAngle.Checked) //mxd
|
||||||
|
{
|
||||||
|
int newangle = General.Random(0, 359);
|
||||||
|
if(General.Map.Config.DoomThingRotationAngles) newangle = newangle / 45 * 45;
|
||||||
|
t.Rotate(newangle);
|
||||||
|
}
|
||||||
|
|
||||||
//mxd. Check position
|
//mxd. Check position
|
||||||
float px = General.Clamp(t.Position.x, General.Map.Config.LeftBoundary, General.Map.Config.RightBoundary);
|
float px = General.Clamp(t.Position.x, General.Map.Config.LeftBoundary, General.Map.Config.RightBoundary);
|
||||||
|
|
|
@ -148,6 +148,9 @@ namespace CodeImp.DoomBuilder.Windows
|
||||||
posZ.AllowDecimal = true;
|
posZ.AllowDecimal = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//mxd. Use doom angle clamping?
|
||||||
|
anglecontrol.DoomAngleClamping = General.Map.Config.DoomThingRotationAngles;
|
||||||
|
|
||||||
// Value linking
|
// Value linking
|
||||||
scale.LinkValues = linkscale;
|
scale.LinkValues = linkscale;
|
||||||
|
|
||||||
|
@ -462,7 +465,12 @@ namespace CodeImp.DoomBuilder.Windows
|
||||||
{
|
{
|
||||||
// Coordination
|
// Coordination
|
||||||
//mxd. Randomize rotations?
|
//mxd. Randomize rotations?
|
||||||
if(cbrandomangle.Checked) t.Rotate(General.Random(0, 359));
|
if(cbrandomangle.Checked)
|
||||||
|
{
|
||||||
|
int newangle = General.Random(0, 359);
|
||||||
|
if(General.Map.Config.DoomThingRotationAngles) newangle = newangle / 45 * 45;
|
||||||
|
t.Rotate(newangle);
|
||||||
|
}
|
||||||
if(cbrandompitch.Checked) t.SetPitch(General.Random(0, 359));
|
if(cbrandompitch.Checked) t.SetPitch(General.Random(0, 359));
|
||||||
if(cbrandomroll.Checked) t.SetRoll(General.Random(0, 359));
|
if(cbrandomroll.Checked) t.SetRoll(General.Random(0, 359));
|
||||||
|
|
||||||
|
|
|
@ -201,9 +201,13 @@ namespace CodeImp.DoomBuilder.BuilderEffects
|
||||||
private void ApplyRotation(int ammount)
|
private void ApplyRotation(int ammount)
|
||||||
{
|
{
|
||||||
for(int i = 0; i < selection.Count; i++)
|
for(int i = 0; i < selection.Count; i++)
|
||||||
selection[i].Rotate((int)((thingData[i].Angle + ammount * thingData[i].JitterRotation) % 360));
|
{
|
||||||
|
int newangle = (int)Math.Round(thingData[i].Angle + ammount * thingData[i].JitterRotation);
|
||||||
|
if(General.Map.Config.DoomThingRotationAngles) newangle = newangle / 45 * 45;
|
||||||
|
selection[i].Rotate(newangle % 360);
|
||||||
|
}
|
||||||
|
|
||||||
//update view
|
// Update view
|
||||||
if(editingModeName == "ThingsMode") General.Interface.RedrawDisplay();
|
if(editingModeName == "ThingsMode") General.Interface.RedrawDisplay();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -249,7 +249,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
|
||||||
General.Map.Map.Update();
|
General.Map.Map.Update();
|
||||||
|
|
||||||
//mxd. Outer sectors may require some splittin...
|
//mxd. Outer sectors may require some splittin...
|
||||||
Tools.SplitOuterSectors(General.Map.Map.GetMarkedLinedefs(true));
|
if(General.Settings.SplitJoinedSectors) Tools.SplitOuterSectors(General.Map.Map.GetMarkedLinedefs(true));
|
||||||
|
|
||||||
// Edit new sectors?
|
// Edit new sectors?
|
||||||
List<Sector> newsectors = General.Map.Map.GetMarkedSectors(true);
|
List<Sector> newsectors = General.Map.Map.GetMarkedSectors(true);
|
||||||
|
|
|
@ -780,7 +780,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
|
||||||
General.Map.Map.Update();
|
General.Map.Map.Update();
|
||||||
|
|
||||||
//mxd. Outer sectors may require some splittin...
|
//mxd. Outer sectors may require some splittin...
|
||||||
Tools.SplitOuterSectors(General.Map.Map.GetMarkedLinedefs(true));
|
if(General.Settings.SplitJoinedSectors) Tools.SplitOuterSectors(General.Map.Map.GetMarkedLinedefs(true));
|
||||||
|
|
||||||
// Edit new sectors?
|
// Edit new sectors?
|
||||||
List<Sector> newsectors = General.Map.Map.GetMarkedSectors(true);
|
List<Sector> newsectors = General.Map.Map.GetMarkedSectors(true);
|
||||||
|
|
|
@ -115,7 +115,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
|
||||||
General.Map.Map.ClearAllSelected();
|
General.Map.Map.ClearAllSelected();
|
||||||
|
|
||||||
//mxd. Outer sectors may require some splittin...
|
//mxd. Outer sectors may require some splittin...
|
||||||
Tools.SplitOuterSectors(General.Map.Map.GetMarkedLinedefs(true));
|
if(General.Settings.SplitJoinedSectors) Tools.SplitOuterSectors(General.Map.Map.GetMarkedLinedefs(true));
|
||||||
|
|
||||||
// Edit new sectors?
|
// Edit new sectors?
|
||||||
if(BuilderPlug.Me.EditNewSector && (newsectors.Count > 0))
|
if(BuilderPlug.Me.EditNewSector && (newsectors.Count > 0))
|
||||||
|
|
|
@ -386,7 +386,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
|
||||||
General.Map.Map.Update();
|
General.Map.Map.Update();
|
||||||
|
|
||||||
//mxd. Outer sectors may require some splittin...
|
//mxd. Outer sectors may require some splittin...
|
||||||
Tools.SplitOuterSectors(General.Map.Map.GetMarkedLinedefs(true));
|
if(General.Settings.SplitJoinedSectors) Tools.SplitOuterSectors(General.Map.Map.GetMarkedLinedefs(true));
|
||||||
|
|
||||||
// Edit new sectors?
|
// Edit new sectors?
|
||||||
List<Sector> newsectors = General.Map.Map.GetMarkedSectors(true);
|
List<Sector> newsectors = General.Map.Map.GetMarkedSectors(true);
|
||||||
|
|
|
@ -18,7 +18,6 @@
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Collections.ObjectModel;
|
|
||||||
using System.Drawing;
|
using System.Drawing;
|
||||||
using System.Windows.Forms;
|
using System.Windows.Forms;
|
||||||
using CodeImp.DoomBuilder.Actions;
|
using CodeImp.DoomBuilder.Actions;
|
||||||
|
@ -848,8 +847,14 @@ namespace CodeImp.DoomBuilder.BuilderModes
|
||||||
index = 0;
|
index = 0;
|
||||||
foreach(Thing t in selectedthings)
|
foreach(Thing t in selectedthings)
|
||||||
{
|
{
|
||||||
if(!fixedrotationthingtypes.Contains(t.Type)) //mxd. Polyobject Anchors, I hate you!
|
//mxd. Added special Polyobj Anchor handling and Doom angle clamping
|
||||||
t.Rotate(Angle2D.Normalized(newthingangle[index]));
|
if(!fixedrotationthingtypes.Contains(t.Type))
|
||||||
|
{
|
||||||
|
int newangle = Angle2D.RealToDoom(Angle2D.Normalized(newthingangle[index]));
|
||||||
|
if(General.Map.Config.DoomThingRotationAngles) newangle = newangle / 45 * 45;
|
||||||
|
t.Rotate(newangle);
|
||||||
|
}
|
||||||
|
|
||||||
index++;
|
index++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -265,6 +265,10 @@ namespace CodeImp.DoomBuilder.BuilderModes
|
||||||
//mxd. Render sector tag labels
|
//mxd. Render sector tag labels
|
||||||
if(BuilderPlug.Me.ViewSelectionEffects && General.Map.FormatInterface.HasThingAction)
|
if(BuilderPlug.Me.ViewSelectionEffects && General.Map.FormatInterface.HasThingAction)
|
||||||
{
|
{
|
||||||
|
//mxd. sectorlabels will be null after switching map configuration from one
|
||||||
|
// without ThingAction to one with it while in Things mode
|
||||||
|
if(sectorlabels == null) SetupSectorLabels();
|
||||||
|
|
||||||
List<ITextLabel> torender = new List<ITextLabel>(sectorlabels.Count);
|
List<ITextLabel> torender = new List<ITextLabel>(sectorlabels.Count);
|
||||||
foreach(KeyValuePair<Sector, string[]> group in sectortexts)
|
foreach(KeyValuePair<Sector, string[]> group in sectortexts)
|
||||||
{
|
{
|
||||||
|
@ -1494,25 +1498,33 @@ namespace CodeImp.DoomBuilder.BuilderModes
|
||||||
General.Interface.DisplayStatus(StatusType.Action, "Rotated a thing.");
|
General.Interface.DisplayStatus(StatusType.Action, "Rotated a thing.");
|
||||||
}
|
}
|
||||||
|
|
||||||
//change angle
|
// Change angle
|
||||||
if(General.Interface.CtrlState) //point away
|
if(General.Interface.CtrlState) // Point away
|
||||||
{
|
{
|
||||||
foreach(Thing t in selected)
|
foreach(Thing t in selected)
|
||||||
{
|
{
|
||||||
ThingTypeInfo info = General.Map.Data.GetThingInfo(t.Type);
|
ThingTypeInfo info = General.Map.Data.GetThingInfo(t.Type);
|
||||||
if(info == null || info.Category == null || info.Category.Arrow == 0)
|
if(info == null || info.Category == null || info.Category.Arrow == 0)
|
||||||
continue;
|
continue;
|
||||||
t.Rotate(Vector2D.GetAngle(mousemappos, t.Position) + Angle2D.PI);
|
|
||||||
|
int newangle = Angle2D.RealToDoom(Vector2D.GetAngle(mousemappos, t.Position) + Angle2D.PI);
|
||||||
|
if(General.Map.Config.DoomThingRotationAngles) newangle = (newangle + 22) / 45 * 45;
|
||||||
|
|
||||||
|
t.Rotate(newangle);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else //point at
|
else // Point at cursor
|
||||||
{
|
{
|
||||||
foreach(Thing t in selected)
|
foreach(Thing t in selected)
|
||||||
{
|
{
|
||||||
ThingTypeInfo info = General.Map.Data.GetThingInfo(t.Type);
|
ThingTypeInfo info = General.Map.Data.GetThingInfo(t.Type);
|
||||||
if(info == null || info.Category == null || info.Category.Arrow == 0)
|
if(info == null || info.Category == null || info.Category.Arrow == 0)
|
||||||
continue;
|
continue;
|
||||||
t.Rotate(Vector2D.GetAngle(mousemappos, t.Position));
|
|
||||||
|
int newangle = Angle2D.RealToDoom(Vector2D.GetAngle(mousemappos, t.Position));
|
||||||
|
if(General.Map.Config.DoomThingRotationAngles) newangle = (newangle + 22) / 45 * 45;
|
||||||
|
|
||||||
|
t.Rotate(newangle);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1524,14 +1536,14 @@ namespace CodeImp.DoomBuilder.BuilderModes
|
||||||
[BeginAction("rotateclockwise")]
|
[BeginAction("rotateclockwise")]
|
||||||
public void RotateCW()
|
public void RotateCW()
|
||||||
{
|
{
|
||||||
RotateThings(-5);
|
RotateThings(General.Map.Config.DoomThingRotationAngles ? -45 : -5);
|
||||||
}
|
}
|
||||||
|
|
||||||
//mxd. rotate counterclockwise
|
//mxd. rotate counterclockwise
|
||||||
[BeginAction("rotatecounterclockwise")]
|
[BeginAction("rotatecounterclockwise")]
|
||||||
public void RotateCCW()
|
public void RotateCCW()
|
||||||
{
|
{
|
||||||
RotateThings(5);
|
RotateThings(General.Map.Config.DoomThingRotationAngles ? 45 : 5);
|
||||||
}
|
}
|
||||||
|
|
||||||
//mxd
|
//mxd
|
||||||
|
@ -1560,8 +1572,14 @@ namespace CodeImp.DoomBuilder.BuilderModes
|
||||||
General.Interface.DisplayStatus(StatusType.Action, "Rotated a thing.");
|
General.Interface.DisplayStatus(StatusType.Action, "Rotated a thing.");
|
||||||
}
|
}
|
||||||
|
|
||||||
//change angle
|
// Change angle
|
||||||
foreach(Thing t in selected) t.Rotate(General.ClampAngle(t.AngleDoom + increment));
|
foreach(Thing t in selected)
|
||||||
|
{
|
||||||
|
int newangle = t.AngleDoom + increment;
|
||||||
|
if(General.Map.Config.DoomThingRotationAngles) newangle = (newangle + 22) / 45 * 45;
|
||||||
|
|
||||||
|
t.Rotate(General.ClampAngle(newangle));
|
||||||
|
}
|
||||||
|
|
||||||
// Redraw screen
|
// Redraw screen
|
||||||
General.Interface.RedrawDisplay();
|
General.Interface.RedrawDisplay();
|
||||||
|
|
|
@ -3204,18 +3204,18 @@ namespace CodeImp.DoomBuilder.BuilderModes
|
||||||
[BeginAction("rotateclockwise")]
|
[BeginAction("rotateclockwise")]
|
||||||
public void RotateCW()
|
public void RotateCW()
|
||||||
{
|
{
|
||||||
RotateThingsAndTextures(5);
|
RotateThingsAndTextures(General.Map.Config.DoomThingRotationAngles ? 45 : 5, 5);
|
||||||
}
|
}
|
||||||
|
|
||||||
//mxd. Rotate counterclockwise
|
//mxd. Rotate counterclockwise
|
||||||
[BeginAction("rotatecounterclockwise")]
|
[BeginAction("rotatecounterclockwise")]
|
||||||
public void RotateCCW()
|
public void RotateCCW()
|
||||||
{
|
{
|
||||||
RotateThingsAndTextures(-5);
|
RotateThingsAndTextures(General.Map.Config.DoomThingRotationAngles ? -45 : -5, - 5);
|
||||||
}
|
}
|
||||||
|
|
||||||
//mxd
|
//mxd
|
||||||
private void RotateThingsAndTextures(int increment)
|
private void RotateThingsAndTextures(int thingangleincrement, int textureangleincrement)
|
||||||
{
|
{
|
||||||
PreAction(UndoGroup.ThingAngleChange);
|
PreAction(UndoGroup.ThingAngleChange);
|
||||||
|
|
||||||
|
@ -3227,7 +3227,10 @@ namespace CodeImp.DoomBuilder.BuilderModes
|
||||||
if(obj is BaseVisualThing)
|
if(obj is BaseVisualThing)
|
||||||
{
|
{
|
||||||
BaseVisualThing t = (BaseVisualThing)obj;
|
BaseVisualThing t = (BaseVisualThing)obj;
|
||||||
t.SetAngle(General.ClampAngle(t.Thing.AngleDoom + increment));
|
|
||||||
|
int newangle = t.Thing.AngleDoom + thingangleincrement;
|
||||||
|
if(General.Map.Config.DoomThingRotationAngles) newangle = newangle / 45 * 45;
|
||||||
|
t.SetAngle(General.ClampAngle(newangle));
|
||||||
|
|
||||||
// Visual sectors may be affected by this thing...
|
// Visual sectors may be affected by this thing...
|
||||||
if(thingdata.ContainsKey(t.Thing))
|
if(thingdata.ContainsKey(t.Thing))
|
||||||
|
@ -3247,12 +3250,12 @@ namespace CodeImp.DoomBuilder.BuilderModes
|
||||||
else if(obj is VisualFloor)
|
else if(obj is VisualFloor)
|
||||||
{
|
{
|
||||||
VisualFloor vf = (VisualFloor)obj;
|
VisualFloor vf = (VisualFloor)obj;
|
||||||
vf.OnChangeTextureRotation(General.ClampAngle(vf.GetControlSector().Fields.GetValue("rotationfloor", 0.0f) + increment));
|
vf.OnChangeTextureRotation(General.ClampAngle(vf.GetControlSector().Fields.GetValue("rotationfloor", 0.0f) + textureangleincrement));
|
||||||
}
|
}
|
||||||
else if(obj is VisualCeiling)
|
else if(obj is VisualCeiling)
|
||||||
{
|
{
|
||||||
VisualCeiling vc = (VisualCeiling)obj;
|
VisualCeiling vc = (VisualCeiling)obj;
|
||||||
vc.OnChangeTextureRotation(General.ClampAngle(vc.GetControlSector().Fields.GetValue("rotationceiling", 0.0f) + increment));
|
vc.OnChangeTextureRotation(General.ClampAngle(vc.GetControlSector().Fields.GetValue("rotationceiling", 0.0f) + textureangleincrement));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue