Implement procedural color palettes

This commit is contained in:
Garrett Gunnell 2025-08-19 22:37:46 -07:00
parent c97592398b
commit c2cae886a8
4 changed files with 71 additions and 1 deletions

View file

@ -1,4 +1,4 @@
[gd_scene load_steps=67 format=4 uid="uid://cfsgy7huubpok"]
[gd_scene load_steps=68 format=4 uid="uid://cfsgy7huubpok"]
[ext_resource type="Script" uid="uid://drfxlavovcgta" path="res://Assets/Scripts/automata_compositor_effect.gd" id="1_vlji8"]
[ext_resource type="Script" uid="uid://bjuwof03jt0ds" path="res://Assets/Scripts/draw_world_compositor_effect.gd" id="2_ttgh6"]
@ -47,6 +47,7 @@
[ext_resource type="Script" uid="uid://bgihnnx0yu44j" path="res://Assets/Scripts/UI/load_button.gd" id="43_3awfk"]
[ext_resource type="Script" uid="uid://crq07m1x6lflo" path="res://Assets/Scripts/UI/previous_preset_button.gd" id="44_m1eu0"]
[ext_resource type="Script" uid="uid://8a62se707mjg" path="res://Assets/Scripts/UI/next_preset_button.gd" id="44_vjyh1"]
[ext_resource type="Script" uid="uid://bnh23rc2uvlr2" path="res://Assets/Scripts/color_palette.gd" id="48_mje4x"]
[ext_resource type="AudioStream" uid="uid://cnbqleijqb7hy" path="res://Assets/Audio/bgm5.mp3" id="48_sitla"]
[ext_resource type="AudioStream" uid="uid://26ko7au7t7ed" path="res://Assets/Audio/left click 2.mp3" id="49_csh63"]
[ext_resource type="Script" uid="uid://c813c5ts2xint" path="res://Assets/Scripts/UI/left_click_audio.gd" id="50_nj45y"]
@ -1128,6 +1129,7 @@ anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
mouse_filter = 2
script = ExtResource("48_mje4x")
[node name="AudioStreamPlayer" type="AudioStreamPlayer" parent="."]
stream = ExtResource("48_sitla")

View file

@ -0,0 +1,65 @@
extends ColorRect
var rng = RandomNumberGenerator.new()
func _ready() -> void:
GameMaster.seed_changed.connect(new_palette)
new_palette()
func new_palette() -> void:
rng.set_seed(hash(GameMaster.get_seed()))
var palette_type = rng.randi_range(0, 2)
if palette_type == 0: monochromatic()
if palette_type == 1: complementary()
if palette_type == 2: tertiary()
func monochromatic() -> void:
var hue = rng.randf()
var color1 = Color.from_ok_hsl(hue, rng.randf_range(0.1, 0.9), rng.randf_range(0.05, 0.4))
var color2 = Color.from_ok_hsl(hue, rng.randf_range(0.1, 0.9), rng.randf_range(0.5, 0.9))
material.set_shader_parameter("first_color", Vector3(color1.r, color1.g, color1.b))
material.set_shader_parameter("second_color", Vector3(color2.r, color2.g, color2.b))
func complementary() -> void:
var hue = rng.randf()
var color1 = Color.from_ok_hsl(hue, rng.randf_range(0.1, 0.9), rng.randf_range(0.05, 0.4))
var color2 = Color.from_ok_hsl(hue, rng.randf_range(0.1, 0.9), rng.randf_range(0.5, 0.9))
var which_color_is_complemented = rng.randf()
if (which_color_is_complemented > 0.5): color1.ok_hsl_h = color1.ok_hsl_h + 0.5
else: color2.ok_hsl_h = color2.ok_hsl_h + 0.5
material.set_shader_parameter("first_color", Vector3(color1.r, color1.g, color1.b))
material.set_shader_parameter("second_color", Vector3(color2.r, color2.g, color2.b))
func tertiary() -> void:
var hue = rng.randf()
var color1 = Color.from_ok_hsl(hue, rng.randf_range(0.1, 0.9), rng.randf_range(0.05, 0.4))
var color2 = Color.from_ok_hsl(hue, rng.randf_range(0.1, 0.9), rng.randf_range(0.5, 0.9))
var which_color_is_tertiary = rng.randf()
var color_distance = rng.randf_range(0.05, 0.25)
var direction = rng.randf()
if (direction < 0.5): color_distance *= -1.0
if (which_color_is_tertiary > 0.5): color1.ok_hsl_h = color1.ok_hsl_h + color_distance
else: color2.ok_hsl_h = color2.ok_hsl_h + color_distance
material.set_shader_parameter("first_color", Vector3(color1.r, color1.g, color1.b))
material.set_shader_parameter("second_color", Vector3(color2.r, color2.g, color2.b))

View file

@ -0,0 +1 @@
uid://bnh23rc2uvlr2

View file

@ -5,6 +5,7 @@ signal loaded_preset
signal increment_input
signal decrement_input
signal hover_input
signal seed_changed
var automaton_cache = Array()
@ -99,6 +100,7 @@ func finish_reseed() -> void:
func set_seed(new_seed : int) -> void:
current_seed = new_seed
seed_changed.emit()
func get_seed() -> int: