pir-serious-game-ethics/addons/dialogic/Editor/Events/Common/AudioPicker.gd
2021-04-16 16:35:07 +02:00

106 lines
2.8 KiB
GDScript

tool
extends HBoxContainer
var editor_reference
var editorPopup
export (String) var event_name = 'Audio Event'
var file : String
var audio : String
var audio_bus : String = "Master"
var volume: float = 0
signal audio_changed(file, audio, audio_bus, volume)
func _ready():
load_audio('')
AudioServer.connect("bus_layout_changed", self, "update_bus_selector")
$ButtonClear.icon = get_icon("Remove", "EditorIcons")
$ButtonPreviewPlay.icon = get_icon("Play", "EditorIcons")
update_bus_selector()
func _on_ButtonAudio_pressed():
editor_reference.godot_dialog("*.wav, *.ogg, *.mp3")
editor_reference.godot_dialog_connect(self, "_on_file_selected")
func _on_file_selected(path, target):
target.load_audio(path) # why is the targer needed? Couldn't it just call itself?
func load_audio(path: String):
if not path.empty():
$Name.text = path.get_file()
$Name.hint_tooltip = path
$ButtonAudio.hint_tooltip = path
$ButtonClear.disabled = false
$ButtonPreviewPlay.disabled = false
file = path
audio = 'play'
emit_signal("audio_changed", file, audio, audio_bus, volume)
show_options()
else:
$Name.text = 'No sound (will stop previous '+event_name+')'
file = ''
audio = 'stop'
emit_signal("audio_changed", file, audio, audio_bus, volume)
hide_options()
func load_data(data):
file = data['file']
if data.has('audio'): audio = data['audio']
if data.has('background-music'): audio = data['background-music']
if data.has('audio_bus'): audio_bus = data['audio_bus']
for idx in range($BusSelector.get_item_count()):
if $BusSelector.get_item_text(idx) == audio_bus:
$BusSelector.select(idx)
if data.has('volume'): volume = data['volume']
$Volume.value = volume
load_audio(file)
func _on_ButtonPreviewPlay_pressed():
if $AudioPreview.is_playing():
$AudioPreview.stop()
else:
$AudioPreview.stream = load(file)
$AudioPreview.bus = audio_bus
$AudioPreview.volume_db = volume
$AudioPreview.play()
$ButtonPreviewPlay.icon = get_icon("Stop", "EditorIcons")
func _on_AudioPreview_finished():
$ButtonPreviewPlay.icon = get_icon("Play", "EditorIcons")
func _on_ButtonClear_pressed():
load_audio('')
func update_bus_selector():
$BusSelector.clear()
for i in range(AudioServer.bus_count):
$BusSelector.add_item(AudioServer.get_bus_name(i))
func _on_BusSelector_item_selected(index):
audio_bus = $BusSelector.get_item_text(index)
emit_signal("audio_changed", file, audio, audio_bus, volume)
func _on_Volume_value_changed(value):
volume = value
emit_signal("audio_changed", file, audio, audio_bus, volume)
func show_options():
$ButtonClear.show()
$ButtonPreviewPlay.show()
$BusSelector.show()
$VolumeLabel.show()
$Volume.show()
func hide_options():
$ButtonClear.hide()
$ButtonPreviewPlay.hide()
$BusSelector.hide()
$VolumeLabel.hide()
$Volume.hide()