Added menu settings add-on
This commit is contained in:
@@ -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
|
||||
Reference in New Issue
Block a user