106 lines
2.8 KiB
GDScript
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()
|