#include <metal_stdlib>
#include <simd/simd.h>

using namespace metal;

struct main0_out
{
    float4 oColor [[color(0)]];
};

struct main0_in
{
    float2 vUv [[user(locn0)]];
};

fragment main0_out main0(main0_in in [[stage_in]], constant float3& uBgColor [[buffer(0)]], constant float& uDensity [[buffer(1)]], constant float& uOutline [[buffer(2)]], constant float3& uColorA [[buffer(3)]], constant float3& uColorB [[buffer(4)]], constant float3& uColorC [[buffer(5)]], constant float2& uResolution [[buffer(6)]], constant float& uTime [[buffer(7)]], constant float& uDrift [[buffer(8)]], constant float& uScale [[buffer(9)]], constant float& uCalm [[buffer(10)]])
{
    main0_out out = {};
    float _603;
    float2 _448 = ((in.vUv * uResolution) - (uResolution * 0.5)) / float2(uResolution.y);
    float _457 = uTime * uDrift;
    float2 _464 = _448 * uScale;
    float2 _477 = ((_464 * 2.2999999523162841796875) + float2(_457 * 0.04500000178813934326171875, _457 * (-0.02999999932944774627685546875))) + float2(51.700000762939453125);
    float _1460;
    float3 _1461;
    do
    {
        float2 _817 = fract((floor(_477) + float2(7.0)) * float2(234.339996337890625, 435.345001220703125));
        float2 _825 = _817 + float2(dot(_817, _817 + float2(34.229999542236328125)));
        float _831 = fract(_825.x * _825.y);
        _603 = uDensity;
        if (_831 > _603)
        {
            _1461 = uBgColor;
            _1460 = 0.0;
            break;
        }
        float _612 = fract(_831 * 113.76999664306640625);
        float _626 = (fract(_831 * 57.310001373291015625) * 6.283185482025146484375) + ((_457 * (_612 - 0.5)) * 0.800000011920928955078125);
        float _628 = cos(_626);
        float _630 = sin(_626);
        float _634 = _831 * 6.283185482025146484375;
        float2 _656 = float2x2(float2(_628, -_630), float2(_630, _628)) * ((fract(_477) - float2(0.5)) - (float2(sin((_457 * 0.60000002384185791015625) + _634), cos((_457 * 0.800000011920928955078125) + _634)) * 0.039999999105930328369140625));
        float _658 = mix(0.14000000059604644775390625, 0.300000011920928955078125, _612);
        float _661 = _658 * 0.60000002384185791015625;
        float _1452;
        if ((fract(_831 * 431.1300048828125) * 6.0) < 3.0)
        {
            _1452 = length(_656) - (_658 * 0.2700000107288360595703125);
        }
        else
        {
            float _678 = _658 * 0.1319999992847442626953125;
            float2 _836 = abs(_656);
            float2 _838 = _836 - float2(_661, _678);
            float2 _855 = _836 - float2(_678, _661);
            _1452 = fast::min(length(fast::max(_838, float2(0.0))) + fast::min(fast::max(_838.x, _838.y), 0.0), length(fast::max(_855, float2(0.0))) + fast::min(fast::max(_855.x, _855.y), 0.0));
        }
        float _796 = fract(_831 * 769.22998046875) * 3.0;
        float3 _1459;
        if (_796 < 1.0)
        {
            _1459 = uColorA;
        }
        else
        {
            _1459 = select(uColorC, uColorB, bool3(_796 < 2.0));
        }
        _1461 = _1459;
        _1460 = (fract(_831 * 891.71002197265625) < uOutline) ? smoothstep(0.01200000010430812835693359375, -0.01200000010430812835693359375, abs(_1452 + (_658 * 0.0360000021755695343017578125)) - (_658 * 0.05400000512599945068359375)) : smoothstep(0.01200000010430812835693359375, -0.01200000010430812835693359375, _1452);
        break;
    } while(false);
    float2 _509 = _464 + float2(_457 * (-0.0599999986588954925537109375), _457 * 0.039999999105930328369140625);
    float _1481;
    float3 _1482;
    do
    {
        float2 _1234 = fract(floor(_509) * float2(234.339996337890625, 435.345001220703125));
        float2 _1242 = _1234 + float2(dot(_1234, _1234 + float2(34.229999542236328125)));
        float _1248 = fract(_1242.x * _1242.y);
        if (_1248 > _603)
        {
            _1482 = uBgColor;
            _1481 = 0.0;
            break;
        }
        float _1029 = fract(_1248 * 113.76999664306640625);
        float _1043 = (fract(_1248 * 57.310001373291015625) * 6.283185482025146484375) + ((_457 * (_1029 - 0.5)) * 0.800000011920928955078125);
        float _1045 = cos(_1043);
        float _1047 = sin(_1043);
        float _1051 = _1248 * 6.283185482025146484375;
        float2 _1073 = float2x2(float2(_1045, -_1047), float2(_1047, _1045)) * ((fract(_509) - float2(0.5)) - (float2(sin((_457 * 0.60000002384185791015625) + _1051), cos((_457 * 0.800000011920928955078125) + _1051)) * 0.039999999105930328369140625));
        float _1075 = mix(0.14000000059604644775390625, 0.300000011920928955078125, _1029);
        float _1080 = fract(_1248 * 431.1300048828125) * 6.0;
        float _1475;
        if (_1080 < 1.0)
        {
            _1475 = length(_1073) - _1075;
        }
        else
        {
            float _1476;
            if (_1080 < 2.0)
            {
                _1476 = abs(length(_1073) - (_1075 * 0.800000011920928955078125)) - (_1075 * 0.180000007152557373046875);
            }
            else
            {
                float _1477;
                if (_1080 < 3.0)
                {
                    float _1289 = abs(_1073.x) - _1075;
                    float2 _1427 = _1073;
                    _1427.x = _1289;
                    float _1295 = _1073.y + (_1075 * 0.57735025882720947265625);
                    float2 _1430 = _1427;
                    _1430.y = _1295;
                    float _1301 = 1.73205077648162841796875 * _1295;
                    float2 _1472;
                    if ((_1289 + _1301) > 0.0)
                    {
                        _1472 = float2(_1289 - _1301, ((-1.73205077648162841796875) * _1289) - _1295) * 0.5;
                    }
                    else
                    {
                        _1472 = _1430;
                    }
                    float2 _1440 = _1472;
                    _1440.x = _1472.x - fast::clamp(_1472.x, (-2.0) * _1075, 0.0);
                    _1477 = (-length(_1440)) * sign(_1472.y);
                }
                else
                {
                    float _1478;
                    if (_1080 < 4.0)
                    {
                        float _1142 = _1075 * 0.23999999463558197021484375;
                        float2 _1340 = abs(_1073);
                        float2 _1342 = _1340 - float2(_1075, _1142);
                        float2 _1359 = _1340 - float2(_1142, _1075);
                        _1478 = fast::min(length(fast::max(_1342, float2(0.0))) + fast::min(fast::max(_1342.x, _1342.y), 0.0), length(fast::max(_1359, float2(0.0))) + fast::min(fast::max(_1359.x, _1359.y), 0.0));
                    }
                    else
                    {
                        float _1479;
                        if (_1080 < 5.0)
                        {
                            float2 _1376 = abs(_1073) - float2(_1075 * 0.7799999713897705078125);
                            _1479 = length(fast::max(_1376, float2(0.0))) + fast::min(fast::max(_1376.x, _1376.y), 0.0);
                        }
                        else
                        {
                            float _1170 = _1073.x;
                            _1479 = fast::max(abs(_1073.y - ((0.4000000059604644775390625 * _1075) * sin((_1170 / _1075) * 6.5))) - (_1075 * 0.17000000178813934326171875), abs(_1170) - _1075);
                        }
                        _1478 = _1479;
                    }
                    _1477 = _1478;
                }
                _1476 = _1477;
            }
            _1475 = _1476;
        }
        float _1213 = fract(_1248 * 769.22998046875) * 3.0;
        float3 _1480;
        if (_1213 < 1.0)
        {
            _1480 = uColorA;
        }
        else
        {
            _1480 = select(uColorC, uColorB, bool3(_1213 < 2.0));
        }
        _1482 = _1480;
        _1481 = (fract(_1248 * 891.71002197265625) < uOutline) ? smoothstep(0.01200000010430812835693359375, -0.01200000010430812835693359375, abs(_1475 + (_1075 * 0.0599999986588954925537109375)) - (_1075 * 0.0900000035762786865234375)) : smoothstep(0.01200000010430812835693359375, -0.01200000010430812835693359375, _1475);
        break;
    } while(false);
    out.oColor = float4(mix(mix(uBgColor, mix(uBgColor, _1461, float3(0.550000011920928955078125)), float3(_1460)), _1482, float3(_1481 * (1.0 - (uCalm * (1.0 - smoothstep(0.1500000059604644775390625, 0.62000000476837158203125, length(_448))))))), 1.0);
    return out;
}

