#ifndef __POSTPROCFXCHAIN__
#define __POSTPROCFXCHAIN__


// Including STL for the effect list
#pragma warning(push)			// Pushing a warning disabler...
#pragma warning(disable:4995)	// to disable deprecated warning...
#include <list>
using namespace std;
#pragma warning(pop)			// Restoring the previous warning states

// Forward declarations
class PPEffectsCommon;
class ScaledPPEffect;


//------------------------------------------------------------------------------------------
// PostProcFXChain manage a list of scaled effects
//------------------------------------------------------------------------------------------
class PostProcFXChain
{
	private:

		list<ScaledPPEffect*> m_lstFXChain;	// A list of scaled effect to chain


	public:

		// Construction / Destruction
		PostProcFXChain();
		~PostProcFXChain();

		// Post-processing list management
		ScaledPPEffect * InsertEffect(PPEffectsCommon * pEffect, const int nIndex
									,const float fScaleX, const float fScaleY);			// Add a PP effect at nIndex

		void RemoveEffect(const int nIndex);											// Remove the PP effect at nIndex
		void EmptyPPEffectList();														// Empty the PP effects list
		ScaledPPEffect * GetEffect(const int nIndex);									// Retrieve the element at nIndex
		
		const list<ScaledPPEffect*> * GetList(){return &m_lstFXChain;}					// Return a pointer on the list
		const int GetSize(){ return ((const int)(m_lstFXChain.size())); }				// Returns the size of the list

};

#endif