diff --git a/Build/Configurations/Hexen_HexenHexen.cfg b/Build/Configurations/Hexen_HexenHexen.cfg
index 2de8824..574bcd0 100644
--- a/Build/Configurations/Hexen_HexenHexen.cfg
+++ b/Build/Configurations/Hexen_HexenHexen.cfg
@@ -32,6 +32,9 @@ include("Includes\\Game_Hexen.cfg");
//mxd. No DECORATE support in vanilla
decorategames = "";
+//mxd. Don't do vanilla-style thing rotation angle clamping
+doomthingrotationangles = false;
+
// Default thing filters
// (these are not required, just useful for new users)
thingsfilters
diff --git a/Build/Configurations/Includes/Doom_common.cfg b/Build/Configurations/Includes/Doom_common.cfg
index c8f96fe..5ced9a4 100644
--- a/Build/Configurations/Includes/Doom_common.cfg
+++ b/Build/Configurations/Includes/Doom_common.cfg
@@ -17,6 +17,9 @@ common
defaultflatscale = 1.0f;
scaledtextureoffsets = true;
+ //mxd. Do vanilla-style thing rotation angle clamping
+ doomthingrotationangles = true;
+
// Texture sources
textures
{
diff --git a/Build/Configurations/SRB2-22.cfg b/Build/Configurations/SRB2-22.cfg
index 352e1f8..abbb59e 100644
--- a/Build/Configurations/SRB2-22.cfg
+++ b/Build/Configurations/SRB2-22.cfg
@@ -45,6 +45,9 @@ formatinterface = "SRB2MapSetIO";
//Maximum safe map size check (0 means skip check)
safeboundary = 0;
+//Don't do vanilla-style thing rotation angle clamping
+doomthingrotationangles = false;
+
//Sky textures for vanilla maps
defaultskytextures
{
diff --git a/Help/gc_basicsettings.html b/Help/gc_basicsettings.html
index dfbc58b..db65743 100644
--- a/Help/gc_basicsettings.html
+++ b/Help/gc_basicsettings.html
@@ -151,9 +151,13 @@ damagetypes = "None BFGSplash Drowning Slime";
Arguments for the linedef action number to put on the lines when making a door.
doomlightlevels (boolean)
- Set this to false to use linear lighting in Doom Builder. Normally Doom Builder uses a simulation of Doom's light levels.
+ Set this to false to use linear lighting in Doom Builder. Normally Doom Builder uses a simulation of Doom's light levels.
Default value is true.
+ doomthingrotationangles (boolean) - GZDB only.
+ When set to true, editor actions related to changing thing angle will snap the resulting angle to 45 degree increments.
+ Default value is false.
+
start3dmode (integer)
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.
diff --git a/Source/Core/Builder.csproj b/Source/Core/Builder.csproj
index baebb5b..db2ad86 100644
--- a/Source/Core/Builder.csproj
+++ b/Source/Core/Builder.csproj
@@ -1193,6 +1193,7 @@
+
diff --git a/Source/Core/Config/GameConfiguration.cs b/Source/Core/Config/GameConfiguration.cs
index de90fa5..b41fbea 100644
--- a/Source/Core/Config/GameConfiguration.cs
+++ b/Source/Core/Config/GameConfiguration.cs
@@ -87,6 +87,7 @@ namespace CodeImp.DoomBuilder.Config
private readonly int bottomboundary;
private readonly int safeboundary; //mxd
private readonly bool doomlightlevels;
+ private readonly bool doomthingrotationangles; //mxd
private readonly string actionspecialhelp; //mxd
private readonly string thingclasshelp; //mxd
private readonly bool sidedefcompressionignoresaction; //mxd
@@ -215,6 +216,7 @@ namespace CodeImp.DoomBuilder.Config
public int BottomBoundary { get { return bottomboundary; } }
public int SafeBoundary { get { return safeboundary; } } //mxd
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 ThingClassHelp { get { return thingclasshelp; } } //mxd
internal bool SidedefCompressionIgnoresAction { get { return sidedefcompressionignoresaction; } } //mxd
@@ -374,6 +376,7 @@ namespace CodeImp.DoomBuilder.Config
bottomboundary = cfg.ReadSetting("bottomboundary", -32768);
safeboundary = cfg.ReadSetting("safeboundary", 32767); //mxd
doomlightlevels = cfg.ReadSetting("doomlightlevels", true);
+ doomthingrotationangles = cfg.ReadSetting("doomthingrotationangles", false); //mxd
actionspecialhelp = cfg.ReadSetting("actionspecialhelp", string.Empty); //mxd
thingclasshelp = cfg.ReadSetting("thingclasshelp", string.Empty); //mxd
sidedefcompressionignoresaction = cfg.ReadSetting("sidedefcompressionignoresaction", false); //mxd
diff --git a/Source/Core/Config/ProgramConfiguration.cs b/Source/Core/Config/ProgramConfiguration.cs
index 9182488..95f713b 100644
--- a/Source/Core/Config/ProgramConfiguration.cs
+++ b/Source/Core/Config/ProgramConfiguration.cs
@@ -92,6 +92,7 @@ namespace CodeImp.DoomBuilder.Config
private bool keeptexturefilterfocused; //mxd
private SplitLineBehavior splitlinebehavior; //mxd
private MergeGeometryMode mergegeomode; //mxd
+ private bool splitjoinedsectors; //mxd
private bool usehighlight; //mxd
private bool switchviewmodes; //mxd
@@ -217,7 +218,8 @@ namespace CodeImp.DoomBuilder.Config
public bool KeepTextureFilterFocused { get { return keeptexturefilterfocused; } internal set { keeptexturefilterfocused = value; } } //mxd
public SplitLineBehavior SplitLineBehavior { get { return splitlinebehavior; } set { splitlinebehavior = 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
public bool UseHighlight
{
@@ -376,6 +378,7 @@ namespace CodeImp.DoomBuilder.Config
keeptexturefilterfocused = cfg.ReadSetting("keeptexturefilterfocused", true); //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
+ splitjoinedsectors = cfg.ReadSetting("splitjoinedsectors", true); //mxd
usehighlight = cfg.ReadSetting("usehighlight", true); //mxd
switchviewmodes = cfg.ReadSetting("switchviewmodes", false); //mxd
@@ -502,6 +505,7 @@ namespace CodeImp.DoomBuilder.Config
cfg.WriteSetting("keeptexturefilterfocused", keeptexturefilterfocused); //mxd
cfg.WriteSetting("splitlinebehavior", (int)splitlinebehavior); //mxd
cfg.WriteSetting("mergegeometrymode", (int)mergegeomode); //mxd
+ cfg.WriteSetting("splitjoinedsectors", splitjoinedsectors); //mxd
cfg.WriteSetting("usehighlight", usehighlight); //mxd
cfg.WriteSetting("switchviewmodes", switchviewmodes); //mxd
diff --git a/Source/Core/GZBuilder/Controls/AngleControl.cs b/Source/Core/GZBuilder/Controls/AngleControl.cs
index f971c4a..41961e5 100644
--- a/Source/Core/GZBuilder/Controls/AngleControl.cs
+++ b/Source/Core/GZBuilder/Controls/AngleControl.cs
@@ -33,6 +33,8 @@ namespace CodeImp.DoomBuilder.GZBuilder.Controls
private Point startClick; //JBR
+ private bool doomangleclamping;
+
//UI colors
private readonly Color fillColor = SystemColors.Window;
private readonly Color fillInactiveColor = SystemColors.Control;
@@ -53,6 +55,7 @@ namespace CodeImp.DoomBuilder.GZBuilder.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 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;
[Description("Allow loop changing, setting to false will restore old behaviour.")]
@@ -295,7 +298,7 @@ namespace CodeImp.DoomBuilder.GZBuilder.Controls
startClick = new Point(e.X, e.Y);
int thisAngle = XYToDegrees(startClick, origin);
- if (e.Button == MouseButtons.Left)
+ if(e.Button == MouseButtons.Left || doomangleclamping)
{
thisAngle = (int)Math.Round(thisAngle / 45f) * 45;
if(thisAngle == 360) thisAngle = 0;
diff --git a/Source/Core/General/MapManager.cs b/Source/Core/General/MapManager.cs
index ae7cada..f6730f1 100644
--- a/Source/Core/General/MapManager.cs
+++ b/Source/Core/General/MapManager.cs
@@ -2394,7 +2394,13 @@ namespace CodeImp.DoomBuilder
General.Plugins.ReloadResources();
// 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
General.MainWindow.DisplayStatus(oldstatus);
diff --git a/Source/Core/Properties/Resources.Designer.cs b/Source/Core/Properties/Resources.Designer.cs
index 2247f75..27b305b 100644
--- a/Source/Core/Properties/Resources.Designer.cs
+++ b/Source/Core/Properties/Resources.Designer.cs
@@ -1328,9 +1328,13 @@ namespace CodeImp.DoomBuilder.Properties {
}
}
- ///
- /// Looks up a localized resource of type System.Drawing.Bitmap.
- ///
+ internal static System.Drawing.Bitmap SplitSectors {
+ get {
+ object obj = ResourceManager.GetObject("SplitSectors", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
internal static System.Drawing.Bitmap Status0 {
get {
object obj = ResourceManager.GetObject("Status0", resourceCulture);
diff --git a/Source/Core/Properties/Resources.resx b/Source/Core/Properties/Resources.resx
index 4fb9d7e..45fc822 100644
--- a/Source/Core/Properties/Resources.resx
+++ b/Source/Core/Properties/Resources.resx
@@ -607,6 +607,9 @@
..\Resources\MergeGeoRemoveLines.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+ ..\Resources\SplitSectors.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
..\Resources\Snap1mp.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
diff --git a/Source/Core/Resources/Actions.cfg b/Source/Core/Resources/Actions.cfg
index 774c13c..aba2dde 100644
--- a/Source/Core/Resources/Actions.cfg
+++ b/Source/Core/Resources/Actions.cfg
@@ -529,6 +529,17 @@ toggleautomerge
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
toggleautoclearsidetextures
{
diff --git a/Source/Core/Resources/SplitSectors.png b/Source/Core/Resources/SplitSectors.png
new file mode 100644
index 0000000..a259ed0
Binary files /dev/null and b/Source/Core/Resources/SplitSectors.png differ
diff --git a/Source/Core/Windows/MainForm.Designer.cs b/Source/Core/Windows/MainForm.Designer.cs
index a4c9ed4..dcc9d84 100644
--- a/Source/Core/Windows/MainForm.Designer.cs
+++ b/Source/Core/Windows/MainForm.Designer.cs
@@ -74,6 +74,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.itemsplitjoinedsectors = 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();
@@ -193,6 +194,7 @@ namespace CodeImp.DoomBuilder.Windows
this.buttonsnaptogrid = new System.Windows.Forms.ToolStripButton();
this.buttontoggledynamicgrid = 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.buttontogglenightspath = new System.Windows.Forms.ToolStripButton();
this.seperatorgeometry = new System.Windows.Forms.ToolStripSeparator();
@@ -533,6 +535,7 @@ namespace CodeImp.DoomBuilder.Windows
this.itemsnaptogrid,
this.itemdynamicgridsize,
this.itemautomerge,
+ this.itemsplitjoinedsectors,
this.itemautoclearsidetextures,
this.seperatoreditgeometry,
this.itemgridinc,
@@ -647,6 +650,17 @@ namespace CodeImp.DoomBuilder.Windows
this.itemautomerge.Text = "Snap to &Geometry";
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
//
this.itemautoclearsidetextures.Checked = true;
@@ -1329,6 +1343,7 @@ namespace CodeImp.DoomBuilder.Windows
this.buttonsnaptogrid,
this.buttontoggledynamicgrid,
this.buttonautomerge,
+ this.buttonsplitjoinedsectors,
this.buttonautoclearsidetextures,
this.buttontogglenightspath,
this.seperatorgeometry,
@@ -1844,6 +1859,19 @@ namespace CodeImp.DoomBuilder.Windows
this.buttonautomerge.Text = "Snap to Geometry";
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
//
this.buttonautoclearsidetextures.Checked = true;
@@ -2754,6 +2782,8 @@ namespace CodeImp.DoomBuilder.Windows
private System.Windows.Forms.ToolStripMenuItem itemsnaptogrid;
private System.Windows.Forms.ToolStripButton buttonautomerge;
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.ToolStripSeparator separatorgzmodes;
private System.Windows.Forms.ToolStripSeparator seperatorfilesave;
diff --git a/Source/Core/Windows/MainForm.cs b/Source/Core/Windows/MainForm.cs
index 37a2442..aa5c93c 100644
--- a/Source/Core/Windows/MainForm.cs
+++ b/Source/Core/Windows/MainForm.cs
@@ -2107,6 +2107,8 @@ namespace CodeImp.DoomBuilder.Windows
buttontogglenightspath.Visible = maploaded && General.Map.SRB2;
buttontogglenightspath.Checked = General.Settings.RenderNiGHTSPath;
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
buttontest.Visible = General.Settings.ToolbarTesting && maploaded;
@@ -2747,6 +2749,7 @@ namespace CodeImp.DoomBuilder.Windows
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;
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
itemdynamicgridsize.Enabled = (General.Map != null); //mxd
itemdynamicgridsize.Checked = General.Settings.DynamicGridSize; //mxd
@@ -2879,6 +2882,16 @@ namespace CodeImp.DoomBuilder.Windows
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
[BeginAction("togglebrightness")]
internal void ToggleBrightness()
diff --git a/Source/Core/Windows/ThingEditForm.cs b/Source/Core/Windows/ThingEditForm.cs
index 3be98d0..454a665 100644
--- a/Source/Core/Windows/ThingEditForm.cs
+++ b/Source/Core/Windows/ThingEditForm.cs
@@ -115,6 +115,9 @@ namespace CodeImp.DoomBuilder.Windows
posZ.AllowDecimal = true;
}
+ //mxd. Use doom angle clamping?
+ anglecontrol.DoomAngleClamping = General.Map.Config.DoomThingRotationAngles;
+
//mxd. Arrange inteface
int targetheight;
if(General.Map.FormatInterface.HasThingAction)
@@ -411,7 +414,12 @@ namespace CodeImp.DoomBuilder.Windows
foreach(Thing t in things)
{
// 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
float px = General.Clamp(t.Position.x, General.Map.Config.LeftBoundary, General.Map.Config.RightBoundary);
diff --git a/Source/Core/Windows/ThingEditFormUDMF.cs b/Source/Core/Windows/ThingEditFormUDMF.cs
index 06405e7..70aa01e 100644
--- a/Source/Core/Windows/ThingEditFormUDMF.cs
+++ b/Source/Core/Windows/ThingEditFormUDMF.cs
@@ -147,6 +147,9 @@ namespace CodeImp.DoomBuilder.Windows
posZ.AllowDecimal = true;
}
+ //mxd. Use doom angle clamping?
+ anglecontrol.DoomAngleClamping = General.Map.Config.DoomThingRotationAngles;
+
// Value linking
scale.LinkValues = linkscale;
@@ -461,7 +464,12 @@ namespace CodeImp.DoomBuilder.Windows
{
// Coordination
//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(cbrandomroll.Checked) t.SetRoll(General.Random(0, 359));
diff --git a/Source/Plugins/BuilderEffects/Interface/JitterThingsForm.cs b/Source/Plugins/BuilderEffects/Interface/JitterThingsForm.cs
index cc3c2b8..5802e48 100644
--- a/Source/Plugins/BuilderEffects/Interface/JitterThingsForm.cs
+++ b/Source/Plugins/BuilderEffects/Interface/JitterThingsForm.cs
@@ -201,9 +201,13 @@ namespace CodeImp.DoomBuilder.BuilderEffects
private void ApplyRotation(int ammount)
{
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();
}
diff --git a/Source/Plugins/BuilderModes/ClassicModes/DrawCurveMode.cs b/Source/Plugins/BuilderModes/ClassicModes/DrawCurveMode.cs
index 13c895f..71e34f7 100644
--- a/Source/Plugins/BuilderModes/ClassicModes/DrawCurveMode.cs
+++ b/Source/Plugins/BuilderModes/ClassicModes/DrawCurveMode.cs
@@ -249,7 +249,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
General.Map.Map.Update();
//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?
List newsectors = General.Map.Map.GetMarkedSectors(true);
diff --git a/Source/Plugins/BuilderModes/ClassicModes/DrawGeometryMode.cs b/Source/Plugins/BuilderModes/ClassicModes/DrawGeometryMode.cs
index 364f349..346cac8 100644
--- a/Source/Plugins/BuilderModes/ClassicModes/DrawGeometryMode.cs
+++ b/Source/Plugins/BuilderModes/ClassicModes/DrawGeometryMode.cs
@@ -781,7 +781,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
General.Map.Map.Update();
//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?
List newsectors = General.Map.Map.GetMarkedSectors(true);
diff --git a/Source/Plugins/BuilderModes/ClassicModes/DrawGridMode.cs b/Source/Plugins/BuilderModes/ClassicModes/DrawGridMode.cs
index 30792f4..9d3be66 100644
--- a/Source/Plugins/BuilderModes/ClassicModes/DrawGridMode.cs
+++ b/Source/Plugins/BuilderModes/ClassicModes/DrawGridMode.cs
@@ -115,7 +115,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
General.Map.Map.ClearAllSelected();
//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?
if(BuilderPlug.Me.EditNewSector && (newsectors.Count > 0))
diff --git a/Source/Plugins/BuilderModes/ClassicModes/DrawRectangleMode.cs b/Source/Plugins/BuilderModes/ClassicModes/DrawRectangleMode.cs
index 5245544..37f6512 100644
--- a/Source/Plugins/BuilderModes/ClassicModes/DrawRectangleMode.cs
+++ b/Source/Plugins/BuilderModes/ClassicModes/DrawRectangleMode.cs
@@ -386,7 +386,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
General.Map.Map.Update();
//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?
List newsectors = General.Map.Map.GetMarkedSectors(true);
diff --git a/Source/Plugins/BuilderModes/ClassicModes/EditSelectionMode.cs b/Source/Plugins/BuilderModes/ClassicModes/EditSelectionMode.cs
index bae3512..fdda079 100644
--- a/Source/Plugins/BuilderModes/ClassicModes/EditSelectionMode.cs
+++ b/Source/Plugins/BuilderModes/ClassicModes/EditSelectionMode.cs
@@ -18,7 +18,6 @@
using System;
using System.Collections.Generic;
-using System.Collections.ObjectModel;
using System.Drawing;
using System.Windows.Forms;
using CodeImp.DoomBuilder.Actions;
@@ -849,8 +848,14 @@ namespace CodeImp.DoomBuilder.BuilderModes
index = 0;
foreach(Thing t in selectedthings)
{
- if(!fixedrotationthingtypes.Contains(t.SRB2Type) && newthingangle[index] != thingangle[index]) //mxd. Polyobject Anchors, I hate you!
- t.Rotate(Angle2D.Normalized(newthingangle[index]));
+ //mxd. Added special Polyobj Anchor handling and Doom angle clamping
+ if(!fixedrotationthingtypes.Contains(t.SRB2Type))
+ {
+ int newangle = Angle2D.RealToDoom(Angle2D.Normalized(newthingangle[index]));
+ if(General.Map.Config.DoomThingRotationAngles) newangle = newangle / 45 * 45;
+ t.Rotate(newangle);
+ }
+
index++;
}
diff --git a/Source/Plugins/BuilderModes/ClassicModes/ThingsMode.cs b/Source/Plugins/BuilderModes/ClassicModes/ThingsMode.cs
index 6b57dd3..ec05ce2 100644
--- a/Source/Plugins/BuilderModes/ClassicModes/ThingsMode.cs
+++ b/Source/Plugins/BuilderModes/ClassicModes/ThingsMode.cs
@@ -284,6 +284,10 @@ namespace CodeImp.DoomBuilder.BuilderModes
//mxd. Render sector tag labels
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 torender = new List(sectorlabels.Count);
foreach(KeyValuePair group in sectortexts)
{
@@ -1558,25 +1562,33 @@ namespace CodeImp.DoomBuilder.BuilderModes
General.Interface.DisplayStatus(StatusType.Action, "Rotated a thing.");
}
- //change angle
- if(General.Interface.CtrlState) //point away
+ // Change angle
+ if(General.Interface.CtrlState) // Point away
{
foreach(Thing t in selected)
{
ThingTypeInfo info = General.Map.Data.GetThingInfo(t.SRB2Type);
if(info == null || info.Category == null || info.Category.Arrow == 0)
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)
{
ThingTypeInfo info = General.Map.Data.GetThingInfo(t.SRB2Type);
if(info == null || info.Category == null || info.Category.Arrow == 0)
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);
}
}
@@ -1601,14 +1613,14 @@ namespace CodeImp.DoomBuilder.BuilderModes
[BeginAction("rotateclockwise")]
public void RotateCW()
{
- RotateThings(-5);
+ RotateThings(General.Map.Config.DoomThingRotationAngles ? -45 : -5);
}
//mxd. rotate counterclockwise
[BeginAction("rotatecounterclockwise")]
public void RotateCCW()
{
- RotateThings(5);
+ RotateThings(General.Map.Config.DoomThingRotationAngles ? 45 : 5);
}
//mxd
@@ -1637,8 +1649,14 @@ namespace CodeImp.DoomBuilder.BuilderModes
General.Interface.DisplayStatus(StatusType.Action, "Rotated a thing.");
}
- //change angle
- foreach(Thing t in selected) t.Rotate(General.ClampAngle(t.AngleDoom + increment));
+ // Change angle
+ 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
General.Interface.RedrawDisplay();
diff --git a/Source/Plugins/BuilderModes/VisualModes/BaseVisualMode.cs b/Source/Plugins/BuilderModes/VisualModes/BaseVisualMode.cs
index 28c8199..404d9c5 100644
--- a/Source/Plugins/BuilderModes/VisualModes/BaseVisualMode.cs
+++ b/Source/Plugins/BuilderModes/VisualModes/BaseVisualMode.cs
@@ -3519,18 +3519,18 @@ namespace CodeImp.DoomBuilder.BuilderModes
[BeginAction("rotateclockwise")]
public void RotateCW()
{
- RotateThingsAndTextures(5);
+ RotateThingsAndTextures(General.Map.Config.DoomThingRotationAngles ? 45 : 5, 5);
}
//mxd. Rotate counterclockwise
[BeginAction("rotatecounterclockwise")]
public void RotateCCW()
{
- RotateThingsAndTextures(-5);
+ RotateThingsAndTextures(General.Map.Config.DoomThingRotationAngles ? -45 : -5, - 5);
}
//mxd
- private void RotateThingsAndTextures(int increment)
+ private void RotateThingsAndTextures(int thingangleincrement, int textureangleincrement)
{
PreAction(UndoGroup.ThingAngleChange);
@@ -3542,7 +3542,10 @@ namespace CodeImp.DoomBuilder.BuilderModes
if(obj is BaseVisualThing)
{
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...
if(thingdata.ContainsKey(t.Thing))
@@ -3562,12 +3565,12 @@ namespace CodeImp.DoomBuilder.BuilderModes
else if(obj is VisualFloor)
{
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)
{
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));
}
}