a game about throwing hammers made for the github game off
Diffstat (limited to 'hammers/hammer_outline.gdshader')
-rw-r--r--hammers/hammer_outline.gdshader36
1 files changed, 36 insertions, 0 deletions
diff --git a/hammers/hammer_outline.gdshader b/hammers/hammer_outline.gdshader
new file mode 100644
index 0000000..90ce9bc
--- /dev/null
+++ b/hammers/hammer_outline.gdshader
@@ -0,0 +1,36 @@
+/*
+Rainbow outline by @Farfalk and @ThePadDev, July 2021
+
+Apply to canvas items with transparent backgrounds.
+Check that there is sufficient transparent background space for the outline!
+
+CC0 License (but citation is welcome <3)
+*/
+
+shader_type canvas_item;
+
+uniform float line_width : hint_range(0, 20) = 1.0; // thickness of the line
+uniform float sin_frequency : hint_range(0.1, 2.0) = 0.25; // frequency of the rainbow
+uniform float light_offset : hint_range(0.0, 1.0) = 1.0; // this offsets all color channels; if set to 0 only red green and blue colors will be shown.
+
+void fragment() {
+ vec2 size = TEXTURE_PIXEL_SIZE * line_width;
+
+ float outline = texture(TEXTURE, UV + vec2(-size.x, 0)).a;
+ outline += texture(TEXTURE, UV + vec2(0, size.y)).a;
+ outline += texture(TEXTURE, UV + vec2(size.x, 0)).a;
+ outline += texture(TEXTURE, UV + vec2(0, -size.y)).a;
+ outline += texture(TEXTURE, UV + vec2(-size.x, size.y)).a;
+ outline += texture(TEXTURE, UV + vec2(size.x, size.y)).a;
+ outline += texture(TEXTURE, UV + vec2(-size.x, -size.y)).a;
+ outline += texture(TEXTURE, UV + vec2(size.x, -size.y)).a;
+ outline = min(outline, 1.0);
+
+ vec4 animated_line_color = vec4(light_offset + sin(2.0*3.14*sin_frequency*TIME),
+ light_offset + sin(2.0*3.14*sin_frequency*TIME + radians(120.0)),
+ light_offset + sin(2.0*3.14*sin_frequency*TIME + radians(240.0)),
+ 1.0);
+
+ vec4 color = texture(TEXTURE, UV);
+ COLOR = mix(color, animated_line_color, outline - color.a);
+} \ No newline at end of file