Added menu settings add-on

This commit is contained in:
2026-03-07 14:16:44 +01:00
parent 8b7a8e014f
commit df8c8c6c3b
70 changed files with 4053 additions and 1 deletions

View File

@@ -0,0 +1,72 @@
extends SettingsElement
class_name OptionElement
## A settings element specifically for elements that have option buttons.
## Default value for the element.
## Value has to exist in OPTION_LIST_ otherwise the first option will be used.
@export var DEFAULT_VALUE: String
## Element node references
@export var OptionsRef: OptionButton
## List of options related to the settings element
var OPTION_LIST_
## Index of the currently selected item
var selectedIndex: int
func _ready() -> void:
super._ready()
OPTION_LIST_.make_read_only()
OptionsRef.connect("item_selected", option_selected)
func init_element() -> void:
fill_options_button()
func get_valid_values() -> Dictionary:
if not OPTION_LIST_.has(DEFAULT_VALUE):
push_warning("Invalid default value for element '" + IDENTIFIER + "'.")
if OPTION_LIST_ is Dictionary:
DEFAULT_VALUE = OPTION_LIST_.keys()[0]
else:
DEFAULT_VALUE = OPTION_LIST_[0]
return {
"defaultValue": DEFAULT_VALUE,
"validOptions": OPTION_LIST_
}
## Used to initialize the option button element.
func fill_options_button() -> void:
var index: int = 0
# Get the current item count of the option button
var itemCount: int = OptionsRef.get_item_count()
# Add the options from the received option list of the element
for option in OPTION_LIST_:
# Check if the option button has not been initialized yet
if itemCount == 0:
OptionsRef.add_item(option, index)
# Select the option that was loaded
if option == currentValue:
OptionsRef.select(index)
selectedIndex = index
index += 1
func option_selected(index: int) -> void:
# Check if the settings menu is open
if ParentRef.settingsCache_.size() > 0:
# Update the settings cache with the selected option
ParentRef.settingsCache_[IDENTIFIER] = OptionsRef.get_item_text(index)
# Check if the selected value is different than the saved value
ParentRef.settings_changed(IDENTIFIER)
# Update the element's values
currentValue = OptionsRef.get_item_text(index)
selectedIndex = index