//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose: 
//
// $NoKeywords: $
//
//=============================================================================//
// FIXME: Should we just pass the Particle draw members directly as
// arguments to IParticleEffect::SimulateAndRender?

// This file defines and implements the ParticleDraw class, which is used
// by ParticleEffects to render particles. It simply stores render + simulation
// state
//

#ifndef PARTICLEDRAW_H
#define PARTICLEDRAW_H


class IMaterial;
class CMeshBuilder;
class CParticleSubTexture;


class ParticleDraw
{
friend class CParticleEffectBinding;

public:

					ParticleDraw();

	void			Init( CMeshBuilder *pMeshBuilder, IMaterial *pMaterial, float fTimeDelta );

	// Time delta..
	float			GetTimeDelta() const;

	// Get the material being used (mostly useful for getting the tcoord padding).
	//IMaterial*		GetPMaterial();

	// This can return NULL if the particle system is only being simulated.
	CMeshBuilder*	GetMeshBuilder();

	CParticleSubTexture	*m_pSubTexture;

private:
	CMeshBuilder	*m_pMeshBuilder;
	IMaterial		*m_pMaterial;
	float			m_fTimeDelta;
};



// ------------------------------------------------------------------------- //
// Inlines
// ------------------------------------------------------------------------- //

inline ParticleDraw::ParticleDraw()
{
	m_pMaterial = 0;
}

inline void ParticleDraw::Init( CMeshBuilder *pMeshBuilder, IMaterial *pMaterial, float fTimeDelta )
{
	m_pMeshBuilder = pMeshBuilder;
	m_pMaterial = pMaterial;
	m_fTimeDelta = fTimeDelta;
}

inline float ParticleDraw::GetTimeDelta() const
{
	return m_fTimeDelta;
}

inline CMeshBuilder* ParticleDraw::GetMeshBuilder()
{
	return m_pMeshBuilder;
}

#endif