#ifndef TAKEN_DEFINES_INCLUDED
#define TAKEN_DEFINES_INCLUDED

#include "UnityPBSLighting.cginc"
#include "Autolight.cginc"
#include "../Common/Utilities.cginc"
#include "../Common/Noise.cginc"
#include "../Common/Color.cginc"
#include "TakenKeyDefines.cginc"

sampler2D _MainTex, _EmissTex, _BumpMap, _DissolveTex;
sampler2D _NoiseMask, _GradientMask, _RimMask, _ShadowMask, _EmissGradMask, _ReflectionMask, _OutlineMask;
sampler2D _RoughnessMap, _MetallicMap;
sampler2D _NoiseEmission0, _NoiseEmission1;
float4 _NoiseEmission0_ST, _NoiseEmission1_ST;
float4 _MainTex_ST, _DissolveTex_ST, _Color;
float3 _GradientNoiseScale;
float2 _NoiseScale;
float2 _NoiseEmission0Scroll, _NoiseEmission1Scroll;
float _BumpScale, _Roughness, _Metallic, _ReflectionStr, _Cutoff;
float _NoiseBrightness, _NoiseSmooth, _NoiseCutoff;
float _GradientHeightMax, _GradientHeightMin, _GradientBrightness;
float _GradientContrast, _GradientSpeed;
float _RimBrightness, _RimWidth, _RimEdge, _RimGradMask;
float _EmissPow, _EmissStr, _EmissGradMasking;
float _DissolveAmt, _DissolveRimBrightness, _DissolveRimWidth;
float _Thickness;
float _NoiseEmissStrength0, _NoiseEmissStrength1, _NoiseEmissionGradStrength0, _NoiseEmissionGradStrength1;
float _NoiseEmissionGradMasking0, _NoiseEmissionGradMasking1;
int _Invert, _GradientInvert, _Smoothstep, _GradientAxis, _InvertedOutline, _EmissInvert;
int _EnableRim, _EnableNoise, _EnableGradient, _EnableLighting, _EnableDissolve, _EnableSH, _EnableOutline;
int _BlendMode;

// Outputs
float3 specularTint;
float metallic;
float roughness;
float smoothness;
float omr;
float atten;

struct appdata {
	float4 vertex : POSITION;
	float4 uv : TEXCOORD0;
	float4 uv1 : TEXCOORD1;
	float3 normal : NORMAL;
	float4 tangent : TANGENT;
	UNITY_VERTEX_INPUT_INSTANCE_ID
};

struct v2f {
	float4 pos : SV_POSITION;
	float2 uv : TEXCOORD0;
	float3 normal : TEXCOORD1;
	float4 localPos : TEXCOORD2;
	float3 worldPos : TEXCOORD3;
	float3 binormal : TEXCOORD4;
	float4 tangent : TANGENT;
	float2 uvDis : TEXCOORD6;
	float4 screenPos : TEXCOORD7;
    float2 uvNoiseEmiss0 : TEXCOORD8;
    float2 uvNoiseEmiss1 : TEXCOORD9;
	UNITY_SHADOW_COORDS(10)
	UNITY_FOG_COORDS(11)
	UNITY_VERTEX_OUTPUT_STEREO
};

struct lighting {
	float NdotL;
	float NdotV;
	float NdotH;
	float LdotH;
	float VdotL;
	float3 lightCol;
	float3 viewDir;
	float3 lightDir;
	float3 reflectionDir;
	float3 halfVector;
	float3 normal;
	float3 binormal;
	bool lightEnv;
};

#include "../Common/LightVolumes.cginc"
#include "TakenLighting.cginc"
#include "TakenFunctions.cginc"

#endif