Shader "YXJ/Particles/AlphaBlendedCustomFix" 
{
	Properties 
	{
		_TintColor ("Tint Color", Color) = (0.5,0.5,0.5,0.5)
		_MainTex ("Texture", 2D) = "white" {}
		[Enum(UnityEngine.Rendering.CullMode)] _Cull("Cull Mode", Float) = 0
		[Space]
		[Toggle(MASK)] _MaskOn ("Enable Mask?", float) = 0
		_MaskTex ("Mask (A)", 2D) = "white" {}
		_CutOff ("Alpha CutOff", Range(0,1.0)) = 0.5
		[Space]
		[Toggle(SCROLL)] _ScrollOn ("Enable Scroll?", float) = 0
		[Enum(Manual, 0, AutoMain, 1, AutoMask, 2)] _ScrollType ("Scroll Type", float) = 0
		[Space]
		_UV ("UV Main", vector) = (1,1,0,0)
		_UV2 ("UV Mask", vector) = (1,1,0,0)
		_SpeedU ("Scroll Speed U", float) = 1
		_SpeedV ("Scroll Speed V", float) = 0
		[Enum(Close, 0, Open, 1)] _FogSwitch("Fog", float) = 0
	}

	Category 
	{
		Tags { "Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent" }
		Blend SrcAlpha OneMinusSrcAlpha
		ColorMask RGB
		Cull [_Cull] Lighting Off ZWrite Off
	
		SubShader 
		{
			Pass 
			{
				CGPROGRAM
				#pragma vertex vert
				#pragma fragment frag
				#pragma multi_compile_fog
				#pragma multi_compile MASK
				#pragma multi_compile SCROLL

				#include "UnityCG.cginc"

				sampler2D _MainTex;
				fixed4 _TintColor;					
				float4 _MainTex_ST;
				float _FogSwitch;
				#if MASK

					sampler2D _MaskTex;
					float4 _MaskTex_ST;
					float _CutOff;

					struct appdata_t {
						float4 vertex : POSITION;
						fixed4 color : COLOR;
						float2 texcoord : TEXCOORD0;
						float2 texcoordm : TEXCOORD1;
					};

					struct v2f {
						float4 vertex : SV_POSITION;
						fixed4 color : COLOR;
						float2 texcoord : TEXCOORD0;
						float2 texcoordm : TEXCOORD1;
						UNITY_FOG_COORDS(2)
					};

				#else

					struct appdata_t {
						float4 vertex : POSITION;
						fixed4 color : COLOR;
						float2 texcoord : TEXCOORD0;
					};

					struct v2f {
						float4 vertex : SV_POSITION;
						fixed4 color : COLOR;
						float2 texcoord : TEXCOORD0;
						UNITY_FOG_COORDS(1)
					};

				#endif

				#if SCROLL

					float _ScrollType;
					float4 _UV;
					float4 _UV2;
					float _SpeedU;
					float _SpeedV;

				#endif

				v2f vert (appdata_t v)
				{
					v2f o;
					o.vertex = UnityObjectToClipPos(v.vertex);
					o.color = v.color;
					o.texcoord = TRANSFORM_TEX(v.texcoord,_MainTex);
					if(_FogSwitch == 1) { UNITY_TRANSFER_FOG(o,o.vertex); }
					#if SCROLL

						if (_ScrollType == 0){
							o.texcoord = float2(o.texcoord.x * _UV.x + _UV.z, o.texcoord.y * _UV.y + _UV.w);
						}
						else if (_ScrollType == 1){
							o.texcoord += _Time.x * float2(_SpeedU, _SpeedV);
						}

					#endif

					#if MASK

						o.texcoordm = TRANSFORM_TEX(v.texcoordm, _MaskTex);

						#if SCROLL

							if (_ScrollType == 0){
								o.texcoordm = float2(o.texcoordm.x * _UV2.x + _UV2.z, o.texcoordm.y * _UV2.y + _UV2.w);
							}
							else if (_ScrollType == 2){
								o.texcoordm += _Time.x * float2(_SpeedU, _SpeedV);
							}

						#endif

					#endif

					return o;
				}

				fixed4 frag (v2f i) : SV_Target
				{
					fixed4 col = tex2D(_MainTex, i.texcoord) * i.color;

					#if MASK

						col.a *= UNITY_SAMPLE_1CHANNEL(_MaskTex, i.texcoordm);
						clip(col.a - _CutOff);

					#endif
					col *= _TintColor;
					if(_FogSwitch == 1) { UNITY_APPLY_FOG(i.fogCoord, col); }
					return col;
				}
				ENDCG 
			}
		}	
	}
}