
///////////////////////////////////////////////////////////////////////////////
//
// File   : AVP_Sentrygun_AIAnimStateData.h
// Author : Will Plano
// Date   : 25/06/2008
//
// Copyright (C) 2008 Rebellion, All Rights Reserved.
//
///////////////////////////////////////////////////////////////////////////////

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

#ifndef __AVP_SENTRYGUN_AIANIMSTATEDATA_H__
#define __AVP_SENTRYGUN_AIANIMSTATEDATA_H__

#include "Core/Asura_HashTree.h"

#include "Actor/Weapons/Sentrygun/AVP_Sentrygun_AIAnimStateMachine.h"

class AVP_Actor_AnimStateData;

class AVP_Sentrygun_AIAnimStateData
{
public:
	static const AVP_Actor_AnimStateData* GetAnimStateData( const Asura_Hash_ID uAnimStateBlueprintType, const Asura_Hash_ID uCurrentWeaponHash, u_int uState );

	static void InitialiseWeaponData( const Asura_Hash_ID uAnimStateBlueprintType, const Asura_Hash_ID uHash ) { GetWeaponDataByHash( uAnimStateBlueprintType, uHash ); }
	static void ResetStorage() { s_xHashTree.Reset(); }

private:
	struct AVP_Sentrygun_AIAnimWeaponStateData
	{
		AVP_Sentrygun_AIAnimWeaponStateData();
		~AVP_Sentrygun_AIAnimWeaponStateData();
		void InitialiseFromBlueprint( const Asura_Hash_ID uAnimStateBlueprintType, const Asura_Hash_ID uBlueprintHash );

		AVP_Actor_AnimStateData* m_apxAnimStateData[ AVP_Sentrygun_AIAnimStateMachine::SENTRYGUN_STATE_END ];
	};

	static const AVP_Sentrygun_AIAnimWeaponStateData* GetWeaponDataByHash( const Asura_Hash_ID uAnimStateBlueprintType, const Asura_Hash_ID uHash );

	static Asura_TemplateHashTree< AVP_Sentrygun_AIAnimWeaponStateData > s_xHashTree;

	AVP_Sentrygun_AIAnimStateData();
	AVP_Sentrygun_AIAnimStateData(const AVP_Sentrygun_AIAnimStateData& xOther);
	AVP_Sentrygun_AIAnimStateData&	operator=(const AVP_Sentrygun_AIAnimStateData& xOther);
};

#endif // __AVP_SENTRYGUN_AIANIMSTATEDATA_H__
