| … | … | @@ -0,0 +1,215 @@ |
| 1 | extends Control |
| 2 | |
| 3 | var res_loader: ResourceInteractiveLoader = null |
| 4 | var loading_thread: Thread = null |
| 5 | |
| 6 | signal replace_main_scene |
| 7 | #warning-ignore:unused_signal |
| 8 | signal quit # Useless, but needed as there is no clean way to check if a node exposes a signal |
| 9 | |
| 10 | onready var ui = $UI |
| 11 | onready var main = ui.get_node(@"Main") |
| 12 | onready var play_button = main.get_node(@"Play") |
| 13 | onready var settings_button = main.get_node(@"Settings") |
| 14 | onready var quit_button = main.get_node(@"Quit") |
| 15 | |
| 16 | onready var settings_menu = ui.get_node(@"Settings") |
| 17 | onready var settings_actions = settings_menu.get_node(@"Actions") |
| 18 | onready var settings_action_apply = settings_actions.get_node(@"Apply") |
| 19 | onready var settings_action_cancel = settings_actions.get_node(@"Cancel") |
| 20 | |
| 21 | onready var gi_menu = settings_menu.get_node(@"GI") |
| 22 | onready var gi_high = gi_menu.get_node(@"High") |
| 23 | onready var gi_low = gi_menu.get_node(@"Low") |
| 24 | onready var gi_disabled = gi_menu.get_node(@"Disabled") |
| 25 | |
| 26 | onready var aa_menu = settings_menu.get_node(@"AA") |
| 27 | onready var aa_8x = aa_menu.get_node(@"8X") |
| 28 | onready var aa_4x = aa_menu.get_node(@"4X") |
| 29 | onready var aa_2x = aa_menu.get_node(@"2X") |
| 30 | onready var aa_disabled = aa_menu.get_node(@"Disabled") |
| 31 | |
| 32 | onready var ssao_menu = settings_menu.get_node(@"SSAO") |
| 33 | onready var ssao_high = ssao_menu.get_node(@"High") |
| 34 | onready var ssao_low = ssao_menu.get_node(@"Low") |
| 35 | onready var ssao_disabled = ssao_menu.get_node(@"Disabled") |
| 36 | |
| 37 | onready var bloom_menu = settings_menu.get_node(@"Bloom") |
| 38 | onready var bloom_high = bloom_menu.get_node(@"High") |
| 39 | onready var bloom_low = bloom_menu.get_node(@"Low") |
| 40 | onready var bloom_disabled = bloom_menu.get_node(@"Disabled") |
| 41 | |
| 42 | onready var resolution_menu = settings_menu.get_node(@"Resolution") |
| 43 | onready var resolution_native = resolution_menu.get_node(@"Native") |
| 44 | onready var resolution_1080 = resolution_menu.get_node(@"1080") |
| 45 | onready var resolution_720 = resolution_menu.get_node(@"720") |
| 46 | onready var resolution_540 = resolution_menu.get_node(@"540") |
| 47 | |
| 48 | onready var fullscreen_menu = settings_menu.get_node(@"Fullscreen") |
| 49 | onready var fullscreen_yes = fullscreen_menu.get_node(@"Yes") |
| 50 | onready var fullscreen_no = fullscreen_menu.get_node(@"No") |
| 51 | |
| 52 | onready var loading = ui.get_node(@"Loading") |
| 53 | onready var loading_progress = loading.get_node(@"Progress") |
| 54 | onready var loading_done_timer = loading.get_node(@"DoneTimer") |
| 55 | |
| 56 | func _ready(): |
| 57 | get_tree().set_screen_stretch(SceneTree.STRETCH_MODE_2D, SceneTree.STRETCH_ASPECT_KEEP, Vector2(1920, 1080)) |
| 58 | play_button.grab_focus() |
| 59 | var sound_effects = $BackgroundCache/RedRobot/SoundEffects |
| 60 | for child in sound_effects.get_children(): |
| 61 | child.unit_db = -200 |
| 62 | |
| 63 | |
| 64 | func interactive_load(loader): |
| 65 | while true: |
| 66 | var status = loader.poll() |
| 67 | if status == OK: |
| 68 | loading_progress.value = (loader.get_stage() * 100) / loader.get_stage_count() |
| 69 | continue |
| 70 | elif status == ERR_FILE_EOF: |
| 71 | loading_progress.value = 100 |
| 72 | loading_done_timer.start() |
| 73 | break |
| 74 | else: |
| 75 | print("Error while loading level: " + str(status)) |
| 76 | main.show() |
| 77 | loading.hide() |
| 78 | break |
| 79 | |
| 80 | |
| 81 | func loading_done(loader): |
| 82 | loading_thread.wait_to_finish() |
| 83 | emit_signal("replace_main_scene", loader.get_resource()) |
| 84 | res_loader = null |
| 85 | # Weirdly, "res_loader = null" is needed as otherwise |
| 86 | # loading the resource again is not possible. |
| 87 | |
| 88 | |
| 89 | func _on_loading_done_timer_timeout(): |
| 90 | loading_done(res_loader) |
| 91 | |
| 92 | |
| 93 | func _on_play_pressed(): |
| 94 | main.hide() |
| 95 | loading.show() |
| 96 | var path = "res://level/level.tscn" |
| 97 | if ResourceLoader.has_cached(path): |
| 98 | emit_signal("replace_main_scene", ResourceLoader.load(path)) |
| 99 | else: |
| 100 | res_loader = ResourceLoader.load_interactive(path) |
| 101 | loading_thread = Thread.new() |
| 102 | #warning-ignore:return_value_discarded |
| 103 | loading_thread.start(self, "interactive_load", res_loader) |
| 104 | |
| 105 | |
| 106 | func _on_settings_pressed(): |
| 107 | main.hide() |
| 108 | settings_menu.show() |
| 109 | settings_action_cancel.grab_focus() |
| 110 | |
| 111 | if Settings.gi_quality == Settings.GIQuality.HIGH: |
| 112 | gi_high.pressed = true |
| 113 | elif Settings.gi_quality == Settings.GIQuality.LOW: |
| 114 | gi_low.pressed = true |
| 115 | elif Settings.gi_quality == Settings.GIQuality.DISABLED: |
| 116 | gi_disabled.pressed = true |
| 117 | |
| 118 | if Settings.aa_quality == Settings.AAQuality.AA_8X: |
| 119 | aa_8x.pressed = true |
| 120 | elif Settings.aa_quality == Settings.AAQuality.AA_4X: |
| 121 | aa_4x.pressed = true |
| 122 | elif Settings.aa_quality == Settings.AAQuality.AA_2X: |
| 123 | aa_2x.pressed = true |
| 124 | elif Settings.aa_quality == Settings.AAQuality.DISABLED: |
| 125 | aa_disabled.pressed = true |
| 126 | |
| 127 | if Settings.ssao_quality == Settings.SSAOQuality.HIGH: |
| 128 | ssao_high.pressed = true |
| 129 | elif Settings.ssao_quality == Settings.SSAOQuality.LOW: |
| 130 | ssao_low.pressed = true |
| 131 | elif Settings.ssao_quality == Settings.SSAOQuality.DISABLED: |
| 132 | ssao_disabled.pressed = true |
| 133 | |
| 134 | if Settings.bloom_quality == Settings.BloomQuality.HIGH: |
| 135 | bloom_high.pressed = true |
| 136 | elif Settings.bloom_quality == Settings.BloomQuality.LOW: |
| 137 | bloom_low.pressed = true |
| 138 | elif Settings.bloom_quality == Settings.BloomQuality.DISABLED: |
| 139 | bloom_disabled.pressed = true |
| 140 | |
| 141 | if Settings.resolution == Settings.Resolution.NATIVE: |
| 142 | resolution_native.pressed = true |
| 143 | elif Settings.resolution == Settings.Resolution.RES_1080: |
| 144 | resolution_1080.pressed = true |
| 145 | elif Settings.resolution == Settings.Resolution.RES_720: |
| 146 | resolution_720.pressed = true |
| 147 | elif Settings.resolution == Settings.Resolution.RES_540: |
| 148 | resolution_540.pressed = true |
| 149 | |
| 150 | if Settings.fullscreen: |
| 151 | fullscreen_yes.pressed = true |
| 152 | else: |
| 153 | fullscreen_no.pressed = true |
| 154 | |
| 155 | |
| 156 | func _on_quit_pressed(): |
| 157 | get_tree().quit() |
| 158 | |
| 159 | |
| 160 | func _on_apply_pressed(): |
| 161 | main.show() |
| 162 | play_button.grab_focus() |
| 163 | settings_menu.hide() |
| 164 | |
| 165 | if gi_high.pressed: |
| 166 | Settings.gi_quality = Settings.GIQuality.HIGH |
| 167 | elif gi_low.pressed: |
| 168 | Settings.gi_quality = Settings.GIQuality.LOW |
| 169 | elif gi_disabled.pressed: |
| 170 | Settings.gi_quality = Settings.GIQuality.DISABLED |
| 171 | |
| 172 | if aa_8x.pressed: |
| 173 | Settings.aa_quality = Settings.AAQuality.AA_8X |
| 174 | elif aa_4x.pressed: |
| 175 | Settings.aa_quality = Settings.AAQuality.AA_4X |
| 176 | elif aa_2x.pressed: |
| 177 | Settings.aa_quality = Settings.AAQuality.AA_2X |
| 178 | elif aa_disabled.pressed: |
| 179 | Settings.aa_quality = Settings.AAQuality.DISABLED |
| 180 | |
| 181 | if ssao_high.pressed: |
| 182 | Settings.ssao_quality = Settings.SSAOQuality.HIGH |
| 183 | elif ssao_low.pressed: |
| 184 | Settings.ssao_quality = Settings.SSAOQuality.LOW |
| 185 | elif ssao_disabled.pressed: |
| 186 | Settings.ssao_quality = Settings.SSAOQuality.DISABLED |
| 187 | |
| 188 | if bloom_high.pressed: |
| 189 | Settings.bloom_quality = Settings.BloomQuality.HIGH |
| 190 | elif bloom_low.pressed: |
| 191 | Settings.bloom_quality = Settings.BloomQuality.LOW |
| 192 | elif bloom_disabled.pressed: |
| 193 | Settings.bloom_quality = Settings.BloomQuality.DISABLED |
| 194 | |
| 195 | if resolution_native.pressed: |
| 196 | Settings.resolution = Settings.Resolution.NATIVE |
| 197 | elif resolution_1080.pressed: |
| 198 | Settings.resolution = Settings.Resolution.RES_1080 |
| 199 | elif resolution_720.pressed: |
| 200 | Settings.resolution = Settings.Resolution.RES_720 |
| 201 | elif resolution_540.pressed: |
| 202 | Settings.resolution = Settings.Resolution.RES_540 |
| 203 | |
| 204 | Settings.fullscreen = fullscreen_yes.pressed |
| 205 | |
| 206 | # Apply the setting directly |
| 207 | OS.window_fullscreen = Settings.fullscreen |
| 208 | |
| 209 | Settings.save_settings() |
| 210 | |
| 211 | |
| 212 | func _on_cancel_pressed(): |
| 213 | main.show() |
| 214 | play_button.grab_focus() |
| 215 | settings_menu.hide() |