Skip to content

Commit

Permalink
Merge pull request #84 from endlessm/push-nmstrnyslszw
Browse files Browse the repository at this point in the history
Add Settings page with volume controls
  • Loading branch information
dylanmccall authored Feb 11, 2025
2 parents f03076f + 0dd8dbd commit 54cf52a
Show file tree
Hide file tree
Showing 16 changed files with 217 additions and 2 deletions.
3 changes: 3 additions & 0 deletions CandyWrapper/World.tscn
Original file line number Diff line number Diff line change
Expand Up @@ -28,11 +28,14 @@ frame = 1
[node name="Music" type="AudioStreamPlayer" parent="."]
stream = ExtResource("2_swba7")
autoplay = true
bus = &"Music"

[node name="Audio" type="Node" parent="."]

[node name="Win" type="AudioStreamPlayer" parent="Audio"]
stream = ExtResource("5_qdrvr")
bus = &"Sfx"

[node name="Lose" type="AudioStreamPlayer" parent="Audio"]
stream = ExtResource("6_rs0e0")
bus = &"Sfx"
1 change: 1 addition & 0 deletions Scene/Explosion.tscn
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ frame = 1
[node name="AudioStreamPlayer" type="AudioStreamPlayer" parent="."]
stream = ExtResource("3")
autoplay = true
bus = &"Sfx"

