shader_type canvas_item;

uniform float frequency = 5.0;
uniform float amplitude = 0.1; // Уменьшаем амплитуду для корректного отображения
uniform float speed = 5.0;
uniform float direction: hint_range(-1.0, 1.0) = -1.0;

uniform vec4 color1: source_color = vec4(0.0, 0.0, 0.0, 1.0);
uniform vec4 color2: source_color = vec4(0.235, 0.18, 0.235, 1.0);
uniform vec4 color3: source_color = vec4(0.235, 0.18, 0.235, 0.5);
uniform vec4 color4: source_color = vec4(0.0, 0.0, 0.0, 0.0);
uniform float opacity: hint_range(0.0, 1.0) = 0.5;
uniform float turn = 0.785; // 45 градусов в радианах (TAU / 8)


vec2 rotate_uv(vec2 uv, vec2 pivot, float rotation) {
    float cosa = cos(rotation);
    float sina = sin(rotation);
    uv -= pivot;
    return vec2(
        cosa * uv.x - sina * uv.y,
        sina * uv.x + cosa * uv.y
    ) + pivot;
}

void fragment() {
    vec2 uv = FRAGCOORD.xy;

    // Нормализуем UV-координаты в диапазоне [0, 1]
    uv = uv * 0.15 - 1.0; // Преобразуем в диапазон [-1, 1]

    // Поворот UV-координат на 45 градусов
    float angle = radians(-60.0); // Преобразуем градусы в радианы
    vec2 origin = vec2(0.0, 0.0);
    uv = rotate_uv(uv, origin, angle);

    // Преобразуем обратно в диапазон [0, 1]
    uv = uv * 0.05 + 0.05;

    // Вычисляем синусоидальную волну
    float sine_wave = sin(uv.x * frequency + TIME * speed * direction) * amplitude;
    uv.y += sine_wave;

    float t = sin(uv.x * frequency + TIME * speed * direction);

    vec4 final_color;
    if (t < -0.5) {
        final_color = color1;
    } else if (t < 0.0) {
        final_color = color2;
    } else if (t < 0.5) {
        final_color = color3;
    } else {
        final_color = color4;
    }

    final_color *= vec4(1.0, 1.0, 1.0, opacity);
    COLOR = final_color;
}