From 463b7952b1eedec0d69a4614dfa36ac6e056d0da Mon Sep 17 00:00:00 2001 From: Haze Weathers Date: Fri, 2 Jun 2023 20:31:35 -0400 Subject: [PATCH] wibblin' on the border now --- shaders/wibble_border.gdshader | 37 ++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 shaders/wibble_border.gdshader diff --git a/shaders/wibble_border.gdshader b/shaders/wibble_border.gdshader new file mode 100644 index 0000000..1a16ca6 --- /dev/null +++ b/shaders/wibble_border.gdshader @@ -0,0 +1,37 @@ +shader_type canvas_item; + +uniform vec2 speed = vec2(0.0, 0.0); +uniform vec2 ammount = vec2(0.0, 0.0); +uniform vec2 offset = vec2(0.0, 0.0); +uniform vec2 delay = vec2(0.0, 0.0); + +uniform vec4 border_color : hint_color = vec4(0.0, 0.0, 0.0, 1.0); +uniform bool border_corners = false; + +bool is_border(sampler2D tex, vec2 uv, vec2 pixel_size) { + float check = texture(tex, uv + vec2(pixel_size.x, 0.0)).a; + check += texture(tex, uv + vec2(-pixel_size.x, 0.0)).a; + check += texture(tex, uv + vec2(0.0, pixel_size.y)).a; + check += texture(tex, uv + vec2(0.0, -pixel_size.y)).a; + + if (border_corners) { + check += texture(tex, uv + pixel_size).a; + check += texture(tex, uv - pixel_size).a; + check += texture(tex, uv + vec2(pixel_size.x, -pixel_size.y)).a; + check += texture(tex, uv + vec2(-pixel_size.x, pixel_size.y)).a; + } + + return check > 0.0; +} + +void vertex() { + VERTEX += sin(speed * (delay + TIME)) * ammount + offset; +} + +void fragment() { + COLOR = texture(TEXTURE, UV); + + if (COLOR.a == 0.0 && is_border(TEXTURE, UV, TEXTURE_PIXEL_SIZE)) { + COLOR = border_color; + } +} \ No newline at end of file