// Curved World <http://u3d.as/1W8h>
// Copyright (c) Amazing Assets <https://amazingassets.world>
 
Shader "Amazing Assets/Curved World/One Directional Light (Outline)"
{
	Properties    
	{                   

[HideInInspector][CurvedWorldBendSettings]	  _CurvedWorldBendSettings("0|1|1", Vector) = (0, 0, 0, 0)


[HideInInspector][MaterialEnum(Front,2,Back,1,Both,0)] _Cull("Face Cull", Int) = 0

		[HideInInspector][Toggle] _AmbientLights("", float) = 0
		[HideInInspector][Toggle] _PerVertexLights("", float) = 0
		
		[HideInInspector] _LightLookupTex("", 2D) = "grey"{}
		[HideInInspector] _LightLookupOffset("", Range(-1, 1)) = 0

		[HideInInspector][CurvedWorldToggleFloat] _IncludeVertexColor("", float) = 0
		[HideInInspector] _Color ("Color (RGB)", Color) = (1, 1, 1, 1)
        [HideInInspector] _MainTex ("Base (RGB)", 2D) = "white" { }
		[HideInInspector][CurvedWorldUVScroll] _MainTex_Scroll("", vector) = (0, 0, 0, 0)
        [HideInInspector] _Cutoff("Alpha Cutoff", Range(0.0, 1.0)) = 0.5

		[HideInInspector][KeywordEnum(None, By Main Alpha, By Secondary Alpha, Multiple, Additive, By Vertex Alpha)] _TextureMix ("", Float) = 0
		[HideInInspector] _SecondaryTex ("", 2D) = "white" { }
		[HideInInspector][CurvedWorldUVScroll] _SecondaryTex_Scroll("", vector) = (0, 0, 0, 0)
		[HideInInspector] _SecondaryTex_Blend("", Range(-1, 1)) = 0
		
		[HideInInspector] _NormalMapStrength("", float) = 1
		[HideInInspector][Normal] _NormalMap("", 2D) = "bump" {}
		[HideInInspector] _NormalMap_Scroll ("", vector) = (0, 0, 0, 0)
		[HideInInspector][Normal] _SecondaryNormalMap("", 2D) = "bump"{}
		[HideInInspector] _SecondaryNormalMap_Scroll ("", vector) = (0, 0, 0, 0)

		[HideInInspector] _SpecularColor ("Specular Color", Color) = (0.5, 0.5, 0.5, 1)
		[HideInInspector] _Shininess("Shininess", Range(0, 1)) = 0.7 
		[HideInInspector] _SpecularMaskOffset("", Range(-1, 1)) = 0

		[HideInInspector] _ReflectionColor("", color) = (1, 1, 1, 1)
		[HideInInspector] _ReflectionMaskOffset("", Range(-1, 1)) = 0
		[HideInInspector] _ReflectionCubeMap("", Cube) = "_Skybox"{}	
		[HideInInspector] _ReflectionFresnelBias("", Range(-1, 1)) = 0

		[HideInInspector][HDR] _RimColor("", color) = (1, 1, 1, 1)
		[HideInInspector] _RimBias("", Range(-1, 1)) = 0

		[HideInInspector][HDR] _EmissionColor("", color) = (0, 0, 0, 0)
		[HideInInspector] _EmissionMap("", 2D) = "white"{}
		[HideInInspector] _EmissionMap_Scroll ("", vector) = (0, 0, 0, 0)


		[HideInInspector] _OutlineColor("", Color) = (0, 0, 0, 1)
		[HideInInspector] _OutlineWidth ("", float) = 1
		[HideInInspector][CurvedWorldToggleFloat] _OutlineSizeIsFixed ("", float) = 1


        // Blending state
        [HideInInspector] _Mode ("__mode", Float) = 0.0
        [HideInInspector] _SrcBlend ("__src", Float) = 1.0
        [HideInInspector] _DstBlend ("__dst", Float) = 0.0
        [HideInInspector] _ZWrite ("__zw", Float) = 1.0
	}

 
	SubShader 
	{
		Tags { "RenderType"="CurvedWorld_Opaque" } 
		LOD 200		
		Cull[_Cull]     
		
		//PassName "Forward"
		Pass
	    {
			Name "Forward"
			Tags { "LightMode" = "ForwardBase" } 

			//Blend [_SrcBlend] [_DstBlend]	- Outline shaders do not use Blend, always opaque
        	//ZWrite [_ZWrite]

			CGPROGRAM       
			#pragma vertex vert  
	    	#pragma fragment frag  
			#pragma multi_compile_instancing 
			#pragma multi_compile_fwdbase nodirlightmap nodynlightmap
			#pragma multi_compile_fog	       
			//#pragma shader_feature_local _ _ALPHATEST_ON _ALPHABLEND_ON _ALPHAPREMULTIPLY_ON - Outline shader is always opaque
  
			#pragma shader_feature_local _AMBIENTLIGHTS_ON
			#pragma shader_feature_local _PERVERTEXLIGHTS_ON
			#pragma shader_feature_local _LIGHTLOOKUP
			#pragma shader_feature_local _ _TEXTUREMIX_BY_MAIN_ALPHA _TEXTUREMIX_BY_SECONDARY_ALPHA _TEXTUREMIX_MULTIPLE _TEXTUREMIX_ADDITIVE _TEXTUREMIX_BY_VERTEX_ALPHA
			#pragma shader_feature_local _NORMALMAP
			#pragma shader_feature_local _SPECULAR
			#pragma shader_feature_local _REFLECTION
			#pragma shader_feature_local _RIM
			#pragma shader_feature_local _EMISSION


#define CURVEDWORLD_BEND_TYPE_CLASSICRUNNER_X_POSITIVE
#define CURVEDWORLD_BEND_ID_1
#pragma shader_feature_local CURVEDWORLD_DISABLED_ON
#pragma shader_feature_local CURVEDWORLD_NORMAL_TRANSFORMATION_ON


			#include "ForwardBase.cginc" 
			
			ENDCG    
			 
		} //Pass "Forward"


		//PassName "ShadowCaster" 
		Pass 
    	{
			Name "ShadowCaster"
			Tags { "LIGHTMODE"="SHADOWCASTER" "SHADOWSUPPORT"="true" "RenderType"="CurvedWorld_Opaque" }

			ZWrite On ZTest LEqual

			CGPROGRAM
			#include "HLSLSupport.cginc"
			#define UNITY_INSTANCED_LOD_FADE
			#define UNITY_INSTANCED_SH
			#define UNITY_INSTANCED_LIGHTMAPSTS
			#include "UnityShaderVariables.cginc"
			#include "UnityShaderUtilities.cginc"


			#pragma vertex vert
			#pragma fragment frag
			#pragma target 2.0
			#pragma multi_compile_shadowcaster 
			#include "UnityCG.cginc"

			//#pragma shader_feature_local _ _ALPHATEST_ON _ALPHABLEND_ON _ALPHAPREMULTIPLY_ON	- Outline shader is always opaque



#define CURVEDWORLD_BEND_TYPE_CLASSICRUNNER_X_POSITIVE
#define CURVEDWORLD_BEND_ID_1
#pragma shader_feature_local CURVEDWORLD_DISABLED_ON

#include "../../Core/Shadow.cginc" 

			
			ENDCG
		}	//Pass "ShadowCaster"


		//PassName "Outline" 
		Pass  
		{ 
			Name "Outline"
			Tags{ "LightMode" = "Always" }
			
			Cull Front 
			ZWrite On 
			ColorMask RGB
			Blend SrcAlpha OneMinusSrcAlpha
			 
			CGPROGRAM
			#pragma vertex vert
			#pragma fragment frag  
			#pragma multi_compile_instancing
			#pragma multi_compile_fog


#define CURVEDWORLD_BEND_TYPE_CLASSICRUNNER_X_POSITIVE
#define CURVEDWORLD_BEND_ID_1
#include "../../Core/Outline.cginc"   


						      
			ENDCG  
		} //Pass "Outline"
		
			
	} //SubShader


	Fallback "Hidden/Amazing Assets/Curved World/Fallback/VertexLit"
	CustomEditor "AmazingAssets.CurvedWorld.Editor.OneDirectionalLightShaderGUI"
} //Shader
