diff options
-rw-r--r-- | game/addons/kenney_ui_audio/LICENSE.txt | 21 | ||||
-rw-r--r-- | game/addons/kenney_ui_audio/click3.wav | bin | 0 -> 15694 bytes | |||
-rw-r--r-- | game/addons/kenney_ui_audio/click3.wav.import | 24 | ||||
-rw-r--r-- | game/default_theme.theme | bin | 96130 -> 96231 bytes | |||
-rw-r--r-- | game/project.godot | 2 | ||||
-rw-r--r-- | game/src/Autoload/SFX.gd | 20 | ||||
-rw-r--r-- | game/src/Autoload/SoundManager.gd | 36 | ||||
-rw-r--r-- | game/src/MainMenu/MainMenu.gd | 5 | ||||
-rw-r--r-- | game/src/Utility/StyleBoxWithSound.gd | 33 |
9 files changed, 115 insertions, 26 deletions
diff --git a/game/addons/kenney_ui_audio/LICENSE.txt b/game/addons/kenney_ui_audio/LICENSE.txt new file mode 100644 index 0000000..f1f770a --- /dev/null +++ b/game/addons/kenney_ui_audio/LICENSE.txt @@ -0,0 +1,21 @@ + + + UI SFX Set + + by Kenney Vleugels (Kenney.nl) + + ------------------------------ + + License (Creative Commons Zero, CC0) + http://creativecommons.org/publicdomain/zero/1.0/ + + You may use these assets in personal and commercial projects. + Credit (Kenney or www.kenney.nl) would be nice but is not mandatory. + + ------------------------------ + + Donate: http://support.kenney.nl + Request: http://request.kenney.nl + + Follow on Twitter for updates: + @KenneyNL
\ No newline at end of file diff --git a/game/addons/kenney_ui_audio/click3.wav b/game/addons/kenney_ui_audio/click3.wav Binary files differnew file mode 100644 index 0000000..73dc62e --- /dev/null +++ b/game/addons/kenney_ui_audio/click3.wav diff --git a/game/addons/kenney_ui_audio/click3.wav.import b/game/addons/kenney_ui_audio/click3.wav.import new file mode 100644 index 0000000..1212f15 --- /dev/null +++ b/game/addons/kenney_ui_audio/click3.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://bsldcs3l8s7ug" +path="res://.godot/imported/click3.wav-191e18de041e05b52c4992cf5dba790b.sample" + +[deps] + +source_file="res://addons/kenney_ui_audio/click3.wav" +dest_files=["res://.godot/imported/click3.wav-191e18de041e05b52c4992cf5dba790b.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=0 diff --git a/game/default_theme.theme b/game/default_theme.theme Binary files differindex 514ab3f..2782dba 100644 --- a/game/default_theme.theme +++ b/game/default_theme.theme diff --git a/game/project.godot b/game/project.godot index 5031276..d24cbee 100644 --- a/game/project.godot +++ b/game/project.godot @@ -20,7 +20,7 @@ config/project_settings_override.template="user://settings.cfg" Events="*res://src/Autoload/Events.gd" Resolution="*res://src/Autoload/Resolution.gd" -SFX="*res://src/Autoload/SFX.gd" +SoundManager="*res://src/Autoload/SoundManager.gd" Keychain="*res://addons/keychain/Keychain.gd" [display] diff --git a/game/src/Autoload/SFX.gd b/game/src/Autoload/SFX.gd deleted file mode 100644 index 5299848..0000000 --- a/game/src/Autoload/SFX.gd +++ /dev/null @@ -1,20 +0,0 @@ -extends Node - -var _loaded_sfx = {} - -func _ready(): - var dir = DirAccess.open("res://audio/sfx/") - for fname in dir.get_files(): - if fname.get_extension() == "ogg": - _loaded_sfx[fname.get_basename()] = load("res://audio/sfx/" + fname) # SND-10 - -# SND-7 -func play(sound): - var player = AudioStreamPlayer.new() - player.bus = "SFX" - player.stream = _loaded_sfx[sound] - add_child(player) - player.play() - await player.finished - remove_child(player) - diff --git a/game/src/Autoload/SoundManager.gd b/game/src/Autoload/SoundManager.gd new file mode 100644 index 0000000..d3f8039 --- /dev/null +++ b/game/src/Autoload/SoundManager.gd @@ -0,0 +1,36 @@ +extends Node + +const _audio_directory_path : StringName = &"res://audio/sfx/" + +var _loaded_sound : Dictionary = {} + +var _bus_to_stream_player : Dictionary = {} + +func _ready(): + var dir = DirAccess.open(_audio_directory_path) + for fname in dir.get_files(): + match fname.get_extension(): + "ogg", "wav", "mp3": + _loaded_sound[fname.get_basename()] = load(_audio_directory_path.path_join(fname)) # SND-10 + +func play_stream(sound : AudioStream, bus_type : String) -> void: + var player : AudioStreamPlayer = _bus_to_stream_player.get(bus_type) + if player == null: + player = AudioStreamPlayer.new() + player.bus = bus_type + player.stream = AudioStreamPolyphonic.new() + _bus_to_stream_player[bus_type] = player + add_child(player) + player.play() + var poly_playback : AudioStreamPlaybackPolyphonic = player.get_stream_playback() + poly_playback.play_stream(sound) + +func play(sound : String, bus_type : String) -> void: + play_stream(_loaded_sound[sound], bus_type) + +# SND-7 +func play_effect_stream(sound : AudioStream) -> void: + play_stream(sound, "SFX") + +func play_effect(sound : String) -> void: + play(sound, "SFX") diff --git a/game/src/MainMenu/MainMenu.gd b/game/src/MainMenu/MainMenu.gd index 7cd02cf..1e15d10 100644 --- a/game/src/MainMenu/MainMenu.gd +++ b/game/src/MainMenu/MainMenu.gd @@ -21,28 +21,23 @@ func _ready(): # REQUIREMENTS: # * UIFUN-32 func _on_new_game_button_pressed(): - SFX.play("click") print("Start a new game!") new_game_button_pressed.emit() func _on_continue_button_pressed(): - SFX.play("click") print("Continue last game!") func _on_multi_player_button_pressed(): - SFX.play("click") print("Have fun with friends!") func _on_options_button_pressed(): - SFX.play("click") print("Check out some options!") options_button_pressed.emit() func _on_exit_button_pressed(): - await SFX.play("click") print("See you later!") get_tree().quit() diff --git a/game/src/Utility/StyleBoxWithSound.gd b/game/src/Utility/StyleBoxWithSound.gd new file mode 100644 index 0000000..8de1af1 --- /dev/null +++ b/game/src/Utility/StyleBoxWithSound.gd @@ -0,0 +1,33 @@ +@tool +extends StyleBox +class_name StyleBoxWithSound + +@export +var style_box : StyleBox: + get: return style_box + set(v): + style_box = v + emit_changed() + +@export +var sound : AudioStream: + get: return sound + set(v): + sound = v + emit_changed() + +func _get_draw_rect(rect : Rect2) -> Rect2: + if style_box == null: return Rect2() + return style_box._get_draw_rect(rect) + +func _draw(to_canvas_item : RID, rect : Rect2) -> void: + # This is a hack + # Works fine for simple non-normal style cases + # Normal styles being drawn immediately tho will trigger sound on startup + # This would require further work to be applicable for release sounds + # Is there any other reason aside from release sounds (might be useful for toggles?) + # This should be fast enough to not cause draw issues + if sound != null: + SoundManager.play_effect_stream(sound) + if style_box != null: + style_box.draw(to_canvas_item, rect) |