TowerDefense/addons/LevelEditor/UI/CustomOptionButton.gd

50 lines
1.1 KiB
GDScript3
Raw Normal View History

2025-08-29 20:07:58 +02:00
@tool
extends OptionButton
class_name CustomOptionButton
2025-08-30 20:08:12 +02:00
signal onValueChanged(value : String)
2025-08-29 20:07:58 +02:00
var selectedValue : String
2025-08-30 20:08:12 +02:00
var options : Dictionary
2025-08-29 20:07:58 +02:00
func _ready() -> void:
allow_reselect = true
2025-08-30 20:08:12 +02:00
item_selected.connect(itemHasBeenSelected)
2025-08-29 20:07:58 +02:00
2025-08-30 20:08:12 +02:00
func setOptions(options : Dictionary, defaultSelectedValue : String = "") -> void:
self.options = options
2025-08-29 20:07:58 +02:00
clear()
2025-08-30 20:08:12 +02:00
options.keys().map(add_item)
selectItemByValue(defaultSelectedValue)
2025-08-31 23:07:55 +02:00
func addOption(value : String, displayName : String, autoSelect : bool = false) -> void:
2025-08-30 20:08:12 +02:00
add_item(displayName)
options.set(value, displayName)
if autoSelect:
selected = options.size() - 1
selectedValue = value
2025-08-29 20:07:58 +02:00
func itemHasBeenSelected(index : int) -> void:
2025-08-31 23:07:55 +02:00
var value = options.get(get_item_text(index))
2025-08-30 20:08:12 +02:00
if selectedValue != value:
selectedValue = value
2025-08-29 20:07:58 +02:00
onValueChanged.emit(selectedValue)
2025-08-30 20:08:12 +02:00
func selectItemByValue(value : String) -> void:
2025-08-31 23:07:55 +02:00
var name = options.find_key(value)
2025-08-29 20:07:58 +02:00
for i in item_count:
if get_item_text(i) == name:
selected = i
2025-08-30 20:08:12 +02:00
selectedValue = value
2025-08-29 20:07:58 +02:00
return
2025-08-30 20:08:12 +02:00
if options:
selected = 0
itemHasBeenSelected(0)