| … | … | @@ -11,10 +11,10 @@ script = ExtResource( 2 ) |
| 11 | 11 | |
| 12 | 12 | [node name="asset_ratface" parent="." instance=ExtResource( 1 )] |
| 13 | 13 | |
| 14 | [node name="Area" type="Area" parent="asset_ratface"] | |
| 14 | [node name="Area" type="Area" parent="."] | |
| 15 | 15 | |
| 16 | [node name="CollisionShape" type="CollisionShape" parent="asset_ratface/Area"] | |
| 16 | [node name="CollisionShape" type="CollisionShape" parent="Area"] | |
| 17 | 17 | transform = Transform( 0.702435, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.0282457, 0.00615473 ) |
| 18 | 18 | shape = SubResource( 1 ) |
| 19 | 19 | |
| 20 | [connection signal="body_entered" from="asset_ratface/Area" to="." method="_on_Area_body_entered"] | |
| 20 | [connection signal="body_entered" from="Area" to="." method="_on_Area_body_entered"] |
| … | … | @@ -11,10 +11,10 @@ script = ExtResource( 2 ) |
| 11 | 11 | |
| 12 | 12 | [node name="asset_skull" parent="." instance=ExtResource( 1 )] |
| 13 | 13 | |
| 14 | [node name="Area" type="Area" parent="asset_skull"] | |
| 14 | [node name="Area" type="Area" parent="."] | |
| 15 | 15 | |
| 16 | [node name="CollisionShape" type="CollisionShape" parent="asset_skull/Area"] | |
| 16 | [node name="CollisionShape" type="CollisionShape" parent="Area"] | |
| 17 | 17 | transform = Transform( 6.91679, 0, 0, 0, 6.44877, 0, 0, 0, 9.56146, 0, 0.0420572, 0 ) |
| 18 | 18 | shape = SubResource( 1 ) |
| 19 | 19 | |
| 20 | [connection signal="body_entered" from="asset_skull/Area" to="." method="_on_Area_body_entered"] | |
| 20 | [connection signal="body_entered" from="Area" to="." method="_on_Area_body_entered"] |
| … | … | @@ -34,7 +34,7 @@ onready var meshNode : Spatial = $Model |
| 34 | 34 | onready var meshSkeletonNode : Skeleton = $Model/rig/Skeleton |
| 35 | 35 | onready var meshFaceBone : int = meshSkeletonNode.find_bone("DEF-spine.006") |
| 36 | 36 | onready var meshFaceBonePos : Transform = meshSkeletonNode.get_bone_pose(meshFaceBone) |
| 37 | onready var meshMaskAttachment : BoneAttachment = $Model/rig/Skeleton/Spatial/MaskAttachment | |
| 37 | onready var meshMaskAttachment : BoneAttachment = $Model/rig/Skeleton/MaskAttachment | |
| 38 | 38 | |
| 39 | 39 | var activeMeshMaskAttachment |
| 40 | 40 |
| … | … | @@ -62,6 +62,7 @@ fov = 90.0 |
| 62 | 62 | far = 8192.0 |
| 63 | 63 | |
| 64 | 64 | [node name="PlayerDebugUI" parent="." index="7" instance=ExtResource( 5 )] |
| 65 | visible = false | |
| 65 | 66 | |
| 66 | 67 | [node name="OmniLight" parent="." index="9"] |
| 67 | 68 | transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 4.73959, 0 ) |
| … | … | @@ -10,7 +10,9 @@ func _ready(): |
| 10 | 10 | |
| 11 | 11 | func _input(_event): |
| 12 | 12 | if Input.is_action_just_pressed("ui_cancel"): |
| 13 | get_tree().quit() | |
| 13 | # Open UI (for now) | |
| 14 | get_tree().get_current_scene().get_node("UI").get_node("Menu_Main").ui.show() | |
| 15 | # get_tree().quit() | |
| 14 | 16 | if Input.is_action_just_pressed("toggleMouse"): |
| 15 | 17 | if Input.get_mouse_mode() != Input.MOUSE_MODE_VISIBLE: |
| 16 | 18 | mouseModeBackup = Input.get_mouse_mode() |
| … | … | @@ -0,0 +1,81 @@ |
| 1 | extends Node | |
| 2 | ||
| 3 | enum GIQuality { | |
| 4 | DISABLED = 0, | |
| 5 | LOW = 1, | |
| 6 | HIGH = 2, | |
| 7 | } | |
| 8 | ||
| 9 | enum AAQuality { | |
| 10 | DISABLED = 0, | |
| 11 | AA_2X = 1, | |
| 12 | AA_4X = 2, | |
| 13 | AA_8X = 3, | |
| 14 | } | |
| 15 | ||
| 16 | enum SSAOQuality { | |
| 17 | DISABLED = 0, | |
| 18 | LOW = 1, | |
| 19 | HIGH = 2, | |
| 20 | } | |
| 21 | ||
| 22 | enum BloomQuality { | |
| 23 | DISABLED = 0, | |
| 24 | LOW = 1, | |
| 25 | HIGH = 2, | |
| 26 | } | |
| 27 | ||
| 28 | enum Resolution { | |
| 29 | RES_540 = 0, | |
| 30 | RES_720 = 1, | |
| 31 | RES_1080 = 2, | |
| 32 | NATIVE = 3, | |
| 33 | } | |
| 34 | ||
| 35 | var gi_quality = GIQuality.LOW | |
| 36 | var aa_quality = AAQuality.AA_2X | |
| 37 | var ssao_quality = SSAOQuality.DISABLED | |
| 38 | var bloom_quality = BloomQuality.HIGH | |
| 39 | var resolution = Resolution.NATIVE | |
| 40 | var fullscreen = true | |
| 41 | ||
| 42 | func _ready(): | |
| 43 | load_settings() | |
| 44 | ||
| 45 | func load_settings(): | |
| 46 | var f = File.new() | |
| 47 | var error = f.open("user://settings.json", File.READ) | |
| 48 | if error: | |
| 49 | print("There are no settings to load.") | |
| 50 | return | |
| 51 | ||
| 52 | var d = parse_json(f.get_as_text()) | |
| 53 | if typeof(d) != TYPE_DICTIONARY: | |
| 54 | return | |
| 55 | ||
| 56 | if "gi" in d: | |
| 57 | gi_quality = int(d.gi) | |
| 58 | ||
| 59 | if "aa" in d: | |
| 60 | aa_quality = int(d.aa) | |
| 61 | ||
| 62 | if "ssao" in d: | |
| 63 | ssao_quality = int(d.ssao) | |
| 64 | ||
| 65 | if "bloom" in d: | |
| 66 | bloom_quality = int(d.bloom) | |
| 67 | ||
| 68 | if "resolution" in d: | |
| 69 | resolution = int(d.resolution) | |
| 70 | ||
| 71 | if "fullscreen" in d: | |
| 72 | fullscreen = bool(d.fullscreen) | |
| 73 | ||
| 74 | ||
| 75 | func save_settings(): | |
| 76 | var f = File.new() | |
| 77 | var error = f.open("user://settings.json", File.WRITE) | |
| 78 | assert(not error) | |
| 79 | ||
| 80 | var d = { "gi":gi_quality, "aa":aa_quality, "ssao":ssao_quality, "bloom":bloom_quality, "resolution":resolution, "fullscreen":fullscreen } | |
| 81 | f.store_line(to_json(d)) |
| … | … | @@ -8,92 +8,14 @@ |
| 8 | 8 | [ext_resource path="res://hypergodot/hyper_debugui/hyper_debugui.tscn" type="PackedScene" id=6] |
| 9 | 9 | [ext_resource path="res://game/maps/map_witch_island/map_witch_island.scn" type="PackedScene" id=7] |
| 10 | 10 | [ext_resource path="res://game/maps/map_core.gd" type="Script" id=8] |
| 11 | [ext_resource path="res://ui/witchlogo.png" type="Texture" id=9] | |
| 11 | [ext_resource path="res://menu/main/menu_main.scn" type="PackedScene" id=9] | |
| 12 | 12 | |
| 13 | 13 | [node name="Main" type="Node"] |
| 14 | 14 | script = ExtResource( 2 ) |
| 15 | 15 | |
| 16 | 16 | [node name="UI" type="Node" parent="."] |
| 17 | 17 | |
| 18 | [node name="Control" type="Control" parent="UI"] | |
| 19 | margin_right = 1440.0 | |
| 20 | margin_bottom = 810.0 | |
| 21 | mouse_filter = 2 | |
| 22 | ||
| 23 | [node name="Main" type="Control" parent="UI/Control"] | |
| 24 | margin_right = 1441.0 | |
| 25 | margin_bottom = 810.0 | |
| 26 | ||
| 27 | [node name="CenterContainer" type="CenterContainer" parent="UI/Control/Main"] | |
| 28 | margin_right = 1440.0 | |
| 29 | margin_bottom = 810.0 | |
| 30 | ||
| 31 | [node name="VBoxContainer" type="VBoxContainer" parent="UI/Control/Main/CenterContainer"] | |
| 32 | margin_left = 390.0 | |
| 33 | margin_top = 258.0 | |
| 34 | margin_right = 1049.0 | |
| 35 | margin_bottom = 551.0 | |
| 36 | ||
| 37 | [node name="Witchy World" type="TextureRect" parent="UI/Control/Main/CenterContainer/VBoxContainer"] | |
| 38 | margin_right = 659.0 | |
| 39 | margin_bottom = 197.0 | |
| 40 | texture = ExtResource( 9 ) | |
| 41 | ||
| 42 | [node name="Resume" type="Button" parent="UI/Control/Main/CenterContainer/VBoxContainer"] | |
| 43 | margin_top = 201.0 | |
| 44 | margin_right = 659.0 | |
| 45 | margin_bottom = 221.0 | |
| 46 | text = "Resume" | |
| 47 | ||
| 48 | [node name="Settings" type="Button" parent="UI/Control/Main/CenterContainer/VBoxContainer"] | |
| 49 | margin_top = 225.0 | |
| 50 | margin_right = 659.0 | |
| 51 | margin_bottom = 245.0 | |
| 52 | text = "Settings" | |
| 53 | ||
| 54 | [node name="Multiplayer" type="Button" parent="UI/Control/Main/CenterContainer/VBoxContainer"] | |
| 55 | margin_top = 249.0 | |
| 56 | margin_right = 659.0 | |
| 57 | margin_bottom = 269.0 | |
| 58 | text = "Multiplayer" | |
| 59 | ||
| 60 | [node name="Quit" type="Button" parent="UI/Control/Main/CenterContainer/VBoxContainer"] | |
| 61 | margin_top = 273.0 | |
| 62 | margin_right = 659.0 | |
| 63 | margin_bottom = 293.0 | |
| 64 | text = "Quit" | |
| 65 | ||
| 66 | [node name="Settings" type="VBoxContainer" parent="UI/Control"] | |
| 67 | margin_right = 1440.0 | |
| 68 | margin_bottom = 810.0 | |
| 69 | ||
| 70 | [node name="Shadows" type="HBoxContainer" parent="UI/Control/Settings"] | |
| 71 | margin_right = 1440.0 | |
| 72 | margin_bottom = 20.0 | |
| 73 | ||
| 74 | [node name="Label" type="Label" parent="UI/Control/Settings/Shadows"] | |
| 75 | margin_top = 3.0 | |
| 76 | margin_right = 63.0 | |
| 77 | margin_bottom = 17.0 | |
| 78 | text = "Shadows :" | |
| 79 | ||
| 80 | [node name="High" type="Button" parent="UI/Control/Settings/Shadows"] | |
| 81 | margin_left = 67.0 | |
| 82 | margin_right = 108.0 | |
| 83 | margin_bottom = 20.0 | |
| 84 | text = "High" | |
| 85 | ||
| 86 | [node name="Low" type="Button" parent="UI/Control/Settings/Shadows"] | |
| 87 | margin_left = 112.0 | |
| 88 | margin_right = 149.0 | |
| 89 | margin_bottom = 20.0 | |
| 90 | text = "Low" | |
| 91 | ||
| 92 | [node name="Disabled" type="Button" parent="UI/Control/Settings/Shadows"] | |
| 93 | margin_left = 153.0 | |
| 94 | margin_right = 221.0 | |
| 95 | margin_bottom = 20.0 | |
| 96 | text = "Disabled" | |
| 18 | [node name="Menu_Main" parent="UI" instance=ExtResource( 9 )] | |
| 97 | 19 | |
| 98 | 20 | [node name="Maps" type="Node" parent="."] |
| 99 | 21 | |
| … | … | @@ -116,6 +38,7 @@ script = ExtResource( 3 ) |
| 116 | 38 | script = ExtResource( 1 ) |
| 117 | 39 | |
| 118 | 40 | [node name="HyperDebugUI" parent="HyperGodot" instance=ExtResource( 6 )] |
| 41 | visible = false | |
| 119 | 42 | |
| 120 | 43 | [node name="LocalSnapshotTimer" type="Timer" parent="HyperGodot"] |
| 121 | 44 | autostart = true |
| … | … | @@ -1,4 +1,4 @@ |
| 1 | extends Control | |
| 1 | extends Node | |
| 2 | 2 | |
| 3 | 3 | var res_loader: ResourceInteractiveLoader = null |
| 4 | 4 | var loading_thread: Thread = null |
| … | … | @@ -7,9 +7,9 @@ signal replace_main_scene |
| 7 | 7 | #warning-ignore:unused_signal |
| 8 | 8 | signal quit # Useless, but needed as there is no clean way to check if a node exposes a signal |
| 9 | 9 | |
| 10 | onready var ui = $UI | |
| 10 | onready var ui = $Menu_Main | |
| 11 | 11 | onready var main = ui.get_node(@"Main") |
| 12 | onready var play_button = main.get_node(@"Play") | |
| 12 | onready var play_button = main.get_node(@"Resume") | |
| 13 | 13 | onready var settings_button = main.get_node(@"Settings") |
| 14 | 14 | onready var quit_button = main.get_node(@"Quit") |
| 15 | 15 | |
| … | … | @@ -18,92 +18,39 @@ onready var settings_actions = settings_menu.get_node(@"Actions") |
| 18 | 18 | onready var settings_action_apply = settings_actions.get_node(@"Apply") |
| 19 | 19 | onready var settings_action_cancel = settings_actions.get_node(@"Cancel") |
| 20 | 20 | |
| 21 | onready var multiplayer_menu = ui.get_node(@"Multiplayer") | |
| 22 | ||
| 21 | 23 | onready var gi_menu = settings_menu.get_node(@"GI") |
| 22 | 24 | onready var gi_high = gi_menu.get_node(@"High") |
| 23 | 25 | onready var gi_low = gi_menu.get_node(@"Low") |
| 24 | 26 | onready var gi_disabled = gi_menu.get_node(@"Disabled") |
| 25 | 27 | |
| 26 | 28 | 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") | |
| 29 | onready var aa_8x = aa_menu.get_node(@"8x") | |
| 30 | onready var aa_4x = aa_menu.get_node(@"4x") | |
| 31 | onready var aa_2x = aa_menu.get_node(@"2x") | |
| 30 | 32 | onready var aa_disabled = aa_menu.get_node(@"Disabled") |
| 31 | 33 | |
| 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 | 34 | onready var bloom_menu = settings_menu.get_node(@"Bloom") |
| 38 | 35 | onready var bloom_high = bloom_menu.get_node(@"High") |
| 39 | 36 | onready var bloom_low = bloom_menu.get_node(@"Low") |
| 40 | 37 | onready var bloom_disabled = bloom_menu.get_node(@"Disabled") |
| 41 | 38 | |
| 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") | |
| 39 | func _ready(): | |
| 40 | get_tree().set_screen_stretch(SceneTree.STRETCH_MODE_2D, SceneTree.STRETCH_ASPECT_KEEP, Vector2(1920, 1080)) | |
| 47 | 41 | |
| 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") | |
| 42 | func _on_quit_pressed(): | |
| 43 | get_tree().quit() | |
| 51 | 44 | |
| 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") | |
| 45 | func _on_Resume_pressed(): | |
| 46 | # Hide UI (for now) | |
| 47 | ui.hide() | |
| 55 | 48 | |
| 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(): | |
| 49 | func _on_Quit_pressed(): | |
| 50 | get_tree().quit() | |
| 51 | ||
| 52 | ||
| 53 | func _on_Settings_pressed(): | |
| 107 | 54 | main.hide() |
| 108 | 55 | settings_menu.show() |
| 109 | 56 | settings_action_cancel.grab_focus() |
| … | … | @@ -124,13 +71,6 @@ func _on_settings_pressed(): |
| 124 | 71 | elif Settings.aa_quality == Settings.AAQuality.DISABLED: |
| 125 | 72 | aa_disabled.pressed = true |
| 126 | 73 | |
| 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 | 74 | if Settings.bloom_quality == Settings.BloomQuality.HIGH: |
| 135 | 75 | bloom_high.pressed = true |
| 136 | 76 | elif Settings.bloom_quality == Settings.BloomQuality.LOW: |
| … | … | @@ -138,28 +78,14 @@ func _on_settings_pressed(): |
| 138 | 78 | elif Settings.bloom_quality == Settings.BloomQuality.DISABLED: |
| 139 | 79 | bloom_disabled.pressed = true |
| 140 | 80 | |
| 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 | 81 | |
| 82 | func _on_Multiplayer_pressed(): | |
| 83 | main.hide() | |
| 84 | multiplayer_menu.show() | |
| 159 | 85 | |
| 160 | func _on_apply_pressed(): | |
| 86 | func _on_Apply_pressed(): | |
| 161 | 87 | main.show() |
| 162 | play_button.grab_focus() | |
| 88 | # play_button.grab_focus() | |
| 163 | 89 | settings_menu.hide() |
| 164 | 90 | |
| 165 | 91 | if gi_high.pressed: |
| … | … | @@ -178,13 +104,6 @@ func _on_apply_pressed(): |
| 178 | 104 | elif aa_disabled.pressed: |
| 179 | 105 | Settings.aa_quality = Settings.AAQuality.DISABLED |
| 180 | 106 | |
| 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 | 107 | if bloom_high.pressed: |
| 189 | 108 | Settings.bloom_quality = Settings.BloomQuality.HIGH |
| 190 | 109 | elif bloom_low.pressed: |
| … | … | @@ -192,24 +111,22 @@ func _on_apply_pressed(): |
| 192 | 111 | elif bloom_disabled.pressed: |
| 193 | 112 | Settings.bloom_quality = Settings.BloomQuality.DISABLED |
| 194 | 113 | |
| 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 | |
| 114 | Settings.save_settings() | |
| 203 | 115 | |
| 204 | Settings.fullscreen = fullscreen_yes.pressed | |
| 205 | 116 | |
| 206 | # Apply the setting directly | |
| 207 | OS.window_fullscreen = Settings.fullscreen | |
| 117 | func _on_Cancel_pressed(): | |
| 118 | main.show() | |
| 119 | # play_button.grab_focus() | |
| 120 | settings_menu.hide() | |
| 208 | 121 | |
| 209 | Settings.save_settings() | |
| 122 | ||
| 123 | func _on_Multiplayer_Cancel_pressed(): | |
| 124 | main.show() | |
| 125 | # play_button.grab_focus() | |
| 126 | multiplayer_menu.hide() | |
| 210 | 127 | |
| 211 | 128 | |
| 212 | func _on_cancel_pressed(): | |
| 129 | func _on_Multiplayer_Apply_pressed(): | |
| 213 | 130 | main.show() |
| 214 | play_button.grab_focus() | |
| 215 | settings_menu.hide() | |
| 131 | # play_button.grab_focus() | |
| 132 | multiplayer_menu.hide() |
| … | … | @@ -120,6 +120,10 @@ config/name="Witch Island" |
| 120 | 120 | run/main_scene="res://main.tscn" |
| 121 | 121 | config/icon="res://icon.png" |
| 122 | 122 | |
| 123 | [autoload] | |
| 124 | ||
| 125 | Settings="*res://game/settings.gd" | |
| 126 | ||
| 123 | 127 | [display] |
| 124 | 128 | |
| 125 | 129 | window/size/width=1440 |