summaryrefslogtreecommitdiff
path: root/scripts/optionsmenu.gd
blob: e8bccbdac731658a8cba92e1a92cb66781ab54e1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
extends Control

const max_vol = 30
const min_vol = -30

@onready var MasterValue = $Control/VBoxContainer/GridContainer/VolumeMasterContainer/VolumeMasterValue
@onready var MasterSlider = $Control/VBoxContainer/GridContainer/VolumeMasterContainer/VolumeMasterSlider
@onready var MusicValue = $Control/VBoxContainer/GridContainer/VolumeMusicContainer/VolumeMusicValue
@onready var MusicSlider = $Control/VBoxContainer/GridContainer/VolumeMusicContainer/VolumeMusicSlider
@onready var SFXValue = $Control/VBoxContainer/GridContainer/VolumeSFXContainer/VolumeSFXValue
@onready var SFXSlider = $Control/VBoxContainer/GridContainer/VolumeSFXContainer/VolumeSFXSlider

func _ready():
	# When scene is instanced, load the settings from singleton
	refresh_menu(global_variables.volume_master, MasterValue, MasterSlider)
	refresh_menu(global_variables.volume_music, MusicValue, MusicSlider)
	refresh_menu(global_variables.volume_sfx, SFXValue, SFXSlider)
	$Control/VBoxContainer/GridContainer/FullscreenCheckButton.set_pressed_no_signal(((get_window().mode == 4) or (get_window().mode == 3)))

func _input(event):
	if event.is_action_pressed("escape"):
		queue_free()

func _on_ReturnButton_pressed():
	queue_free()

func _on_VolumeMasterSlider_value_changed(value):
	update_audio(value, 0, MasterSlider, "volume_master_enabled", "volume_master", MasterValue)

func _on_VolumeMusicSlider_value_changed(value):
	update_audio(value, 1, MusicSlider, "volume_music_enabled", "volume_music", MusicValue)

func _on_VolumeSFXSlider_value_changed(value):
	update_audio(value, 2, SFXSlider, "volume_sfx_enabled", "volume_sfx", SFXValue)

func _on_FullscreenCheckButton_toggled(_button_pressed):
	get_window().mode = 4 if (!((get_window().mode == 4) or (get_window().mode == 3))) else 0

func update_audio(value, bus, slider, enabled_var, volume_var, valuelabel):
	# Converts percentage into a range value
	var new_volume = ((value/100) * (max_vol - min_vol)) + min_vol
	global_variables.set(volume_var, new_volume)
	valuelabel.text = str(value) + "%"
	AudioServer.set_bus_volume_db(bus, new_volume)
	if value == slider.min_value:
		AudioServer.set_bus_mute(bus, true)
		global_variables.set(enabled_var, false)
	else:
		AudioServer.set_bus_mute(bus, false)
		global_variables.set(enabled_var, false)

func refresh_menu(value, valuelabel, slider):
	# Converts stored range values back into a percentage value
	var percentage = ((float(value) - min_vol) / (max_vol - min_vol) ) * 100
	valuelabel.text = str(percentage) + "%"
	slider.value = percentage