day / night cycle on BG! (:

This commit is contained in:
Harmony Honey 2023-03-14 04:30:50 -04:00
parent 903acc41df
commit 72e821bb9c
3 changed files with 56 additions and 6 deletions

View file

@ -3,14 +3,43 @@ extends CanvasLayer
onready var mat : ShaderMaterial = $ColorRect.material
export var colors = 0 setget set_colors
export(PoolColorArray) var palette : PoolColorArray = ["0062ff", "00eaff", "af00bf", "0079db", "ff00ff", "009dff", "00eaff", "0062ff", "6666ff", "00004d"]
export(Array, PoolColorArray) var palettes
var step_colors : Array
var clock := 0.0
export var daytime := 60.0
var time := 10.0
var frac = 0.0
func _ready():
if Engine.editor_hint: return
self.colors = 0
func set_colors(arg := 0):
colors = posmod(arg, palette.size() / 2)
#print("BG: ", colors, " pal: ", palette.size(), " / 2 = ", palette.size() / 2)
func _process(delta):
if Engine.editor_hint: return
clock += delta
if clock > time:
clock = fposmod(clock, time)
step_colors.append(step_colors.pop_front())
frac = clock / time
var c1 = step_colors[0].linear_interpolate(step_colors[1], frac)
var c2 = step_colors[1].linear_interpolate(step_colors[2], frac)
if mat:
mat.set_shader_param("col1", palette[colors * 2])
mat.set_shader_param("col2", palette[(colors * 2) + 1])
mat.set_shader_param("col1", c1)
mat.set_shader_param("col2", c2)
func set_colors(arg := 0):
if palettes.size() > 0:
colors = posmod(arg, palettes.size())
step_colors = palettes[colors]
time = daytime / max(step_colors.size(), 1.0)
print(time)
if mat:
mat.set_shader_param("col1", step_colors[0])
mat.set_shader_param("col2", step_colors[1])

View file

@ -11,6 +11,8 @@ shader_param/col2 = Color( 0, 0.917647, 1, 1 )
[node name="BG" type="CanvasLayer"]
layer = -5
script = ExtResource( 2 )
palettes = [ PoolColorArray( 0, 0.384314, 1, 1, 0, 0.917647, 1, 1, 0.686275, 0, 0.74902, 1, 0, 0.47451, 0.858824, 1, 1, 0.329412, 0, 1 ), PoolColorArray( 0, 0.917647, 1, 1, 0, 0.384314, 1, 1, 0.4, 0.4, 1, 1, 0, 0, 0.301961, 1 ), PoolColorArray( 1, 0, 1, 1, 0, 0.615686, 1, 1, 0.686275, 0, 0.74902, 1, 0, 0.47451, 0.858824, 1 ), PoolColorArray( 0, 0.384314, 1, 1, 0, 0.917647, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0.623529, 1, 1, 1, 0, 1, 0.780392, 0, 1, 1 ) ]
daytime = 30.0
[node name="ColorRect" type="ColorRect" parent="."]
material = SubResource( 2 )

19
src/shader/sky2.gdshader Normal file
View file

@ -0,0 +1,19 @@
shader_type canvas_item;
uniform vec4 col0 : hint_color = vec4(0.0, 0.38, 1.0, 1.0);
uniform vec4 col1 : hint_color = vec4(0.0, 0.92, 1.0, 1.0);
uniform vec4 col2 : hint_color = vec4(0.0, 0.92, 1.0, 1.0);
uniform vec4 col3 : hint_color = vec4(0.0, 0.38, 1.0, 1.0);
uniform float time_scale : hint_range(0.0, 1.0) = 1.0;
uniform float time = 30.0;
void fragment(){
float f = abs((mod(TIME, time) / time) - 0.5) * 2.0;
vec4 c1 = mix(col0, col2, f);
vec4 c2 = mix(col1, col3, f);
//mix(col0, col2, )
COLOR = mix(c1, c2, UV.y);
}