#define PI 3.14159265
#define sides 9.0

float ripple(float d)
{
    return d / 3.0 + sin(30.0 * d * d - 5.0 * (iTime + sin(6.0 * iTime) / 10.0) ) / 2.0 * sqrt(d * d + 1.0) + 0.5;
}

float angle(vec2 v)
{
    return acos(dot(normalize(v),vec2(0.0, 1.0)));
}

void mainImage( out vec4 fragColor, in vec2 fragCoord )
{
    float angleNorm = fract(angle(fragCoord / iResolution.xy - vec2(0.5, 0.5)) / ( 2.0 * PI ));
    
    float d = sin(2.0 * sides * PI * angleNorm + PI/2.0)/(50.0 * (sin(2.0 * iTime) + 2.0)) + 1.0 - distance(vec2(0.5, 0.5), vec2(fragCoord.x / iResolution.x, fragCoord.y / iResolution.y)); 
                  ;
    
    float r = ripple(d);
    
    // Output to screen
    vec4 nv   = vec4(abs(sin(iTime + PI / 4.0)) * r * d * d + abs(sin(iTime)) / 2.0, 
                     abs(cos(iTime + PI / 2.0)) * r * (1.0 - d * d / 2.0),
                     abs(cos(iTime + PI / 4.0)) * r * (1.0 - d),
                     1.0);
    fragColor = nv;
}
