Snap selection to grid: fixed a problem that could cause a crash if geometry got removed by snapping it to the grid

This commit is contained in:
biwa 2022-02-03 19:35:10 +01:00 committed by spherallic
parent bf7cc42166
commit 7d180e5cae
5 changed files with 42 additions and 1 deletions

View file

@ -257,6 +257,10 @@ namespace CodeImp.DoomBuilder.Editing
public virtual bool OnMapTestBegin(bool testFromCurrentPosition) { return true; } //called before test map is launched. Returns false if map launch is impossible 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 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 #endregion
} }
} }

View file

@ -2592,6 +2592,9 @@ namespace CodeImp.DoomBuilder
undoredo.WithdrawUndo(); undoredo.WithdrawUndo();
} }
// Let the current editing mode know that we changed something
General.Editing.Mode.OnMapElementsChanged();
// Done // Done
General.Interface.RedrawDisplay(); General.Interface.RedrawDisplay();
Cursor.Current = Cursors.Default; Cursor.Current = Cursors.Default;
@ -2651,6 +2654,9 @@ namespace CodeImp.DoomBuilder
// Map is changed // Map is changed
General.Map.IsChanged = true; General.Map.IsChanged = true;
// Let the current editing mode know that we changed something
General.Editing.Mode.OnMapElementsChanged();
// Done // Done
General.Interface.RedrawDisplay(); General.Interface.RedrawDisplay();
Cursor.Current = Cursors.Default; Cursor.Current = Cursors.Default;

View file

@ -1287,6 +1287,16 @@ namespace CodeImp.DoomBuilder.BuilderModes
return base.OnCopyBegin(); return base.OnCopyBegin();
} }
/// <summary>
/// If map elements have changed the blockmap needs to be recreated.
/// </summary>
public override void OnMapElementsChanged()
{
base.OnMapElementsChanged();
CreateBlockmap();
}
//mxd //mxd
private void RenderComment(Linedef l) private void RenderComment(Linedef l)
{ {

View file

@ -1545,6 +1545,17 @@ namespace CodeImp.DoomBuilder.BuilderModes
base.OnRedoEnd(); //mxd base.OnRedoEnd(); //mxd
} }
/// <summary>
/// If map elements have changed the blockmap needs to be recreated.
/// </summary>
public override void OnMapElementsChanged()
{
base.OnMapElementsChanged();
CreateBlockmap();
}
//mxd //mxd
public override void OnViewSelectionNumbersChanged(bool enabled) public override void OnViewSelectionNumbersChanged(bool enabled)
{ {

View file

@ -753,6 +753,16 @@ namespace CodeImp.DoomBuilder.BuilderModes
return base.OnCopyBegin(); return base.OnCopyBegin();
} }
/// <summary>
/// If map elements have changed the blockmap needs to be recreated.
/// </summary>
public override void OnMapElementsChanged()
{
base.OnMapElementsChanged();
CreateBlockmap();
}
#endregion #endregion
#region ================== Actions #region ================== Actions