﻿Shader "Custom/Outline"
{
	Properties
	{
		outlineColor("Outline Color", Color) = (1,0,0,1)
		outline("Width of Outline", Range(0.0, 0.1)) = .002
	}

	CGINCLUDE
	#include "UnityCG.cginc"

	struct appdata
	{
		float4 vertex : POSITION;
		float3 normal : NORMAL;
	};

	struct v2f 
	{
		float4 pos : POSITION;
		float4 color : COLOR;
	};

	uniform float outline;
	uniform float4 outlineColor;

	v2f vert(appdata v)
	{
		v2f o;
		o.pos = UnityObjectToClipPos(v.vertex);
		float3 norm = mul((float3x3)UNITY_MATRIX_IT_MV, v.normal);
		float2 offset = TransformViewToProjection(norm.xy);

		o.pos.xy += offset * o.pos.z * outline;
		o.color = outlineColor;
		return o;
	}
	ENDCG

	SubShader
	{
		Tags { "Queue" = "Transparent" }

		Pass
		{
			Name "BASE"
			Cull Back
			Blend Zero One

			SetTexture[outlineColor]
			{
				ConstantColor(0,0,0,0)
				Combine constant
			}
		}

		Pass 
		{
			Name "OUTLINE"
			Tags { "LightMode" = "Always" }
			Cull Front
			Blend SrcAlpha OneMinusSrcAlpha

			CGPROGRAM
			#pragma vertex vert
			#pragma fragment frag

			half4 frag(v2f i) : COLOR 
			{
				return i.color;
			}
			ENDCG
		}
	}
	Fallback "Diffuse"
}