giants-godot/assets/terrains/intro_island/MainMenu.gd

109 lines
3.5 KiB
GDScript3
Raw Normal View History

2021-09-08 18:36:41 +02:00
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)