diff --git a/Source/Core/Editing/EditMode.cs b/Source/Core/Editing/EditMode.cs index 6c8c35902f330fa1a5853e1ecafc203eace5c4a7..a2c4aa563851867290cde0234599ecfa2a68b3c0 100755 --- a/Source/Core/Editing/EditMode.cs +++ b/Source/Core/Editing/EditMode.cs @@ -260,6 +260,10 @@ namespace CodeImp.DoomBuilder.Editing // Script events public virtual bool OnScriptRunBegin() { return true; } public virtual void OnScriptRunEnd() { } + + // 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 ace4896608f7f8130015b6390b5aec51b3c7fdd7..20b06028b12635af653fcb48f9a21bf651565487 100755 --- a/Source/Core/General/MapManager.cs +++ b/Source/Core/General/MapManager.cs @@ -2643,6 +2643,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; diff --git a/Source/Plugins/BuilderModes/ClassicModes/LinedefsMode.cs b/Source/Plugins/BuilderModes/ClassicModes/LinedefsMode.cs index c7e2ee8bd90eee4f35ac540d79ad0bfe15a3d950..cbd3261fcf86706df1a0bce77f1630a35f058931 100755 --- a/Source/Plugins/BuilderModes/ClassicModes/LinedefsMode.cs +++ b/Source/Plugins/BuilderModes/ClassicModes/LinedefsMode.cs @@ -1217,6 +1217,16 @@ namespace CodeImp.DoomBuilder.BuilderModes return base.OnCopyBegin(); } + /// <summary> + /// If map elements have changed the blockmap needs to be recreated. + /// </summary> + 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 7a3a6bcb1ec435fa210877c15c8e22a0d7b63c6c..9bf15d9b0a17e675e32b3a49b16e43b67d46a6b0 100755 --- a/Source/Plugins/BuilderModes/ClassicModes/SectorsMode.cs +++ b/Source/Plugins/BuilderModes/ClassicModes/SectorsMode.cs @@ -1596,6 +1596,16 @@ namespace CodeImp.DoomBuilder.BuilderModes General.Interface.RedrawDisplay(); } + /// <summary> + /// If map elements have changed the blockmap needs to be recreated. + /// </summary> + 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 ab07bd24ec6d9fa3fef486fbda7472bf31f4246a..ae68e7be3e9d86ea8ead33d420ea08497036a5e1 100755 --- a/Source/Plugins/BuilderModes/ClassicModes/VerticesMode.cs +++ b/Source/Plugins/BuilderModes/ClassicModes/VerticesMode.cs @@ -759,7 +759,17 @@ namespace CodeImp.DoomBuilder.BuilderModes return base.OnCopyBegin(); } - + + /// <summary> + /// If map elements have changed the blockmap needs to be recreated. + /// </summary> + public override void OnMapElementsChanged() + { + base.OnMapElementsChanged(); + + CreateBlockmap(); + } + #endregion #region ================== Actions