
///////////////////////////////////////////////////////////////////////////////
//
// File   : AVP_FaceHugger_Description.h
// Author : Chris Wallace
// Date   : 24-Jan-2007
//
// Copyright (C) 2007 Rebellion, All Rights Reserved.
//
///////////////////////////////////////////////////////////////////////////////

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

#ifndef __AVP_FACEHUGGER_DESCRIPTION_H__
#define __AVP_FACEHUGGER_DESCRIPTION_H__

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

#include "Core/Asura_Hash.h"
#include "Dynamics/Asura_Collision_Object.h"
#include "Physics/Asura_Physics_Ragdoll_Description.h"

#include "Entity/PhysicalObject/Actor/AVP_ClientEntity_Actor.h"

static const u_int uAVP_FACEHUGGER_NUM_IK_BONES_PER_TAIL = 10;

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


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

////////////////////////////////////////////////////////////////////////////////
// Class        : AVP_FaceHugger_Description
// Author       : Chris Wallace
// Date         : 9-Nov-2006
//
// Description  : Class used to contain the appropriate descriptions for the
//				  facehugger skins.
////////////////////////////////////////////////////////////////////////////////

class AVP_FaceHugger_Description
{
public:
	// Public enumerated types...
	enum BoneID
	{
		MASTER_CONTROL,		// 0 
		BODY,				// 1 
		AIRSACK_L,			// 2 
		AIRSACK_L_SWELL,	// 3 
		AIRSACK_R,			// 4 
		AIRSACK_R_SWELL,	// 5 
		FINGER_L1_1,		// 6 
		FINGER_L1_2,		// 7 
		FINGER_L1_3,		// 8
		FINGER_L2_1,		// 9
		FINGER_L2_2,		// 10
		FINGER_L2_3,		// 11
		FINGER_L3_1,		// 12
		FINGER_L3_2,		// 13
		FINGER_L3_3,		// 14
		FINGER_L4_1,		// 15
		FINGER_L4_2,		// 16
		FINGER_L4_3,		// 17
		FINGER_R1_1,		// 18
		FINGER_R1_2,		// 19
		FINGER_R1_3,		// 20
		FINGER_R2_1,		// 21
		FINGER_R2_2,		// 22
		FINGER_R2_3,		// 23
		FINGER_R3_1,		// 24
		FINGER_R3_2,		// 25
		FINGER_R3_3,		// 26
		FINGER_R4_1,		// 27
		FINGER_R4_2,		// 28
		FINGER_R4_3,		// 29
		MOUTH_1,			// 30
		MOUTH_2,			// 31
		MOUTH_3,			// 32
		MOUTH_4,			// 33
		THORAX,				// 34
		TAIL01,				// 35
		TAIL02,				// 36
		TAIL03,				// 37
		TAIL04,				// 38
		TAIL05,				// 39
		TAIL06,				// 40
		TAIL07,				// 41
		TAIL08,				// 42
		TAIL09,				// 43
		TAIL10,				// 44
		TONGUE_1,			// 45
		TONGUE_2,			// 46
		TONGUE_3,			// 47
		TONGUE_4,			// 48
		TONGUE_5,			// 49

		MAX_BONES_IDS
	};

	enum MarkerPointID
	{
		MPID_TONGUE,
		MPID_BODY,
		MPID_TARGET_1,
		MPID_BLOOD,

		NUM_MARKER_POINT_IDS
	};


	// Public functions...
#if defined(ASURA_TOOLS)
	static void	AddFilesToExport(const bool bFirstPerson, const Asura_Hash_ID uBlueprintHash, List<Asura_String>& xNameList);
#endif	// defined(ASURA_TOOLS)

	// Accessor functions...
	static Asura_Hash_ID		GetMarkerPointHashID(const MarkerPointID eID)	{ return(s_auMarkerPointHashIDs[eID]); }
	static int					GetFootBoneID( u_int uFootIndex, bool bFirstPerson ) { Asura_Assert( !bFirstPerson, "No FP facehuggers" ); Asura_Assert( uFootIndex < AVP_ClientEntity_Actor::MAX_NUM_FEET, "Bad foot index" ); return s_aiThirdPersonFootBoneID[ uFootIndex ]; }

	static const int*			GetTailChainArray() { return s_aiTailChainBonesArray; }

protected:
	// Protected variables...
	static const Asura_Hash_ID	s_auMarkerPointHashIDs[NUM_MARKER_POINT_IDS];

	static const int			s_aiThirdPersonFootBoneID[ AVP_ClientEntity_Actor::MAX_NUM_FEET ];

	static const int 			s_aiTailChainBonesArray[ uAVP_FACEHUGGER_NUM_IK_BONES_PER_TAIL + 1  ];

	// Protected functions...


private:
	// Private variables...

	// Private functions...
	AVP_FaceHugger_Description(void);
	AVP_FaceHugger_Description(const AVP_FaceHugger_Description& xOther);
	~AVP_FaceHugger_Description();

	AVP_FaceHugger_Description&	operator=(const AVP_FaceHugger_Description& xOther);

};   // End of class 'AVP_FaceHugger_Description'.


#endif   // ifndef __AVP_FACEHUGGER_DESCRIPTION_H__


/// End of file. ///
