Log in to post a comment.
#version 300 es #define PI 3.1415926 #define THETA 2. * PI precision highp float; uniform float iTime; uniform vec2 iResolution; uniform vec3 bg_color; //value=0,0,0 uniform vec3 fg_color; //value=1,1,1 uniform int enemies; //value=8, min=2, max=16, step=1 uniform float enemies_rotation_speed; //value=0.5, min=-10, max=10, step=0.001 uniform float level_time; //value=100, min=0, max=1000, step=1 uniform float level_radius; //value=0.6, min=0.1, max=1, step=0.001 vec2 q; out vec4 fragColor; bool circ(vec2 p, float r, float t){ return length(q - p) >= r && length(q - p) < r + t; } // -1 - inner fill // 0 - border // 1 - outer int circf(vec2 p, float r, float t){ if(length(q - p) < r) return -1; if(length(q - p) >= r && length(q - p) < r + t) return 0; return 1; } void main() { // Screen coordinate (from [-aspect, -1] to [aspect, 1]) q = (2. * gl_FragCoord.xy - iResolution) / iResolution.y; vec3 fill_color = mix(fg_color, bg_color, 0.75); vec4 col = vec4(bg_color, 1.); //completion float r = min(iTime / level_time * level_radius, level_radius); col = circ(vec2(0., 0.), 0., r) ? vec4(fill_color, 1.) : col; col = circ(vec2(0., 0.), r, 0.005) ? vec4(fg_color, 1.) : col; //ring col = circ(vec2(0., 0.), level_radius, 0.02) ? vec4(fg_color, 1.) : col; //rings for(float i = level_radius + mod(iTime / 5., .2); i < 2.2 + mod(iTime / 5., .2); i += .2){ col = circ(vec2(0., 0.), i, 0.01) ? vec4(fg_color, 1.) : col; } //outer things for(float a = -iTime * enemies_rotation_speed; a < THETA + -iTime * enemies_rotation_speed; a += THETA / float(enemies)){ vec2 p = vec2(cos(a), sin(a)) * (level_radius + 0.1 + 0.01); int c = circf(p, 0.1, 0.01); if(c == 0) col = vec4(fg_color, 1.); else if(c == -1) col = vec4(1., 1., 1., 1.); } //player int c = circf(vec2(0., 0.), 0.03, 0.0025); if(c == 0) col = vec4(fg_color, 1.); else if(c == -1) col = vec4(1., 1., 1., 1.); col = circ(vec2(0., 0.), 0.025, 0.005) ? vec4(fg_color, 1.) : col; // Output fragColor = col; }