diff options
Diffstat (limited to 'Archipelago')
| -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 | ||
