#ifndef CANIMATIONMANAGER_H_
#define CANIMATIONMANAGER_H_

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// File: “CAnimationManager.h”
// Author: Jared Hamby (JH)
// Purpose: This is the header file for the animation manager
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

#include "../Wrappers/viewManager.h"
#include <vector>
using std::vector;
class CAnimationEngine;
union matrix;
class baseObj;

class CAnimationManager
{
private:
	viewManager* m_pTM;

	int references;

	baseObj* m_pBase;

	CAnimationManager(void) : references(1), m_pBase(0)
		{ m_pTM = viewManager::getInstance(); }
	CAnimationManager(const CAnimationManager&);
	CAnimationManager& operator=(const CAnimationManager&);

	~CAnimationManager(void) {};
public:
	vector<CAnimationEngine*> m_pAE;

	////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	// Function: “GetInstance”
	// Last modified: August 27, 2008
	// Purpose: This gets an instance of the animation manager
	////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	static CAnimationManager* GetInstance(void);
	void acquireInstance();
	void releaseInstance();
	
	////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	// Function: “Load”
	// Last modified: August 27, 2008
	// Purpose: This loads a file for the animation manager to then call on the animation engine
	////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	void Load(const char* szFileName, baseObj* object);

	////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	// Function: “Shutdown”
	// Last modified: August 27, 2008
	// Purpose: This is shuts down the animation manager
	////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	void Shutdown(void);

	////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	// Function: “Render”
	// Last modified: August 27, 2008
	// Purpose: This renders the specific frame for the specific animation engine
	////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	//void Render(int ID, int nPosX, int nPosY, float fScaleX = 1.0f, float fScaleY = 1.0f, float fRotationX = 0.0f, 
	//	float fRotationY = 0.0f, float fRotation = 0.0f, unsigned color = 0xFFFFFFFF);

	void Render(int ID, matrix* transform);
	////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	// Function: “Update”
	// Last modified: August 27, 2008
	// Purpose: This updates the set of frames
	////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	void Update(float fDelta);

	////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	// Function: “Accessors”
	// Last modified: August 27, 2008
	// Purpose: This gets the information needed
	////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	CAnimationEngine* GetEngine(unsigned int nIndex);
};

#endif