balatro-shader/main.gd

82 lines
2.2 KiB
GDScript

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()