[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
libraries = {
Expand Down
1 change: 1 addition & 0 deletions Scene/Player.tscn
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,7 @@ shape = SubResource("2")

[node name="Audio" type="AudioStreamPlayer" parent="."]
stream = ExtResource("3")
bus = &"Sfx"

[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
libraries = {
Expand Down
9 changes: 8 additions & 1 deletion Scene/WorldSelector.tscn
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
[gd_scene load_steps=5 format=3 uid="uid://h6eyk0hg1y1f"]
[gd_scene load_steps=6 format=3 uid="uid://h6eyk0hg1y1f"]

[ext_resource type="Theme" uid="uid://dqt6eyc0l8kms" path="res://Theme/WorldSelector.tres" id="1_h1u7b"]
[ext_resource type="Script" path="res://Script/WorldSelector.gd" id="2_c1jjg"]
[ext_resource type="PackedScene" uid="uid://b1qffdabwqnxf" path="res://Scene/WorldSelector/ExtraWorldSelector.tscn" id="3_d8a1w"]
[ext_resource type="PackedScene" uid="uid://pnnwgl5j385l" path="res://Scene/WorldSelector/MainWorldSelector.tscn" id="3_dc6jw"]
[ext_resource type="PackedScene" uid="uid://d2ay7olsehadk" path="res://Scene/WorldSelector/SettingsPage.tscn" id="5_opwul"]

[node name="TitleScreen" type="Control"]
layout_mode = 3
Expand All @@ -22,7 +23,13 @@ layout_mode = 1
visible = false
layout_mode = 1

[node name="SettingsPage" parent="." instance=ExtResource("5_opwul")]
visible = false
layout_mode = 1

[connection signal="main_world_selected" from="MainWorldSelector" to="." method="_on_main_world_selected"]
[connection signal="settings_selected" from="MainWorldSelector" to="." method="_on_main_world_selector_settings_selected"]
[connection signal="show_extra_worlds" from="MainWorldSelector" to="." method="_on_extra_worlds_button_pressed"]
[connection signal="back" from="ExtraWorldSelector" to="." method="_on_back_button_pressed"]
[connection signal="world_selected" from="ExtraWorldSelector" to="." method="_enter_world"]
[connection signal="back" from="SettingsPage" to="." method="_on_settings_page_back"]
5 changes: 5 additions & 0 deletions Scene/WorldSelector/MainWorldSelector.tscn
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,11 @@ text = "Play Candy Wrapper"
layout_mode = 2
text = "Extra Worlds"

[node name="Settings" type="Button" parent="VBox/MarginContainer2/MainWorldBox"]
layout_mode = 2
text = "Settings"

[connection signal="visibility_changed" from="." to="." method="_on_visibility_changed"]
[connection signal="pressed" from="VBox/MarginContainer2/MainWorldBox/CandyWrapperButton" to="." method="_on_candy_wrapper_button_pressed"]
[connection signal="pressed" from="VBox/MarginContainer2/MainWorldBox/ExtraWorldsButton" to="." method="_on_extra_worlds_button_pressed"]
[connection signal="pressed" from="VBox/MarginContainer2/MainWorldBox/Settings" to="." method="_on_settings_button_pressed"]
76 changes: 76 additions & 0 deletions Scene/WorldSelector/SettingsPage.tscn
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
[gd_scene load_steps=3 format=3 uid="uid://d2ay7olsehadk"]

[ext_resource type="Theme" uid="uid://dqt6eyc0l8kms" path="res://Theme/WorldSelector.tres" id="1_gll88"]
[ext_resource type="Script" path="res://Script/WorldSelector/SettingsPage.gd" id="2_6mi7e"]

[node name="SettingsPage" type="Control"]
layout_mode = 3
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
theme = ExtResource("1_gll88")
script = ExtResource("2_6mi7e")

[node name="VBoxContainer" type="VBoxContainer" parent="."]
layout_mode = 2
offset_right = 140.0
offset_bottom = 144.0
size_flags_horizontal = 3
size_flags_vertical = 3

[node name="Title" type="Label" parent="VBoxContainer"]
layout_mode = 2
theme_type_variation = &"HeaderLarge"
text = "Settings"
horizontal_alignment = 1

[node name="MarginContainer" type="MarginContainer" parent="VBoxContainer"]
layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 3
theme_override_constants/margin_left = 5
theme_override_constants/margin_right = 1
theme_override_constants/margin_bottom = 5

[node name="ExtraWorldsBox" type="VBoxContainer" parent="VBoxContainer/MarginContainer"]
unique_name_in_owner = true
layout_mode = 2
size_flags_vertical = 2

[node name="MusicLabel" type="Label" parent="VBoxContainer/MarginContainer/ExtraWorldsBox"]
layout_mode = 2
size_flags_horizontal = 0
theme_type_variation = &"HeaderLarge"
theme_override_font_sizes/font_size = 9
text = "music"
horizontal_alignment = 1

[node name="MusicSlider" type="HSlider" parent="VBoxContainer/MarginContainer/ExtraWorldsBox"]
unique_name_in_owner = true
layout_mode = 2
min_value = -30.0
max_value = 0.0

[node name="SfxLabel" type="Label" parent="VBoxContainer/MarginContainer/ExtraWorldsBox"]
layout_mode = 2
size_flags_horizontal = 0
theme_type_variation = &"HeaderLarge"
theme_override_font_sizes/font_size = 9
text = "sfx"
horizontal_alignment = 1

[node name="SfxSlider" type="HSlider" parent="VBoxContainer/MarginContainer/ExtraWorldsBox"]
unique_name_in_owner = true
layout_mode = 2
min_value = -30.0
max_value = 0.0

[node name="BackButton" type="Button" parent="VBoxContainer/MarginContainer/ExtraWorldsBox"]
unique_name_in_owner = true
layout_mode = 2
text = "Go Back"

[connection signal="visibility_changed" from="." to="." method="_on_visibility_changed"]
[connection signal="pressed" from="VBoxContainer/MarginContainer/ExtraWorldsBox/BackButton" to="." method="_on_back_button_pressed"]
50 changes: 50 additions & 0 deletions Script/Settings.gd
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
extends Node

const SETTINGS_PATH := "user://settings.cfg"

const VOLUME_SECTION := "Volume"
const MIN_VOLUME := -30.0

var _settings := ConfigFile.new()


func _ready() -> void:
var err := _settings.load(SETTINGS_PATH)
if err != OK and err != ERR_FILE_NOT_FOUND:
print("Failed to load %s: %s" % [SETTINGS_PATH, err])

_restore_volumes()


func _restore_volumes() -> void:
for bus_idx in AudioServer.bus_count:
var bus := AudioServer.get_bus_name(bus_idx)
var volume_db : float = _settings.get_value(VOLUME_SECTION, bus, 0.0)
print("Restored", [bus_idx, bus, volume_db])
_set_volume(bus_idx, volume_db)


func get_volume(bus: String) -> float:
var bus_idx = AudioServer.get_bus_index(bus)

return AudioServer.get_bus_volume_db(bus_idx)


func set_volume(bus: String, volume_db: float) -> void:
var bus_idx = AudioServer.get_bus_index(bus)
_set_volume(bus_idx, volume_db)

_settings.set_value(VOLUME_SECTION, bus, volume_db)
_save()


func _set_volume(bus_idx: int, volume_db: float) -> void:
AudioServer.set_bus_volume_db(bus_idx, volume_db)
var mute := volume_db <= MIN_VOLUME
AudioServer.set_bus_mute(bus_idx, mute)


func _save():
var err := _settings.save(SETTINGS_PATH)
if err != OK:
print("Failed to save settings to %s: %s" % [SETTINGS_PATH, err])
12 changes: 11 additions & 1 deletion Script/WorldSelector.gd
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ extends Control

@onready var MainWorldSelector = $MainWorldSelector
@onready var ExtraWorldSelector = $ExtraWorldSelector

@onready var SettingsPage = $SettingsPage

func _enter_world(world: String) -> void:
get_tree().change_scene_to_file(world)
Expand All @@ -20,3 +20,13 @@ func _on_extra_worlds_button_pressed() -> void:
func _on_back_button_pressed() -> void:
ExtraWorldSelector.visible = false
MainWorldSelector.visible = true


func _on_main_world_selector_settings_selected() -> void:
MainWorldSelector.visible = false
SettingsPage.visible = true


func _on_settings_page_back() -> void:
SettingsPage.visible = false
MainWorldSelector.visible = true
5 changes: 5 additions & 0 deletions Script/WorldSelector/MainWorldSelector.gd
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ extends Control

signal main_world_selected
signal show_extra_worlds
signal settings_selected

@onready var CandyWrapperButton = %CandyWrapperButton

Expand All @@ -20,3 +21,7 @@ func _on_extra_worlds_button_pressed() -> void:
func _on_visibility_changed() -> void:
if self.visible and CandyWrapperButton:
CandyWrapperButton.grab_focus()


func _on_settings_button_pressed() -> void:
settings_selected.emit()
33 changes: 33 additions & 0 deletions Script/WorldSelector/SettingsPage.gd
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
extends Control

signal back

@onready var music_slider : HSlider = %MusicSlider
@onready var sfx_slider : HSlider = %SfxSlider

func _ready() -> void:
_initialise_slider(music_slider, "Music")
_initialise_slider(sfx_slider, "Sfx")


func _initialise_slider(slider: Slider, bus: String):
slider.value = Settings.get_volume(bus)
slider.value_changed.connect(_on_slider_value_changed.bind(bus))


func _on_slider_value_changed(value: float, bus: String) -> void:
Settings.set_volume(bus, value)


func _on_visibility_changed() -> void:
if self.visible and music_slider:
music_slider.grab_focus()


func _input(event: InputEvent) -> void:
if self.visible and event.is_action_pressed("ui_cancel"):
back.emit()


func _on_back_button_pressed() -> void:
back.emit()
1 change: 1 addition & 0 deletions Worlds/Cassidy's Purple World/Scene/Explosion.tscn
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ frame = 1
[node name="AudioStreamPlayer" type="AudioStreamPlayer" parent="."]
stream = ExtResource("2_u3wti")
autoplay = true
bus = &"Sfx"

[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
libraries = {
Expand Down
1 change: 1 addition & 0 deletions Worlds/Cassidy's Purple World/Scene/Player.tscn
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,7 @@ shape = SubResource("2")

[node name="Audio" type="AudioStreamPlayer" parent="."]
stream = ExtResource("3_ea3of")
bus = &"Sfx"

[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
libraries = {
Expand Down
3 changes: 3 additions & 0 deletions Worlds/Cassidy's Purple World/World.tscn
Original file line number Diff line number Diff line change
Expand Up @@ -30,11 +30,14 @@ frame = 1
[node name="Music" type="AudioStreamPlayer" parent="."]
stream = ExtResource("4_21637")
autoplay = true
bus = &"Music"

[node name="Audio" type="Node" parent="."]

[node name="Win" type="AudioStreamPlayer" parent="Audio"]
stream = ExtResource("5_q65sc")
bus = &"Sfx"

[node name="Lose" type="AudioStreamPlayer" parent="Audio"]
stream = ExtResource("6_upqr8")
bus = &"Sfx"
3 changes: 3 additions & 0 deletions Worlds/Sample/World.tscn
Original file line number Diff line number Diff line change
Expand Up @@ -28,11 +28,14 @@ frame = 1
[node name="Music" type="AudioStreamPlayer" parent="."]
stream = ExtResource("2_pgqpj")
autoplay = true
bus = &"Music"

[node name="Audio" type="Node" parent="."]

[node name="Win" type="AudioStreamPlayer" parent="Audio"]
stream = ExtResource("5_aa7p7")
bus = &"Sfx"

[node name="Lose" type="AudioStreamPlayer" parent="Audio"]
stream = ExtResource("6_0fq84")
bus = &"Sfx"
15 changes: 15 additions & 0 deletions default_bus_layout.tres
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
[gd_resource type="AudioBusLayout" format=3 uid="uid://dedcyh6mnrxw5"]

[resource]
bus/1/name = &"Sfx"
bus/1/solo = false
bus/1/mute = false
bus/1/bypass_fx = false
bus/1/volume_db = 0.0
bus/1/send = &"Master"
bus/2/name = &"Music"
bus/2/solo = false
bus/2/mute = false
bus/2/bypass_fx = false
bus/2/volume_db = 0.0
bus/2/send = &"Master"
1 change: 1 addition & 0 deletions project.godot
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ config/icon="res://Image/picon.svg"
[autoload]

global="*res://Script/Global.gd"
Settings="*res://Script/Settings.gd"

[display]

Expand Down

0 comments on commit 54cf52a

Please sign in to comment.