#include "ShaderConstantsGNM.h"

struct PS_Input {
	float4 position : S_POSITION;
	float2 uv : TEXCOORD_0;
	float4 color : COLOR;
	float4 worldPosition : TEXCOORD_1;
	float4 fogColor : FOG_COLOR;
};

float4 main( in PS_Input PSInput ) : S_TARGET_OUTPUT
{
	float4 outputColor = TEXTURE_0.Sample(TextureSampler0, PSInput.uv);

	outputColor.a *= PSInput.color.a;

	float2 uv = PSInput.worldPosition.xz;
	float4 occlusionTexture = TEXTURE_1.Sample(TextureSampler1, uv);

	// clamp the uvs
	if (uv.x >= 0.0f && uv.x <= 1.0f && 
		uv.y >= 0.0f && uv.y <= 1.0f && 
		PSInput.worldPosition.y < occlusionTexture.a) {
		outputColor.a = 0.0f;
	}

	float mixAmount = saturate((PSInput.worldPosition.y - occlusionTexture.a)*10.0f);
	float3 lighting = lerp(occlusionTexture.rgb, PSInput.color.rgb, mixAmount);
	outputColor.rgb *= lighting.rgb;

	//apply fog
	outputColor.rgb = lerp(outputColor.rgb, PSInput.fogColor.rgb, PSInput.fogColor.a);

	return outputColor;
}

