ld58-collector/paintings/procedual/fractal.gd

67 lines
2.5 KiB
GDScript

@tool
extends ColorRect
@export_tool_button('Randomize', 'RandomNumberGenerator') var randomize_action = randomize
@export var smoothing := true:
set(x): material.set_shader_parameter('smoothing', x)
get(): return material.get_shader_parameter('smoothing')
@export var use_color_gradient := false:
set(x): material.set_shader_parameter('use_color_gradient', x)
get(): return material.get_shader_parameter('use_color_gradient')
@export var gradient_start := Color(.18, 0, .45):
set(x): material.set_shader_parameter('gradient_start', x)
get(): return material.get_shader_parameter('gradient_start')
@export var gradient_end := Color.YELLOW:
set(x): material.set_shader_parameter('gradient_end', x)
get(): return material.get_shader_parameter('gradient_end')
@export var gradient_accent := Color.YELLOW:
set(x): material.set_shader_parameter('gradient_accent', x)
get(): return material.get_shader_parameter('gradient_accent')
@export var fractal_scale := 0.5:
set(x): material.set_shader_parameter('scale', x)
get(): return material.get_shader_parameter('scale')
@export var fractal_seed := Vector2(-0.529, 0.136):
set(x): material.set_shader_parameter('seed', x)
get(): return material.get_shader_parameter('seed')
@export var fractal_power := 3:
set(x): material.set_shader_parameter('power', x)
get(): return material.get_shader_parameter('power')
@export var fractal_escape := 1.0:
set(x): material.set_shader_parameter('escape', x)
get(): return material.get_shader_parameter('escape')
func _on_resized() -> void:
material.set_shader_parameter('aspect_ratio', size.aspect())
func _ready() -> void:
_on_resized()
func randomize(rng_seed := randi()) -> void:
var rng := RandomNumberGenerator.new()
rng.seed = rng_seed
fractal_power = rng.randi_range(2, 5)
fractal_escape = rng.randi_range(1, 4)
#fractal_scale = randf_range(0.5, 0.5 * size.aspect()) - 0.1
match fractal_power:
5: fractal_seed = Vector2(rng.randf_range(-0.7, -0.6), rng.randf_range(-0.1, 0.1))
4: fractal_seed = Vector2(rng.randf_range(-1.2, -1), rng.randf_range(-0.2, 0.2))
3: fractal_seed = Vector2(rng.randf_range(0.45, 0.7), rng.randf_range(-0.7, 0.7))
2: match fractal_escape:
1.0: fractal_seed = Vector2(rng.randf_range(-0.9, -0.8), rng.randf_range(0, 0))
2.0: fractal_seed = Vector2(rng.randf_range(-1.8, -1.), rng.randf_range(0, 0))
_: fractal_seed = Vector2.RIGHT.rotated(randf_range(0, TAU)) * Vector2(0.6, 1)
_: fractal_seed = Vector2(rng.randf_range(-1, 1), rng.randf_range(-1, 1))