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