capri/addons/capri_tools/global_sound_selector.gd

46 lines
1.2 KiB
GDScript

extends EditorProperty
var _dropdown_button := Button.new()
var _popup_menu := PopupMenu.new()
func _init() -> void:
_dropdown_button.pressed.connect(_show_popup)
_dropdown_button.icon = EditorInterface.get_editor_theme().get_icon("AudioStreamPlayer", "EditorIcons")
_popup_menu.index_pressed.connect(_on_sound_selected)
add_child(_dropdown_button)
add_child(_popup_menu)
add_focusable(_dropdown_button)
func _update_property() -> void:
var new_value: StringName = get_edited_object()[get_edited_property()]
_dropdown_button.text = new_value.capitalize()
func _show_popup() -> void:
var sounds = GlobalSounds.sounds.keys()
_popup_menu.clear()
for sound: StringName in sounds:
_popup_menu.add_icon_item(
EditorInterface.get_editor_theme().get_icon("AudioStreamPlayer", "EditorIcons"),
sound.capitalize()
)
var button_rect = _dropdown_button.get_global_rect()
_popup_menu.reset_size()
var popup_pos = button_rect.position + Vector2(DisplayServer.window_get_position())
_popup_menu.position = popup_pos
_popup_menu.min_size.x = button_rect.size.x
_popup_menu.popup()
func _on_sound_selected(index: int) -> void:
var sound = GlobalSounds.sounds.keys()[index]
_dropdown_button.grab_focus()
emit_changed(get_edited_property(), sound)