From 96cae1b731fad4bba9019a7c88e8167fa5d5eab3 Mon Sep 17 00:00:00 2001 From: Star Rauchenberger Date: Mon, 9 Dec 2024 14:09:24 -0500 Subject: Fix status popup updating during generation --- Archipelago/settings_screen.gd | 53 +++++++++++++++++++++++++++++++----------- 1 file changed, 40 insertions(+), 13 deletions(-) diff --git a/Archipelago/settings_screen.gd b/Archipelago/settings_screen.gd index ec3b5f1..176aba2 100644 --- a/Archipelago/settings_screen.gd +++ b/Archipelago/settings_screen.gd @@ -1,10 +1,12 @@ extends Spatial -var generator_thread = Thread.new() -var generator - signal finished_randomizing +var is_randomizing = false +var generator_thread +var done_randomizing = false +var done_randomizing_mutex = Mutex.new() + func _ready(): # Some helpful logging. @@ -130,6 +132,22 @@ func installScriptExtension(childScript: Resource): childScript.take_over_path(parentScriptPath) +func _process(_delta): + if is_randomizing: + done_randomizing_mutex.lock() + if done_randomizing: + is_randomizing = false + done_randomizing_mutex.unlock() + + generator_thread.wait_to_finish() + + yield(get_tree(), "idle_frame") + + loadLevel() + else: + done_randomizing_mutex.unlock() + + func getVariantFromFile(path): var cbin = File.new() var err = cbin.open_compressed( @@ -149,33 +167,42 @@ func connectionStatus(message): popup.popup_centered() +func deferredConnectionStatus(message): + call_deferred("connectionStatus", message) + + func connectionSuccessful(): var apclient = global.get_node("Archipelago") if apclient._panel_shuffle == apclient.kEXPERIMENTAL_PANELS: - #connect("finished_randomizing", self, "loadLevel") + is_randomizing = true + done_randomizing = false - #generator_thread.start(self, "doGeneration", null, Thread.PRIORITY_HIGH) - #yield(self, "finished_randomizing") - #generator_thread.wait_to_finish() - doGeneration() + generator_thread = Thread.new() + generator_thread.start(self, "doGeneration") + yield(self, "finished_randomizing") - loadLevel() + done_randomizing_mutex.lock() + done_randomizing = true + done_randomizing_mutex.unlock() else: loadLevel() func doGeneration(): var apclient = global.get_node("Archipelago") + var gpv = getVariantFromFile("generated_puzzles.bin") global._print("Forms: %d" % gpv[0].size()) - generator = apclient.SCRIPT_generator.new(gpv) - generator.name = "Generator" - apclient.add_child(generator) - generator.connect("generator_status", self, "connectionStatus") + var generator = apclient.SCRIPT_generator.new(gpv) + generator.connect("generator_status", self, "deferredConnectionStatus") + generator.generate(str(apclient._slot_seed)) + generator.name = "Generator" + apclient.call_deferred("add_child", generator) + emit_signal("finished_randomizing") -- cgit 1.4.1