Shader "Blocks/BlockBreak"
{
    // Оверлей анимации разрушения блока.
    // Рендерится поверх чанкового меша отдельным объектом 1x1x1.
    Properties
    {
        _Progress ("Break Progress", Range(0,1)) = 0
        _CrackTex ("Crack Texture", 2D) = "black" {}
        _Color    ("Tint", Color) = (0,0,0,1)
    }

    SubShader
    {
        Tags
        {
            "Queue"           = "Transparent+1"
            "RenderType"      = "Transparent"
            "IgnoreProjector" = "True"
        }

        ZWrite Off
        Blend SrcAlpha OneMinusSrcAlpha
        Offset -1, -1   // рисуем чуть поверх, без z-fighting

        Pass
        {
            CGPROGRAM
            #pragma vertex   vert
            #pragma fragment frag
            #include "UnityCG.cginc"

            sampler2D _CrackTex;
            float4    _CrackTex_ST;
            float     _Progress;
            fixed4    _Color;

            struct appdata { float4 vertex : POSITION; float2 uv : TEXCOORD0; };
            struct v2f    { float4 pos : SV_POSITION;  float2 uv : TEXCOORD0; };

            v2f vert(appdata v)
            {
                v2f o;
                o.pos = UnityObjectToClipPos(v.vertex);
                o.uv  = TRANSFORM_TEX(v.uv, _CrackTex);
                return o;
            }

            fixed4 frag(v2f i) : SV_Target
            {
                fixed4 crack = tex2D(_CrackTex, i.uv);
                // crack.r — интенсивность трещины; накладывается по прогрессу
                float  alpha = crack.r * _Progress;
                return fixed4(_Color.rgb, alpha);
            }
            ENDCG
        }
    }
}
