Fixed a crash when undoing after using the "test from current position" action when no player 1 start is in the map. Fixes #573

This commit is contained in:
biwa 2021-06-02 20:06:19 +02:00 committed by spherallic
parent 3554508ffb
commit a8c28e3f68

View file

@ -746,9 +746,12 @@ namespace CodeImp.DoomBuilder.Editing
} }
} }
if(start == null) if(start == null) // biwa. If there's no existing valid player start create one
{ {
// biwa. If there's no existing valid player start create one // Create an undo snapshot that can will be revoked in OnMapTestEnd to remove the temporary player start
// This has to be done because just creating and deleting the thing will screw with the undo/redo. See https://github.com/jewalky/UltimateDoomBuilder/issues/573
General.Map.UndoRedo.CreateUndo("Create temporary player thing");
playerStartIsTempThing = true; playerStartIsTempThing = true;
start = General.Map.Map.CreateThing(); start = General.Map.Map.CreateThing();
@ -756,12 +759,14 @@ namespace CodeImp.DoomBuilder.Editing
{ {
General.Settings.ApplyDefaultThingSettings(start); General.Settings.ApplyDefaultThingSettings(start);
start.Type = 1; start.Type = 1;
} else }
else
{ {
General.MainWindow.DisplayStatus(StatusType.Warning, "Can't test from current position: couldn't create player start!"); General.MainWindow.DisplayStatus(StatusType.Warning, "Can't test from current position: couldn't create player start!");
return false; return false;
} }
} else }
else
{ {
playerStartIsTempThing = false; playerStartIsTempThing = false;
} }
@ -781,11 +786,15 @@ namespace CodeImp.DoomBuilder.Editing
{ {
if(testFromCurrentPosition) if(testFromCurrentPosition)
{ {
//restore position
playerStart.Move(playerStartPosition);
if (playerStartIsTempThing) // biwa if (playerStartIsTempThing) // biwa
General.Map.Map.RemoveThing(playerStart.Index); {
General.Map.UndoRedo.WithdrawUndo();
}
else
{
//restore position
playerStart.Move(playerStartPosition);
}
playerStart = null; playerStart = null;
} }