From 9085eed5986af5c3a64fb40136356e90b6457ee6 Mon Sep 17 00:00:00 2001
From: MtH <mth@mth.moe>
Date: Tue, 30 Mar 2021 20:52:24 +0200
Subject: [PATCH] tighten main menu security to prevent weird crashes during
 transitions

---
 source/MainMenuState.hx | 6 +++++-
 source/ui/MenuList.hx   | 3 ++-
 2 files changed, 7 insertions(+), 2 deletions(-)

diff --git a/source/MainMenuState.hx b/source/MainMenuState.hx
index bdcbd277c..abfc753aa 100644
--- a/source/MainMenuState.hx
+++ b/source/MainMenuState.hx
@@ -218,6 +218,7 @@ class MainMenuState extends MusicBeatState
 
 	function startExitState(state:FlxState)
 	{
+		menuItems.enabled = false; // disable for exit
 		var duration = 0.4;
 		menuItems.forEach(function(item)
 		{
@@ -241,7 +242,10 @@ class MainMenuState extends MusicBeatState
 			FlxG.sound.music.volume += 0.5 * FlxG.elapsed;
 		}
 
-		if (menuItems.enabled && controls.BACK)
+		if (_exiting)
+			menuItems.enabled = false;
+
+		if (controls.BACK && menuItems.enabled && !menuItems.busy)
 			FlxG.switchState(new TitleState());
 
 		super.update(elapsed);
diff --git a/source/ui/MenuList.hx b/source/ui/MenuList.hx
index 6d20d7d82..cee2f78b4 100644
--- a/source/ui/MenuList.hx
+++ b/source/ui/MenuList.hx
@@ -24,7 +24,8 @@ class MenuTypedList<T:MenuItem> extends FlxTypedGroup<T>
 	
 	var byName = new Map<String, T>();
 	/** Set to true, internally to disable controls, without affecting vars like `enabled` */
-	var busy:Bool = false;
+	public var busy(default, null):Bool = false;
+	// bit awkward because BACK is also a menu control and this doesn't affect that
 	
 	public function new (navControls:NavControls = Vertical, ?wrapMode:WrapMode)
 	{