diff --git a/addons/dialogic/Modules/Audio/event_music.gd b/addons/dialogic/Modules/Audio/event_music.gd index d75dbdf63..1a30642bc 100644 --- a/addons/dialogic/Modules/Audio/event_music.gd +++ b/addons/dialogic/Modules/Audio/event_music.gd @@ -1,9 +1,9 @@ @tool +## Event that can change the currently playing background music. +## This event won't play new music if it's already playing. class_name DialogicMusicEvent extends DialogicEvent -## Event that can change the currently playing background music. - ### Settings @@ -24,9 +24,10 @@ var loop: bool = true ################################################################################ func _execute() -> void: - dialogic.Audio.update_music(file_path, volume, audio_bus, fade_length, loop) - finish() + if not dialogic.Audio.is_music_playing_resource(): + dialogic.Audio.update_music(file_path, volume, audio_bus, fade_length, loop) + finish() ################################################################################ ## INITIALIZE @@ -66,7 +67,7 @@ func get_shortcode_parameters() -> Dictionary: ## EDITOR REPRESENTATION ################################################################################ -func build_event_editor(): +func build_event_editor() -> void: add_header_edit('file_path', ValueType.FILE, { 'left_text' : 'Play', 'file_filter' : "*.mp3, *.ogg, *.wav; Supported Audio Files", diff --git a/addons/dialogic/Modules/Audio/subsystem_audio.gd b/addons/dialogic/Modules/Audio/subsystem_audio.gd index 307d126d9..9db6d656d 100644 --- a/addons/dialogic/Modules/Audio/subsystem_audio.gd +++ b/addons/dialogic/Modules/Audio/subsystem_audio.gd @@ -112,5 +112,15 @@ func stop_all_sounds() -> void: if "Sound" in node.name: node.queue_free() + func interpolate_volume_linearly(value :float, node:Node) -> void: node.volume_db = linear_to_db(value) + + +## Returns whether the currently playing audio resource is the same as this +## event's [param resource_path]. +func is_music_playing_resource(resource_path: String) -> bool: + var is_playing_resource: bool = (base_music_player.is_playing() + and base_music_player.stream.resource_path == resource_path) + + return is_playing_resource