diff options
author | Star Rauchenberger <fefferburbia@gmail.com> | 2024-12-09 14:09:24 -0500 |
---|---|---|
committer | Star Rauchenberger <fefferburbia@gmail.com> | 2024-12-09 14:09:24 -0500 |
commit | 96cae1b731fad4bba9019a7c88e8167fa5d5eab3 (patch) | |
tree | b3a9e14ff529efeb7185782b9fb1d1e351887fdb | |
parent | 880e4b5069c4dfbf1ed532fc117697cde83b5566 (diff) | |
download | lingo-archipelago-96cae1b731fad4bba9019a7c88e8167fa5d5eab3.tar.gz lingo-archipelago-96cae1b731fad4bba9019a7c88e8167fa5d5eab3.tar.bz2 lingo-archipelago-96cae1b731fad4bba9019a7c88e8167fa5d5eab3.zip |
Fix status popup updating during generation
-rw-r--r-- | Archipelago/settings_screen.gd | 53 |
1 files 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 @@ | |||
1 | extends Spatial | 1 | extends Spatial |
2 | 2 | ||
3 | var generator_thread = Thread.new() | ||
4 | var generator | ||
5 | |||
6 | signal finished_randomizing | 3 | signal finished_randomizing |
7 | 4 | ||
5 | var is_randomizing = false | ||
6 | var generator_thread | ||
7 | var done_randomizing = false | ||
8 | var done_randomizing_mutex = Mutex.new() | ||
9 | |||
8 | 10 | ||
9 | func _ready(): | 11 | func _ready(): |
10 | # Some helpful logging. | 12 | # Some helpful logging. |
@@ -130,6 +132,22 @@ func installScriptExtension(childScript: Resource): | |||
130 | childScript.take_over_path(parentScriptPath) | 132 | childScript.take_over_path(parentScriptPath) |
131 | 133 | ||
132 | 134 | ||
135 | func _process(_delta): | ||
136 | if is_randomizing: | ||
137 | done_randomizing_mutex.lock() | ||
138 | if done_randomizing: | ||
139 | is_randomizing = false | ||
140 | done_randomizing_mutex.unlock() | ||
141 | |||
142 | generator_thread.wait_to_finish() | ||
143 | |||
144 | yield(get_tree(), "idle_frame") | ||
145 | |||
146 | loadLevel() | ||
147 | else: | ||
148 | done_randomizing_mutex.unlock() | ||
149 | |||
150 | |||
133 | func getVariantFromFile(path): | 151 | func getVariantFromFile(path): |
134 | var cbin = File.new() | 152 | var cbin = File.new() |
135 | var err = cbin.open_compressed( | 153 | var err = cbin.open_compressed( |
@@ -149,33 +167,42 @@ func connectionStatus(message): | |||
149 | popup.popup_centered() | 167 | popup.popup_centered() |
150 | 168 | ||
151 | 169 | ||
170 | func deferredConnectionStatus(message): | ||
171 | call_deferred("connectionStatus", message) | ||
172 | |||
173 | |||
152 | func connectionSuccessful(): | 174 | func connectionSuccessful(): |
153 | var apclient = global.get_node("Archipelago") | 175 | var apclient = global.get_node("Archipelago") |
154 | 176 | ||
155 | if apclient._panel_shuffle == apclient.kEXPERIMENTAL_PANELS: | 177 | if apclient._panel_shuffle == apclient.kEXPERIMENTAL_PANELS: |
156 | #connect("finished_randomizing", self, "loadLevel") | 178 | is_randomizing = true |
179 | done_randomizing = false | ||
157 | 180 | ||
158 | #generator_thread.start(self, "doGeneration", null, Thread.PRIORITY_HIGH) | 181 | generator_thread = Thread.new() |
159 | #yield(self, "finished_randomizing") | 182 | generator_thread.start(self, "doGeneration") |
160 | #generator_thread.wait_to_finish() | 183 | yield(self, "finished_randomizing") |
161 | doGeneration() | ||
162 | 184 | ||
163 | loadLevel() | 185 | done_randomizing_mutex.lock() |
186 | done_randomizing = true | ||
187 | done_randomizing_mutex.unlock() | ||
164 | else: | 188 | else: |
165 | loadLevel() | 189 | loadLevel() |
166 | 190 | ||
167 | 191 | ||
168 | func doGeneration(): | 192 | func doGeneration(): |
169 | var apclient = global.get_node("Archipelago") | 193 | var apclient = global.get_node("Archipelago") |
194 | |||
170 | var gpv = getVariantFromFile("generated_puzzles.bin") | 195 | var gpv = getVariantFromFile("generated_puzzles.bin") |
171 | global._print("Forms: %d" % gpv[0].size()) | 196 | global._print("Forms: %d" % gpv[0].size()) |
172 | generator = apclient.SCRIPT_generator.new(gpv) | ||
173 | generator.name = "Generator" | ||
174 | apclient.add_child(generator) | ||
175 | 197 | ||
176 | generator.connect("generator_status", self, "connectionStatus") | 198 | var generator = apclient.SCRIPT_generator.new(gpv) |
199 | generator.connect("generator_status", self, "deferredConnectionStatus") | ||
200 | |||
177 | generator.generate(str(apclient._slot_seed)) | 201 | generator.generate(str(apclient._slot_seed)) |
178 | 202 | ||
203 | generator.name = "Generator" | ||
204 | apclient.call_deferred("add_child", generator) | ||
205 | |||
179 | emit_signal("finished_randomizing") | 206 | emit_signal("finished_randomizing") |
180 | 207 | ||
181 | 208 | ||