class_name MenuSetting extends Resource enum Receivers { NONE, NODEPATH, SINGLETON, AUDIO_SERVER, CAMERA_SERVER, DISPLAY_SERVER, ENGINE, IP_SETTINGS, INPUT, INPUT_MAP, PHYSICS_2D, PHYSICS_3D, RENDERING_SERVER, THEME_DB, XR_SERVER } ## The path to the Project Setting you are using. If it is a setting specific to your game, add it trough code or the Project Settings Panel. @export_placeholder("i.e. application/config/name") var project_settings_path: String = "" ## Choose what gets changed in game when setting this value. None means the setting is ony meant to be applied after a reboot. @export var change: Receivers = Receivers.NODEPATH: set(value): change = value property_list_changed.emit() ## If you choose to change a custom node path, you can set it here. @export_node_path() var nodepath: NodePath ## If you choose to change a singleton, you can set it's name here. @export var singleton_name: StringName ## Path to the function you are setting. @export_placeholder("\"set\" to change property") var attribute_path: String = "" ## extra attributes your call may need. Leave empty slot if variable is not meant to be at first index. @export var extra_attributes: Array func _validate_property(property: Dictionary) -> void: if property.name == "nodepath" and change != Receivers.NODEPATH: property.usage |= PROPERTY_USAGE_READ_ONLY func get_connected_control() -> Control: return Label.new() func get_unonnected_control() -> Control: var setting: Dictionary = ProjectSettings.get_setting_with_override(project_settings_path) return Label.new()