diff --git a/Source/Core/Editing/EditMode.cs b/Source/Core/Editing/EditMode.cs index a6e7775..bfc63a9 100644 --- a/Source/Core/Editing/EditMode.cs +++ b/Source/Core/Editing/EditMode.cs @@ -256,6 +256,10 @@ namespace CodeImp.DoomBuilder.Editing //mxd. map testing events public virtual bool OnMapTestBegin(bool testFromCurrentPosition) { return true; } //called before test map is launched. Returns false if map launch is impossible public virtual void OnMapTestEnd(bool testFromCurrentPosition) { } //called after game engine is closed + + // This should be called by global actions (i.e. that are not part of an editing mode) when they changed map elements, + // so that the mode can react to it (for example by rebuilding a blockmap) + public virtual void OnMapElementsChanged() { } #endregion } diff --git a/Source/Core/General/MapManager.cs b/Source/Core/General/MapManager.cs index 4a1e5b0..2c46492 100644 --- a/Source/Core/General/MapManager.cs +++ b/Source/Core/General/MapManager.cs @@ -2592,6 +2592,9 @@ namespace CodeImp.DoomBuilder undoredo.WithdrawUndo(); } + // Let the current editing mode know that we changed something + General.Editing.Mode.OnMapElementsChanged(); + // Done General.Interface.RedrawDisplay(); Cursor.Current = Cursors.Default; @@ -2651,6 +2654,9 @@ namespace CodeImp.DoomBuilder // Map is changed General.Map.IsChanged = true; + // Let the current editing mode know that we changed something + General.Editing.Mode.OnMapElementsChanged(); + // Done General.Interface.RedrawDisplay(); Cursor.Current = Cursors.Default; diff --git a/Source/Plugins/BuilderModes/ClassicModes/LinedefsMode.cs b/Source/Plugins/BuilderModes/ClassicModes/LinedefsMode.cs index 668ba23..752ebeb 100644 --- a/Source/Plugins/BuilderModes/ClassicModes/LinedefsMode.cs +++ b/Source/Plugins/BuilderModes/ClassicModes/LinedefsMode.cs @@ -1287,6 +1287,16 @@ namespace CodeImp.DoomBuilder.BuilderModes return base.OnCopyBegin(); } + /// + /// If map elements have changed the blockmap needs to be recreated. + /// + public override void OnMapElementsChanged() + { + base.OnMapElementsChanged(); + + CreateBlockmap(); + } + //mxd private void RenderComment(Linedef l) { diff --git a/Source/Plugins/BuilderModes/ClassicModes/SectorsMode.cs b/Source/Plugins/BuilderModes/ClassicModes/SectorsMode.cs index 0fac0f2..92f55f4 100644 --- a/Source/Plugins/BuilderModes/ClassicModes/SectorsMode.cs +++ b/Source/Plugins/BuilderModes/ClassicModes/SectorsMode.cs @@ -1545,6 +1545,17 @@ namespace CodeImp.DoomBuilder.BuilderModes base.OnRedoEnd(); //mxd } + + /// + /// If map elements have changed the blockmap needs to be recreated. + /// + public override void OnMapElementsChanged() + { + base.OnMapElementsChanged(); + + CreateBlockmap(); + } + //mxd public override void OnViewSelectionNumbersChanged(bool enabled) { diff --git a/Source/Plugins/BuilderModes/ClassicModes/VerticesMode.cs b/Source/Plugins/BuilderModes/ClassicModes/VerticesMode.cs index 7a4ed12..b36ee51 100644 --- a/Source/Plugins/BuilderModes/ClassicModes/VerticesMode.cs +++ b/Source/Plugins/BuilderModes/ClassicModes/VerticesMode.cs @@ -752,7 +752,17 @@ namespace CodeImp.DoomBuilder.BuilderModes return base.OnCopyBegin(); } - + + /// + /// If map elements have changed the blockmap needs to be recreated. + /// + public override void OnMapElementsChanged() + { + base.OnMapElementsChanged(); + + CreateBlockmap(); + } + #endregion #region ================== Actions