small racing game im working on
Diffstat (limited to 'ui/editor/track_editor.gdshader')
-rw-r--r--ui/editor/track_editor.gdshader32
1 files changed, 32 insertions, 0 deletions
diff --git a/ui/editor/track_editor.gdshader b/ui/editor/track_editor.gdshader
new file mode 100644
index 0000000..afc349d
--- /dev/null
+++ b/ui/editor/track_editor.gdshader
@@ -0,0 +1,32 @@
+shader_type canvas_item;
+
+void fragment() {
+
+ // rect boundaries
+ vec2 rectMin = vec2(0.4, 0.2);
+ vec2 rectMax = vec2(0.8, 0.8);
+
+ vec2 center = (rectMin + rectMax) / 2.0;
+ vec2 halfSize = center - rectMin;
+ vec2 fw = fwidth(UV);
+
+ vec2 dist = abs(UV - center);
+
+ float col = 0.0;
+ if (all(lessThan(dist, halfSize)) && any(greaterThan(dist, halfSize - fw))) {
+ // for pixel here I could use fragCoord.xy, but on textures you don't have it
+ // using fwidth is a tricky way to operate in screenspace sizes on all surfaces
+ // of course it's an approximation, but it's a pretty good one, here, uncomment this
+ // line to try fragCoord, it gives almost the same result:
+ //vec2 pixel = fragCoord.xy;
+ vec2 pixel = UV / fw;
+ float aspect = halfSize.y / halfSize.x;
+ float dir = (dist.x * aspect > dist.y) ?
+ -sign(UV.x - center.x) : sign(UV.y - center.y);
+ float dash = step(0.5, fract((pixel.x + pixel.y) * dir / 10.0 + TIME));
+ col = mix(1.0, 0.0, dash);
+ }
+
+ COLOR = vec4(col, col, col, 1.0);
+}
+