extends Spatial var last_key_pressed = null func input_list_to_string(inputlist: Array) -> String: var arr_str = [] for input in inputlist: arr_str.append(input.as_text()) var psa = PoolStringArray(arr_str) return psa.join(", ") onready var views = [$MainMenuUI, $OptionsMenu] onready var keymap_btns = { $OptionsMenu/VBoxContainer/GridContainer/Forward: "move_forward", $OptionsMenu/VBoxContainer/GridContainer/Backward: "move_backward", $OptionsMenu/VBoxContainer/GridContainer/Left: "move_left", $OptionsMenu/VBoxContainer/GridContainer/Right: "move_right", $OptionsMenu/VBoxContainer/GridContainer/Jump: "move_jump", $OptionsMenu/VBoxContainer/GridContainer/Frontcamera: "camera_front", $OptionsMenu/VBoxContainer/GridContainer/Sprint: "move_sprint", $OptionsMenu/VBoxContainer/GridContainer/Changeweapon: "weapon_forward", } func connect_children(elem, event: String, method: String): for control in elem.get_children(): if control is Button: control.connect(event, self, method) connect_children(control, event, method) func _ready(): Input.set_mouse_mode(Input.MOUSE_MODE_CONFINED) Input.set_custom_mouse_cursor(preload("res://assets/all_gbs/textures/cursor.tga")) add_user_signal("key_pressed", [{"name": "event", "type": InputEvent}]) refresh_keymap_btns() connect_children(self, "mouse_entered", "button_hover") connect_children(self, "pressed", "button_click_sound") for input_btn in keymap_btns: input_btn.connect("pressed", self, "_on_keymap_pressed", [input_btn, keymap_btns[input_btn]]) $OptionsMenu/VBoxContainer/GridContainer/MusicVolume.value = db2linear(get_bus_volume("Music")) $OptionsMenu/VBoxContainer/GridContainer/MasterVolume.value = db2linear(get_bus_volume("Master")) func refresh_keymap_btns(): for keymap_btn in keymap_btns: refresh_keymap_btn(keymap_btn, keymap_btns[keymap_btn]) func refresh_keymap_btn(button: Button, action: String): button.text = input_list_to_string(InputMap.get_action_list(action)) func button_hover(): $ButtonsSound.stream = preload("res://assets/audio/Sounds/MM_MINOR.xx_permanentaliens.gzp.wav") $ButtonsSound.play() func button_click_sound(): $ButtonsSound.stream = preload("res://assets/audio/Sounds/MM_MAJOR.xx_permanentaliens.gzp.wav") $ButtonsSound.play() func set_view(view: Control): for view in views: view.visible = false view.visible = true func _on_Quit_pressed(): get_tree().quit() func _on_Save_pressed(): set_view($MainMenuUI) func _on_Options_pressed(): set_view($OptionsMenu) func _input(event: InputEvent): if last_key_pressed or not event is InputEventKey: return last_key_pressed = event emit_signal("key_pressed", event) func set_key(key: InputEvent, action: String, btn: Button): InputMap.action_erase_events(action) InputMap.action_add_event(action, key) refresh_keymap_btn(btn, action) func wait_for_new_key(btn: Button, action: String): btn.text = "Press a key..." last_key_pressed = null connect("key_pressed", self, "set_key", [action, btn], CONNECT_ONESHOT) func _on_keymap_pressed(button: Button, action: String): wait_for_new_key(button, action) func get_bus_volume(bus: String): var idx = AudioServer.get_bus_index(bus) return AudioServer.get_bus_volume_db(idx) func set_bus_volume(bus: String, volume_percent: float): var idx = AudioServer.get_bus_index(bus) AudioServer.set_bus_volume_db(idx, linear2db(volume_percent)) func _on_Start_pressed(): get_tree().change_scene("res://playground.tscn") func _on_Master_value_changed(value): set_bus_volume("Master", value) func _on_Music_value_changed(value): set_bus_volume("Music", value)