working settings menu

includes audio sliders, fullscreen, disabling gravity change sound
This commit is contained in:
Taevas 2025-03-28 13:42:53 +01:00
parent eefda9e2bd
commit a73b32610e
9 changed files with 197 additions and 4 deletions

9
default_bus_layout.tres Normal file
View file

@ -0,0 +1,9 @@
[gd_resource type="AudioBusLayout" format=3 uid="uid://bgs4iykhuoux0"]
[resource]
bus/1/name = &"Sounds"
bus/1/solo = false
bus/1/mute = false
bus/1/bypass_fx = false
bus/1/volume_db = 0.00282288
bus/1/send = &"Master"

View file

@ -58,8 +58,10 @@ func _input(ev: InputEvent) -> void:
if $AnimationPlayer.is_playing():
$AnimationPlayer.stop()
$AudioStreamPlayer.play()
$AnimationPlayer.play(\"grow_fadeout\")
if Settings.sound_on_gravity_change:
$AudioStreamPlayer.play()
"
[sub_resource type="Animation" id="Animation_6rwl4"]
@ -161,3 +163,4 @@ libraries = {
stream = ExtResource("2_5uwlw")
volume_db = -6.0
mix_target = 2
bus = &"Sounds"

View file

@ -31,5 +31,6 @@ shape = SubResource("CylinderShape3D_tgirv")
[node name="AudioStreamPlayer" type="AudioStreamPlayer" parent="."]
stream = SubResource("AudioStreamRandomizer_251sn")
bus = &"Sounds"
[connection signal="body_entered" from="Area3D" to="." method="_on_area_3d_body_entered"]

View file

@ -15,6 +15,7 @@ func _ready() -> void:
AudioServer.add_bus()
AudioServer.set_bus_name(AudioServer.bus_count - 1, self.name)
bus_index = AudioServer.get_bus_index(self.name)
changeVolume(0)
var current_effects = AudioServer.get_bus_effect_count(bus_index)
for i in current_effects:
@ -36,7 +37,8 @@ func _ready() -> void:
instrument.play()
func changeVolume(db: float) -> void:
AudioServer.set_bus_volume_db(bus_index, db)
AudioServer.set_bus_volume_db(bus_index, db + Settings.volume_music)
AudioServer.set_bus_mute(bus_index, Settings.volume_music <= -15.0)
func adaptInstrumentsToVelocity(velocity: float, delta: float) -> void:
var instruments_needed = floor(velocity / 8)

View file

@ -7,6 +7,7 @@ script/source = "extends Node3D
var start_menu = preload(\"res://menus/main/start_menu.tscn\")
var save_file_manager = preload(\"res://menus/main/save_file_manager.tscn\")
var settings_menu = preload(\"res://menus/main/settings_menu.tscn\")
func _ready() -> void:
var sm = start_menu.instantiate()
@ -20,6 +21,8 @@ func start() -> void:
rotate_cube(90)
func settings() -> void:
var sm = settings_menu.instantiate()
$Menus/Panel2.change_menu(sm)
rotate_cube(90)
func rotate_cube(degrees: int) -> void:

View file

@ -0,0 +1,96 @@
[gd_scene load_steps=2 format=3 uid="uid://opwiiusu80nu"]
[sub_resource type="GDScript" id="GDScript_wbybg"]
script/source = "extends Control
func _ready() -> void:
$VBoxContainer/Fullscreen/CheckButton.button_pressed = Settings.fullscreen
$VBoxContainer/SoundGravity/CheckButton.button_pressed = Settings.sound_on_gravity_change
$VBoxContainer/VolumeMusic/HSlider.value = Settings.volume_music
$VBoxContainer/VolumeSounds/HSlider.value = Settings.volume_sounds
func _on_fullscreen_check_button_toggled(toggled_on: bool) -> void:
Settings.fullscreen = toggled_on
func _on_soundgravity_check_button_toggled(toggled_on: bool) -> void:
Settings.sound_on_gravity_change = toggled_on
func _on_volumemusic_h_slider_value_changed(value: float) -> void:
Settings.volume_music = int(value)
func _on_volumesounds_h_slider_value_changed(value: float) -> void:
Settings.volume_sounds = int(value)
"
[node name="SettingsMenu" type="Control"]
layout_mode = 3
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
script = SubResource("GDScript_wbybg")
[node name="VBoxContainer" type="VBoxContainer" parent="."]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
alignment = 1
[node name="Fullscreen" type="HBoxContainer" parent="VBoxContainer"]
layout_mode = 2
alignment = 1
[node name="Label" type="Label" parent="VBoxContainer/Fullscreen"]
layout_mode = 2
text = "Fullscreen"
[node name="CheckButton" type="CheckButton" parent="VBoxContainer/Fullscreen"]
layout_mode = 2
[node name="SoundGravity" type="HBoxContainer" parent="VBoxContainer"]
layout_mode = 2
alignment = 1
[node name="Label" type="Label" parent="VBoxContainer/SoundGravity"]
layout_mode = 2
text = "Play sound on gravity change"
[node name="CheckButton" type="CheckButton" parent="VBoxContainer/SoundGravity"]
layout_mode = 2
[node name="VolumeMusic" type="HBoxContainer" parent="VBoxContainer"]
layout_mode = 2
alignment = 1
[node name="Label" type="Label" parent="VBoxContainer/VolumeMusic"]
layout_mode = 2
text = "Music volume"
[node name="HSlider" type="HSlider" parent="VBoxContainer/VolumeMusic"]
custom_minimum_size = Vector2(200, 28)
layout_mode = 2
min_value = -15.0
max_value = 15.0
[node name="VolumeSounds" type="HBoxContainer" parent="VBoxContainer"]
layout_mode = 2
alignment = 1
[node name="Label" type="Label" parent="VBoxContainer/VolumeSounds"]
layout_mode = 2
text = "Sound volume"
[node name="HSlider" type="HSlider" parent="VBoxContainer/VolumeSounds"]
custom_minimum_size = Vector2(200, 28)
layout_mode = 2
min_value = -15.0
max_value = 15.0
[connection signal="toggled" from="VBoxContainer/Fullscreen/CheckButton" to="." method="_on_fullscreen_check_button_toggled"]
[connection signal="toggled" from="VBoxContainer/SoundGravity/CheckButton" to="." method="_on_soundgravity_check_button_toggled"]
[connection signal="value_changed" from="VBoxContainer/VolumeMusic/HSlider" to="." method="_on_volumemusic_h_slider_value_changed"]
[connection signal="value_changed" from="VBoxContainer/VolumeSounds/HSlider" to="." method="_on_volumesounds_h_slider_value_changed"]

View file

@ -20,9 +20,9 @@ boot_splash/show_image=false
config/icon="res://icon.png"
config/windows_native_icon="res://icon.ico"
[audio]
[autoload]
buses/default_bus_layout=""
Settings="*res://settings.gd"
[physics]

78
settings.gd Normal file
View file

@ -0,0 +1,78 @@
extends Node
const settings_file_name := "user://settings.save"
var fullscreen := false : set = _set_fullscreen, get = _get_fullscreen
func _get_fullscreen() -> bool:
return fullscreen
func _set_fullscreen(new_fullscreen: bool) -> void:
fullscreen = new_fullscreen
var new_state := DisplayServer.WindowMode.WINDOW_MODE_FULLSCREEN if new_fullscreen else DisplayServer.WindowMode.WINDOW_MODE_WINDOWED
DisplayServer.window_set_mode(new_state)
save_settings()
var sound_on_gravity_change := true : set = _set_sound_on_gravity_change, get = _get_sound_on_gravity_change
func _get_sound_on_gravity_change() -> bool:
return sound_on_gravity_change
func _set_sound_on_gravity_change(new_sound_on_gravity_change: bool) -> void:
sound_on_gravity_change = new_sound_on_gravity_change
save_settings()
var volume_music := 0.0 : set = _set_volume_music, get = _get_volume_music
func _get_volume_music() -> float:
return volume_music
func _set_volume_music(new_volume_music: float) -> void:
volume_music = new_volume_music
for i in AudioServer.bus_count:
var bus_name := AudioServer.get_bus_name(i)
if bus_name != "Master" and bus_name != "Sounds":
AudioServer.set_bus_volume_db(i, volume_music)
AudioServer.set_bus_mute(i, volume_music <= -15.0)
save_settings()
var volume_sounds := 0.0 : set = _set_volume_sounds, get = _get_volume_sounds
func _get_volume_sounds() -> float:
return volume_sounds
func _set_volume_sounds(new_volume_sounds: float) -> void:
var bus_index := AudioServer.get_bus_index("Sounds")
if bus_index == -1:
print("The Sounds audio bus is missing, can't set new volume!")
return
volume_sounds = new_volume_sounds
AudioServer.set_bus_mute(bus_index, volume_sounds <= -15.0)
AudioServer.set_bus_volume_db(bus_index, volume_sounds)
save_settings()
func _ready() -> void:
if not FileAccess.file_exists(settings_file_name):
print("The settings file has not been found, not reading from it")
return
var settings_file := FileAccess.open(settings_file_name, FileAccess.READ)
var json := JSON.new()
var json_string := settings_file.get_line()
if json.parse(json_string) != OK:
print("(SETTINGS) JSON Parse Error: ", json.get_error_message(), " in ", json_string, " at line ", json.get_error_line())
return
if json.data.has("fullscreen") and typeof(json.data["fullscreen"]) == TYPE_BOOL:
fullscreen = json.data["fullscreen"]
if json.data.has("sound_on_gravity_change") and typeof(json.data["sound_on_gravity_change"]) == TYPE_BOOL:
sound_on_gravity_change = json.data["sound_on_gravity_change"]
if json.data.has("volume_music") and typeof(json.data["volume_music"]) == TYPE_FLOAT:
volume_music = json.data["volume_music"]
if json.data.has("volume_sounds") and typeof(json.data["volume_sounds"]) == TYPE_FLOAT:
volume_sounds = json.data["volume_sounds"]
func save_settings() -> void:
var settings_file := FileAccess.open(settings_file_name, FileAccess.WRITE)
var json_string := JSON.stringify({
"fullscreen": fullscreen,
"sound_on_gravity_change": sound_on_gravity_change,
"volume_music": volume_music,
"volume_sounds": volume_sounds,
})
settings_file.store_line(json_string)
settings_file.store_line("FOR YOUR SAFETY, ALWAYS CHECK IF THE DATA OF THE FILES YOU DOWNLOAD LOOKS OKAY")

1
settings.gd.uid Normal file
View file

@ -0,0 +1 @@
uid://6or7tnhtbqe6