//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose: 
//
// $NoKeywords: $
//=============================================================================//

#ifndef BASEANIMATEDTEXTUREPROXY
#define BASEANIMATEDTEXTUREPROXY

#include "materialsystem/imaterialproxy.h"

class IMaterial;
class IMaterialVar;

#pragma warning (disable : 4100)

class CBaseAnimatedTextureProxy : public IMaterialProxy
{
public:
	CBaseAnimatedTextureProxy();
	virtual ~CBaseAnimatedTextureProxy();

	virtual bool Init( IMaterial *pMaterial, KeyValues *pKeyValues );
	virtual void OnBind( void *pC_BaseEntity );
	virtual void Release( void ) { delete this; }
	virtual IMaterial *GetMaterial();

protected:
	// derived classes must implement this; it returns the time
	// that the animation began
	virtual float  GetAnimationStartTime( void* pBaseEntity ) = 0;

	// Derived classes may implement this if they choose;
	// this method is called whenever the animation wraps...
	virtual void   AnimationWrapped( void* pBaseEntity ) {}

protected:
	void Cleanup();
	
	IMaterialVar *m_AnimatedTextureVar;
	IMaterialVar *m_AnimatedTextureFrameNumVar;
	float m_FrameRate;
	bool m_WrapAnimation;
};

#endif // BASEANIMATEDTEXTUREPROXY