// Fork of "Gilded mosaic" by jarble. https://shadertoy.com/view/fscfWB
// 2022-12-01 17:14:21

vec2 rotate(vec2 v, float a) {
	float s = sin(a*iTime);
	float c = cos(a*iTime);
	mat2 m = mat2(c, -s, s, c);
	return m * v;
}
vec2 mouse;
vec2 triangle_wave(vec2 a){
    //a = rotate(a,num*radians(180.));
    vec2 to_return = abs(fract((a+vec2(1.,0.5))*1.5)-.5);
    //to_return /= 1.5; //makes another interesting pattern
    return to_return;
    //return abs(fract((a+vec2(1.,1.5)+num)*scale)-.5);
}

void mainImage( out vec4 fragColor, in vec2 fragCoord )
{
    fragColor = vec4(0.0);
    vec3 col = vec3(0.);
    float t1 = 8.*1.5;
    vec2 uv = (fragCoord)/iResolution.y/t1/2.0;

  float theTime = iTime+71.0*59.0;
#define ONEWAY
#ifdef ONEWAY
    vec2 mMouse = (iMouse.xy == vec2(0.)) ? vec2(116.0,292.0) : iMouse.xy;
    mouse = (mMouse.xy/iResolution.xy)*fract(theTime/73.0);
    //mouse.x = clamp(mouse.x,-10.,0.5);
    //mouse.y = clamp(mouse.y,-10.,0.5);
#else
    mouse = (iMouse.xy == vec2(0.)) ? vec2(116.0/1280.0,292.0/720.0)*fract(theTime/73.0) : (iMouse.xy/iResolution.xy)*fract(theTime/73.0);
    //if(mouse.x>0.05&& mouse.y>0.05) mouse = abs(mouse/39.0);
#endif

     float time1 = iTime/64.;
//time1 *=(mouse.x);
    uv += vec2(time1/2.0,time1/3.0)/t1/4.0+(vec2(cos(time1),sin(time1)))*8./t1;
    float scale = 1.5;
    float offset = 0.;
    float offset1 = iTime/1000.;
        vec2 t2 = vec2(0.);
        vec2 t3 = vec2(0.);
        for(int k = 0; k < 9; k++){

            uv += t2;
            uv /= scale;
            t2 = triangle_wave(uv)+mouse;
            t3 = -triangle_wave(uv.yx-.5)+mouse.yx;
            uv = t2-t3;

            col.x = (col.x+max(mouse.x-mouse.y,max(uv.y-uv.x,col.x)))/(2.);

            //col.y = (col.y+min(mouse.x-mouse.y,max(uv.x-uv.y,col.y)))/(2.);

            col.x = abs(col.x-.5+mouse.y);
            col = abs(col.yzx-vec3(col.x/sqrt(2.)))*2.;
        }

    fragColor = vec4(col*2.,1.0);
}
