extends Control @onready var settings_vbox: VBoxContainer = %SettingsContainer var shader: ShaderMaterial var _data: Dictionary = { "SPIN_ROTATION": -2.0, "SPIN_SPEED": 7.0, "OFFSET": Vector2(0.0, 0.0), "COLOUR_1": Color(0.871, 0.267, 0.231), "COLOUR_2": Color(0.0, 0.42, 0.706), "COLOUR_3": Color(0.086, 0.137, 0.145), "CONTRAST": 3.5, "LIGTHING": 0.4, "SPIN_AMOUNT": 0.25, "PIXEL_FILTER": 745.0, "SPIN_EASE": 1.0, } var _reset_data = _data.duplicate() const FLOAT_PARAM = preload("res://components/float_param.tscn") const VEC_2_PARAM = preload("res://components/vec2_param.tscn") const COLOR_PARAM = preload("res://components/color_param.tscn") var uniform_controls: Array[Control] = [] func _ready() -> void: var balatro_shader: TextureRect = %BalatroShader shader = balatro_shader.material setup_controls() func setup_controls() -> void: var i i = create_param(FLOAT_PARAM) as FloatParam i.setup(_data, "SPIN_ROTATION", 1, -10, 10) i = create_param(FLOAT_PARAM) as FloatParam i.setup(_data, "SPIN_SPEED", 1, -10, 10) i = create_param(VEC_2_PARAM) as Vec2Param i.setup(_data, "OFFSET") i = create_param(COLOR_PARAM) as ColorParam i.setup(_data, "COLOUR_1") i = create_param(COLOR_PARAM) as ColorParam i.setup(_data, "COLOUR_2") i = create_param(COLOR_PARAM) as ColorParam i.setup(_data, "COLOUR_3") i = create_param(FLOAT_PARAM) as FloatParam i.setup(_data, "CONTRAST", 1, 0, 10.0) i = create_param(FLOAT_PARAM) as FloatParam i.setup(_data, "LIGTHING") i = create_param(FLOAT_PARAM) as FloatParam i.setup(_data, "SPIN_AMOUNT") i = create_param(FLOAT_PARAM) as FloatParam i.setup(_data, "PIXEL_FILTER", 0, 64, 4096.0) i = create_param(FLOAT_PARAM) as FloatParam i.setup(_data, "SPIN_EASE", 2, 0, 3.0) func _process(delta: float) -> void: for key in _data.keys(): shader.set_shader_parameter(key, _data[key]) func create_param(template: PackedScene) -> Control: var c = template.instantiate() settings_vbox.add_child(c) uniform_controls.append(c) return c func _on_reset_button_pressed() -> void: for key in _reset_data.keys(): _data[key] = _reset_data[key] while settings_vbox.get_child_count() > 0: var c = settings_vbox.get_child(0) settings_vbox.remove_child(c) c.queue_free() setup_controls()