matrix ViewMatrix		: register(c0);
vector PartScale		: register(c4);

vector Density			: register(c0);

sampler BaseTex			: t0;

struct VS_INPUT
{
vector Position	: POSITION;
vector TextureC	: TEXCOORD0;
vector Texture	: TEXCOORD1;
};

struct VS_OUTPUT
{
vector Position	: POSITION;
vector Texture0	: TEXCOORD0;
vector Color	: COLOR0;
};

VS_OUTPUT WeaponVertexShader(VS_INPUT input)
{
VS_OUTPUT output = (VS_OUTPUT)0;

input.Position.x += input.Texture.x * input.Position.z * PartScale.x;
input.Position.y += input.Texture.y * input.Position.z * PartScale.x;
input.Position.z = 0.0f;
output.Position = mul(ViewMatrix, input.Position);
output.Texture0.x = input.Texture.x * 0.5f + 0.5f;
output.Texture0.y = input.Texture.y * 0.5f + 0.5f;
output.Texture0.z = input.TextureC.x;
output.Color = PartScale;

return output;
}

// -------------------------------------------------------------------------

// -------------------------------------------------------------------------

struct PS_OUTPUT
{
vector diffuse	: COLOR0;
};

PS_OUTPUT WeaponPixelShader(VS_OUTPUT input)
{
PS_OUTPUT output = (PS_OUTPUT)0;

vector Smoke = tex2D(BaseTex, input.Texture0);

if (input.Color.y < 0.01f)
{
	output.diffuse.x = 0.05f;
	output.diffuse.y = 0.75f;
	output.diffuse.z = 0.75f;
	output.diffuse.a = Smoke.r * saturate(input.Texture0.z - input.Color.y - 0.1f);
}
else
{
	output.diffuse.xyz = 0.0f;
	output.diffuse.a = saturate(Smoke.r * (input.Texture0.z * 2 - 1));
}
	

return output;
}
