﻿Shader "UChart/HeatMap/Simple"
{
	Properties
	{
		_HeatMapTex("Texture",2D) = "white"{}
		_Alpha("Alpha",range(0,1)) = 0.8 
	}

	SubShader
	{
		Tags {"RenderType"="Overlay" "Queue"="Transparent" } 
		Blend SrcAlpha OneMinusSrcAlpha
		ZTest [unity_GUIZTestMode]
		ZWrite On
		// Cull off

		Pass
		{
			CGPROGRAM
			
			#pragma vertex vert
			#pragma fragment frag

			sampler2D _HeatMapTex;
			half _Alpha;
			uniform int _FactorCount = 0;
			uniform float3 _Factors[100];
			uniform float3 _FactorsProperties[100];

			struct a2v
			{
				float4 pos : POSITION;
			};

			struct v2f
			{
				float4 pos : POSITION;
				fixed3 worldPos : TEXCOORD1;
			};

			v2f vert(a2v input)
			{
				v2f o;
				o.pos = UnityObjectToClipPos(input.pos);
				o.worldPos = mul(unity_ObjectToWorld,input.pos).xyz;
				return o;
			}

			half4 frag(v2f input):COLOR
			{
				half heat = 0;
				for( int i = 0 ; i < _FactorCount;i++ )
				{
					half dis = distance(input.worldPos,_Factors[i].xyz);
					float radius = _FactorsProperties[i].x;
					float intensity = _FactorsProperties[i].y;
					float temperatureFacator = _FactorsProperties[i].z;
					half ratio = 1 - saturate(dis/radius);
					heat += intensity * ratio * temperatureFacator;
					heat = clamp(heat,0.05,0.95);
				}
				half4 color = tex2D(_HeatMapTex,fixed2(heat,0.5));
				color.a = _Alpha;
				return color;
			}

			ENDCG
		}
	}

	 FallBack "Diffuse"
}