diff --git a/Source/Core/Editing/EditMode.cs b/Source/Core/Editing/EditMode.cs index e6b12ececbeee9543261f24d87a0cb45323f4839..6e7a62550287f9c466075f8eec2aa2728f105af8 100644 --- a/Source/Core/Editing/EditMode.cs +++ b/Source/Core/Editing/EditMode.cs @@ -224,8 +224,8 @@ namespace CodeImp.DoomBuilder.Editing // Return false to cancel undo action public virtual bool OnUndoBegin() { return true; } public virtual bool OnRedoBegin() { return true; } - public virtual void OnUndoEnd() { } - public virtual void OnRedoEnd() { } + public virtual void OnUndoEnd() { General.Map.Renderer2D.UpdateExtraFloorFlag(); } //mxd + public virtual void OnRedoEnd() { General.Map.Renderer2D.UpdateExtraFloorFlag(); } //mxd // Interface events public virtual void OnMouseClick(MouseEventArgs e) { } diff --git a/Source/Core/Map/Sector.cs b/Source/Core/Map/Sector.cs index 4f9da353add575aa894ad39aa31f46420bc5877e..6341c010102cbd52eb2d0f5979e2cb075312573e 100644 --- a/Source/Core/Map/Sector.cs +++ b/Source/Core/Map/Sector.cs @@ -520,7 +520,7 @@ namespace CodeImp.DoomBuilder.Map // This checks if the given point is inside the sector polygon public bool Intersect(Vector2D p) { - if (MapSet.GetCSFieldBits(p, bbox) != 0) return false; //mxd. Check bounding box + if(!bbox.Contains(p.x, p.y)) return false; //mxd. Check bounding box first uint c = 0; diff --git a/Source/Plugins/BuilderModes/ClassicModes/BaseClassicMode.cs b/Source/Plugins/BuilderModes/ClassicModes/BaseClassicMode.cs index 614a885bcb47fc1a7698f292be739ad35252f41b..427da14e4469699ee633d7a883e0cd5d5df92ef7 100644 --- a/Source/Plugins/BuilderModes/ClassicModes/BaseClassicMode.cs +++ b/Source/Plugins/BuilderModes/ClassicModes/BaseClassicMode.cs @@ -147,20 +147,6 @@ namespace CodeImp.DoomBuilder.BuilderModes marqueSelectionIncludesThings = General.Interface.AltState; } - //mxd - public override void OnUndoEnd() - { - General.Map.Renderer2D.UpdateExtraFloorFlag(); - base.OnUndoEnd(); - } - - //mxd - public override void OnRedoEnd() - { - General.Map.Renderer2D.UpdateExtraFloorFlag(); - base.OnRedoEnd(); - } - //mxd public override void OnMapTestEnd(bool testFromCurrentPosition) { diff --git a/Source/Plugins/BuilderModes/ClassicModes/SectorsMode.cs b/Source/Plugins/BuilderModes/ClassicModes/SectorsMode.cs index 5751554de278d6a6c12bbb9a19c0368c5c0b929e..ba056a0612b78504e6edd60190b290d882fd522b 100644 --- a/Source/Plugins/BuilderModes/ClassicModes/SectorsMode.cs +++ b/Source/Plugins/BuilderModes/ClassicModes/SectorsMode.cs @@ -529,7 +529,6 @@ namespace CodeImp.DoomBuilder.BuilderModes { foreach(Thing t in General.Map.ThingsFilter.VisibleThings) { - t.DetermineSector(); if(t.Sector != s) continue; t.Selected = s.Selected; } @@ -658,6 +657,9 @@ namespace CodeImp.DoomBuilder.BuilderModes //mxd. Update the tooltip BuilderPlug.Me.MenusForm.SyncronizeThingEditButton.ToolTipText = "Synchronized Things Editing" + Environment.NewLine + BuilderPlug.Me.MenusForm.SyncronizeThingEditSectorsItem.ToolTipText; + //mxd. Determine thing sectors. Cause SyncronizeThingEdit requires that + foreach(Thing t in General.Map.Map.Things) t.DetermineSector(); + //mxd. Select things as well? if(BuilderPlug.Me.SyncronizeThingEdit) { @@ -666,7 +668,6 @@ namespace CodeImp.DoomBuilder.BuilderModes { foreach(Thing t in General.Map.Map.Things) { - t.DetermineSector(); if(!t.Selected && t.Sector != null && sectors.Contains(t.Sector)) t.Selected = true; } @@ -1180,7 +1181,7 @@ namespace CodeImp.DoomBuilder.BuilderModes new Line2D(selectionrect.Left, selectionrect.Bottom, selectionrect.Left, selectionrect.Top) }; - //mxd. collect changed sectors + //mxd. (de)select sectors switch(marqueSelectionMode) { case MarqueSelectionMode.SELECT: diff --git a/Source/Plugins/BuilderModes/VisualModes/VisualMiddle3D.cs b/Source/Plugins/BuilderModes/VisualModes/VisualMiddle3D.cs index 96877be431e269ceb49e694e5bff8d964bfcf8d3..9809707a3de7c06af49391715c40f975a7a9e888 100644 --- a/Source/Plugins/BuilderModes/VisualModes/VisualMiddle3D.cs +++ b/Source/Plugins/BuilderModes/VisualModes/VisualMiddle3D.cs @@ -63,10 +63,14 @@ namespace CodeImp.DoomBuilder.BuilderModes public override bool Setup() { return this.Setup(this.extrafloor); } public bool Setup(Effect3DFloor extrafloor) { - Vector2D vl, vr; Sidedef sourceside = extrafloor.Linedef.Front; this.extrafloor = extrafloor; + //mxd. Extrafloor may've become invalid during undo/redo... + if(sourceside == null) return false; + + Vector2D vl, vr; + //mxd. lightfog flag support int lightvalue; bool lightabsolute; diff --git a/Source/Plugins/BuilderModes/VisualModes/VisualMiddleBack.cs b/Source/Plugins/BuilderModes/VisualModes/VisualMiddleBack.cs index eacdd5719316b3810dd70eab94bf67db6db536e7..b98f555cd133ced0e563a3770669245e6d786795 100644 --- a/Source/Plugins/BuilderModes/VisualModes/VisualMiddleBack.cs +++ b/Source/Plugins/BuilderModes/VisualModes/VisualMiddleBack.cs @@ -40,11 +40,14 @@ namespace CodeImp.DoomBuilder.BuilderModes { public override bool Setup() { return this.Setup(this.extrafloor); } public bool Setup(Effect3DFloor extrafloor) { - Vector2D vl, vr; - Sidedef sourceside = extrafloor.Linedef.Front; this.extrafloor = extrafloor; + //mxd. Extrafloor may've become invalid during undo/redo... + if(sourceside == null) return false; + + Vector2D vl, vr; + //mxd. lightfog flag support int lightvalue; bool lightabsolute;