53 lines
1.3 KiB
GDScript3
53 lines
1.3 KiB
GDScript3
|
@tool
|
||
|
extends PanelContainer
|
||
|
|
||
|
@export var play_button : Button
|
||
|
@export var stop_button : Button
|
||
|
@export var fade_out_toggle : CheckButton
|
||
|
var event_instance : FmodEvent
|
||
|
|
||
|
func _ready() -> void:
|
||
|
hide()
|
||
|
play_button.icon = EditorInterface.get_editor_theme().get_icon("Play", "EditorIcons")
|
||
|
stop_button.icon = EditorInterface.get_editor_theme().get_icon("Stop", "EditorIcons")
|
||
|
play_button.pressed.connect(on_play_button_pressed)
|
||
|
stop_button.pressed.connect(on_stop_button_pressed)
|
||
|
|
||
|
|
||
|
func set_fmod_event(_event_description : FmodEventDescription) -> void:
|
||
|
stop_and_release_instance() # always stop and release if a previous one is active
|
||
|
event_instance = FmodServer.create_event_instance_with_guid(_event_description.get_guid())
|
||
|
show()
|
||
|
|
||
|
|
||
|
func play_event() -> void:
|
||
|
if event_instance:
|
||
|
event_instance.start()
|
||
|
|
||
|
|
||
|
func stop_event() -> void:
|
||
|
if event_instance:
|
||
|
var stop_mode : int = FmodServer.FMOD_STUDIO_STOP_IMMEDIATE
|
||
|
if fade_out_toggle.button_pressed:
|
||
|
stop_mode = FmodServer.FMOD_STUDIO_STOP_ALLOWFADEOUT
|
||
|
|
||
|
event_instance.stop(stop_mode)
|
||
|
|
||
|
|
||
|
func _exit_tree() -> void:
|
||
|
stop_and_release_instance()
|
||
|
|
||
|
|
||
|
func stop_and_release_instance() -> void:
|
||
|
if event_instance:
|
||
|
event_instance.stop(0)
|
||
|
event_instance.release()
|
||
|
|
||
|
|
||
|
func on_play_button_pressed() -> void:
|
||
|
play_event()
|
||
|
|
||
|
|
||
|
func on_stop_button_pressed() -> void:
|
||
|
stop_event()
|