﻿Shader "Mochie/Taken Corruption" {
    // DO NOT CHANGE THE SHADER NAME
    Properties {
        [Space(8)]
        _Color("Color", Color) = (0.8,0.95,1,1)
        [Header(STARS)]
        _StarBrightness("Brightness", Float) = 2
        // [Toggle(_)]_IsRotating("Is Rotating?", Int) = 0
        // _Blur("Blur", Range(0,1)) = 0
        _Rotation("Rotation", Range(0,360)) = 183
        [NoScaleOffset]_StarTex("Star Tex", 2D) = "white" {}
        _StarTexScale("Scale", Vector) = (4,4,0,0)
        
        [Header(CORRUPTION)]
        _RimBrightness("Brightness", Float) = 7
        _RimWidth("Rim Width", Float) = 5.5
        _Radius("Pool Size", Float) = 35
        _SimplexScale("Noise Scale", Float) = 2.5

        [HideInInspector]_NaNLmao("", Float) = 0.0
        [HideInInspector]_MainTex("", 2D) = "white" {}
        [HideInInspector]_Cutoff("", Range(0,1)) = 1
    }
    SubShader {
        Tags {
            "RenderType"="AlphaTest" 
            "Queue"="AlphaTest+55"
            "VRCFallback"="Hidden"
        }
        Cull Front
        ZWrite Off
        ZTest Always
        Blend SrcAlpha OneMinusSrcAlpha

        Pass {
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag
            #pragma multi_compile_instancing
            #define CORRUPTION
            #pragma target 5.0
            #include "UnityCG.cginc"
            #include "TakenDefines.cginc"

            v2f vert (appdata v){
                v2f o = (v2f)0;
                UNITY_SETUP_INSTANCE_ID(v);
                UNITY_TRANSFER_INSTANCE_ID(v, o);
                UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);
                o.isReflection = IsInMirror();
                o.objPos = mul(unity_ObjectToWorld, float4(0,0,0,1));
                o.worldPos = mul(unity_ObjectToWorld, v.vertex);
                o.pos = UnityObjectToClipPos(v.vertex);
                o.raycast = UnityObjectToViewPos(v.vertex).xyz * float3(-1,-1,1);
                o.uv = ComputeGrabScreenPos(o.pos);
                return o;
            }

            float4 frag (v2f i) : SV_Target {
                
                UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i);

                if (i.isReflection)
                    discard;

                GetDepth(i, wPos);
                float dist = distance(i.objPos, wPos);
                _Radius = max(0.002, _Radius*0.01);
                _RimWidth = clamp(_RimWidth*0.01, 0, _Radius-0.001);
                float noise = GetSimplex4DPool(wPos, _SimplexScale);
                float radius = smoothstep(_Radius, _Radius-_RimWidth,  dist * noise);
                float4 col = 0;

                UNITY_BRANCH
                if (radius > 0){
                    Ray cameraRay;
                    cameraRay.origin = _WorldSpaceCameraPos;
                    cameraRay.dir = normalize(wPos - _WorldSpaceCameraPos.xyz);
                    col = float4(GetStars(i, cameraRay).xxx, radius);
                    col.rgb += (1-radius)*_RimBrightness;
                    col.rgb *= _Color.rgb;
                }
                return col;
            }
            ENDCG
        }
    }
}