Give-LIFE-Cybers/Scripts/GL_Node_Picker_Audio.gd

81 lines
2.4 KiB
GDScript

extends GL_Node_Picker
var audio_selector:OptionButton
var file_dialog:FileDialog
func _ready():
file_dialog = get_node("FileDialog")
audio_selector = get_node("HBox").get_node("OptionButton")
DirAccess.make_dir_recursive_absolute(find_audio_path())
file_dialog.file_selected.connect(_on_audio_file_selected)
_update_audio_options()
func _on_audio_button_pressed():
file_dialog.clear_filters()
file_dialog.current_path = OS.get_system_dir(OS.SYSTEM_DIR_DOWNLOADS)
file_dialog.add_filter("*.wav ; WAV Audio")
file_dialog.add_filter("*.mp3 ; MP3 Audio")
file_dialog.add_filter("*.ogg ; OGG Audio")
file_dialog.popup_centered()
func _on_audio_file_selected(path: String):
var filename = path.get_file()
var dest_path = find_audio_path() + "/" + filename
var file = FileAccess.open(path, FileAccess.READ)
if file:
var data = file.get_buffer(file.get_length())
file.close()
var save_file = FileAccess.open(dest_path, FileAccess.WRITE)
if save_file:
save_file.store_buffer(data)
save_file.close()
print("Saved audio to: ", dest_path)
_update_audio_options(filename) # repopulate and select this one
else:
push_error("Failed to write audio file.")
else:
push_error("Failed to read selected audio.")
func _update_audio_options(select_filename := ""):
audio_selector.clear()
var audio_files := []
var dir := DirAccess.open(find_audio_path())
if dir:
dir.list_dir_begin()
var file = dir.get_next()
while file != "":
if not dir.current_is_dir():
audio_files.append(file)
file = dir.get_next()
dir.list_dir_end()
audio_files.sort()
for i in range(audio_files.size()):
audio_selector.add_item(audio_files[i])
if audio_files[i] == select_filename:
audio_selector.select(i)
_set_audio_path(audio_files[i])
func _on_audio_option_selected(index: int):
var file = audio_selector.get_item_text(index)
_set_audio_path(file)
func _set_audio_path(file: String):
var path = find_audio_path() + "/" + file
if mainNode and mainNode.rows.has(valueName):
var audio = GL_AudioType.new()
audio.value = path
mainNode.rows[valueName]["pickValue"] = audio
print("Audio set: ", path)
else:
push_error("mainNode or rows[valueName] not found.")
func find_audio_path() -> String:
for node in get_tree().get_nodes_in_group("Node Map"):
if node is GL_Node_Map:
return "user://Showtapes/" + node._workspace_ID + "/Audio"
printerr("Uhhhhh")
return ""