
///////////////////////////////////////////////////////////////////////////////
//
// File   : Tools_FacialAnimation_FaceType_MuscleGroup.h
// Author : Andy Tate
// Date   : 8-May-2008
//
// Copyright (C) 2008 Rebellion, All Rights Reserved.
//
///////////////////////////////////////////////////////////////////////////////

#ifdef ASURA_USE_PRAGMA_ONCE
#pragma once
#endif   // ifdef ASURA_USE_PRAGMA_ONCE

#ifndef __TOOLS_FACIALANIMATION_FACETYPE_MUSCLEGROUP_H__
#define __TOOLS_FACIALANIMATION_FACETYPE_MUSCLEGROUP_H__

#if defined(ASURA_USE_FACIAL_ANIMATION_SYSTEM)

////////////////////////////////////////////////////////////////////////////////
// Include files...
////////////////////////////////////////////////////////////////////////////////

#include "Core/Asura_String.h"
#include "FacialAnimation/Asura_FacialAnimation_MuscleGroup.h"


////////////////////////////////////////////////////////////////////////////////
// Forward class declarations...
////////////////////////////////////////////////////////////////////////////////

class Asura_Chunk_Stream;


////////////////////////////////////////////////////////////////////////////////
// Class declaration...
////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////
// Class        : Tools_FacialAnimation_FaceType_MuscleGroup
// Author       : Andy Tate
// Date         : 8-May-2008
//
// Description  : Tools-class used to point to a particular muscle-group within
//				  a face.
////////////////////////////////////////////////////////////////////////////////

class Tools_FacialAnimation_FaceType_MuscleGroup
{
public:
	// Public functions...
	Tools_FacialAnimation_FaceType_MuscleGroup(const char* szName, const Asura_FacialAnimation_MuscleGroup::ControlType eControlType);
	Tools_FacialAnimation_FaceType_MuscleGroup(Asura_Chunk_Stream& xStream);
	Tools_FacialAnimation_FaceType_MuscleGroup(const Asura_Hash_ID uHash, Asura_Chunk_Stream& xStream);
	//	~Tools_FacialAnimation_FaceType_MuscleGroup();

	// Chunk-stream functions...
	void	ReadFromChunkStream(Asura_Chunk_Stream& xStream);
	void	WriteToChunkStream(Asura_Chunk_Stream& xStream) const;

	// Accessor functions...
	void				SetName(const char* szName)			{ m_xName = szName; }
	void				SetName(const Asura_String& xName)	{ m_xName = xName; }
	const Asura_String&	GetName(void) const					{ return(m_xName); }

	Asura_FacialAnimation_MuscleGroup::ControlType	GetControlType(void) const	{ return(m_eControlType); }


protected:
	// Protected variables...

	// Protected functions...


private:
	// Private enumerated types...
	enum
	{
		MAX_ANIMATIONS	= Asura_FacialAnimation_MuscleGroup::MAX_ANIMATIONS,
	};

	// Private variables...
	Asura_String									m_xName;			// The name of this muscle-group (NOTE: This is only unique within the appropriate face).
	Asura_FacialAnimation_MuscleGroup::ControlType	m_eControlType;		// The type of control required over this animation.

	static const u_int								s_uChunkVersion;	// Current version used for reading/writing data.

	// Private functions...
	Tools_FacialAnimation_FaceType_MuscleGroup(void);
	Tools_FacialAnimation_FaceType_MuscleGroup(const Tools_FacialAnimation_FaceType_MuscleGroup& xOther);

	Tools_FacialAnimation_FaceType_MuscleGroup&	operator=(const Tools_FacialAnimation_FaceType_MuscleGroup& xOther);

};   // End of class 'Tools_FacialAnimation_FaceType_MuscleGroup'.

#endif	//defined(ASURA_USE_FACIAL_ANIMATION_SYSTEM)

#endif   // ifndef __TOOLS_FACIALANIMATION_FACETYPE_MUSCLEGROUP_H__


/// End of file. ///
