#ifndef PI
#define PI 3.1415927
#endif

#include inc_rand.glsl

#ifndef INC_TIME
#define INC_TIME

uniform float iTime;
uniform float iTempo;
uniform float iBeats;

float randTime(float seed, int beats){
    return rand(seed + floor(iBeats / beats));
}

float randTime(float seed){
    return randTime(seed, 4);
}

float divider(float x)
{
    if (x < 0.1) return 0;
    if (x < 0.2) return 0.125;
    if (x < 0.3) return 0.25;
    if (x < 0.4) return 0.5;
    if (x < 0.6) return 1;
    if (x < 0.8) return 2;
    return 4;
}

float modTime(float k, float k2)
{
    return mod(divider(k) * iBeats * k2 / 4, 1);
}

float modTime(float k)
{
    return modTime(k, 1.0);
}

float sinTime(float k)
{
    return sin(modTime(k, 0.5) * 2 * PI);
}

float cosTime(float k)
{
    return cos(modTime(k, 0.5) * 2 * PI);
}

#endif
