///////////////////////////////////////////////////////////////////////////////
//
// File   : AVP_Alien_MovesMelee.h
// Author : Anthony Gregson
// Date   : 22/02/08
//
// Copyright (C) 2008 Rebellion, All Rights Reserved.
//
///////////////////////////////////////////////////////////////////////////////

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

#ifndef __AVP_ALIEN_MOVES_MELEE_H__
#define __AVP_ALIEN_MOVES_MELEE_H__

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

#include "Entity/PhysicalObject/Moves/Asura_MoveData_Animation.h"
#include "Moves/Vertebrates/AVP_MovesMelee.h"

////////////////////////////////////////////////////////////////////////////////
// Class        : AVP_Alien_Move_Melee_JumpSlash_LeftClaw_Start
// Author       : Anthony Gregson
// Date         : 06/03/08
////////////////////////////////////////////////////////////////////////////////

class AVP_Alien_Move_Melee_JumpSlash_LeftClaw_Start : public AVP_Move_Melee_GenericAttack_Start
{
public:
	AVP_Alien_Move_Melee_JumpSlash_LeftClaw_Start(Asura_Movement_System& xParentSystem, Asura_Hash_ID uFirstPersonBlueprintHash, Asura_Hash_ID uThirdPersonBlueprintHash);

	static Asura_Hash_ID GetStaticHash() { return(0x6BB2E2B6); } // Asura_GetHashID("AVP_Alien_Move_Melee_JumpSlash_LeftClaw_Start")); }

protected:
	virtual bool Start(const Asura_Msg_Move* pxStartMsg);
	virtual void Abort();

	virtual bool CalculateVelocity(const float fTimeStep, Asura_AVector3_OutParam xVelocity) const;

	Asura_MoveData_OrientationInterpolation m_xOrientationInterpolationData;
	Asura_Quat m_xOrientationForVelocity;
	float m_fVelocityMultiplier;

private:
	typedef AVP_Move_Melee_GenericAttack_Start PARENT;
};

////////////////////////////////////////////////////////////////////////////////
// Class        : AVP_Alien_Move_Melee_JumpSlash_LeftClaw_Return_Hit
// Author       : Anthony Gregson
// Date         : 06/03/08
////////////////////////////////////////////////////////////////////////////////

class AVP_Alien_Move_Melee_JumpSlash_LeftClaw_Return_Hit : public AVP_Move_Melee_GenericAttack_Return_Hit
{
public:
	AVP_Alien_Move_Melee_JumpSlash_LeftClaw_Return_Hit(Asura_Movement_System& xParentSystem, Asura_Hash_ID uFirstPersonBlueprintHash, Asura_Hash_ID uThirdPersonBlueprintHash);

	static Asura_Hash_ID GetStaticHash() { return(0xA44A9E30); } // Asura_GetHashID("AVP_Alien_Move_Melee_JumpSlash_LeftClaw_Return_Hit")); }

protected:
	virtual void Finish();
	virtual void Abort();

private:
	typedef AVP_Move_Melee_GenericAttack_Return_Hit PARENT;
};

////////////////////////////////////////////////////////////////////////////////
// Class        : AVP_Alien_Move_Melee_JumpSlash_LeftClaw_Return_Countered
// Author       : Anthony Gregson
// Date         : 06/03/08
////////////////////////////////////////////////////////////////////////////////

class AVP_Alien_Move_Melee_JumpSlash_LeftClaw_Return_Countered : public AVP_Move_Melee_GenericAttack_Return_Countered
{
public:
	AVP_Alien_Move_Melee_JumpSlash_LeftClaw_Return_Countered(Asura_Movement_System& xParentSystem, Asura_Hash_ID uFirstPersonBlueprintHash, Asura_Hash_ID uThirdPersonBlueprintHash);

	static Asura_Hash_ID GetStaticHash() { return(0x49A5B478); } // Asura_GetHashID("AVP_Alien_Move_Melee_JumpSlash_LeftClaw_Return_Countered")); }

protected:
	virtual void Finish();
	virtual void Abort();

private:
	typedef AVP_Move_Melee_GenericAttack_Return_Countered PARENT;
};

////////////////////////////////////////////////////////////////////////////////
// Class        : AVP_Alien_Move_Melee_JumpSlash_LeftClaw_Return_Miss
// Author       : Anthony Gregson
// Date         : 06/03/08
////////////////////////////////////////////////////////////////////////////////

class AVP_Alien_Move_Melee_JumpSlash_LeftClaw_Return_Miss : public AVP_Move_Melee_GenericAttack_Return_Miss
{
public:
	AVP_Alien_Move_Melee_JumpSlash_LeftClaw_Return_Miss(Asura_Movement_System& xParentSystem, Asura_Hash_ID uFirstPersonBlueprintHash, Asura_Hash_ID uThirdPersonBlueprintHash);

	static Asura_Hash_ID GetStaticHash() { return(0xE50B6DFF); } // Asura_GetHashID("AVP_Alien_Move_Melee_JumpSlash_LeftClaw_Return_Miss")); }

protected:
	virtual void Finish();
	virtual void Abort();

private:
	typedef AVP_Move_Melee_GenericAttack_Return_Miss PARENT;
};

////////////////////////////////////////////////////////////////////////////////
// Class        : AVP_Alien_Move_Melee_JumpSlash_RightClaw_Start
// Author       : Anthony Gregson
// Date         : 06/03/08
////////////////////////////////////////////////////////////////////////////////

class AVP_Alien_Move_Melee_JumpSlash_RightClaw_Start : public AVP_Move_Melee_GenericAttack_Start
{
public:
	AVP_Alien_Move_Melee_JumpSlash_RightClaw_Start(Asura_Movement_System& xParentSystem, Asura_Hash_ID uFirstPersonBlueprintHash, Asura_Hash_ID uThirdPersonBlueprintHash);

	static Asura_Hash_ID GetStaticHash() { return(0xD1151A51); } // Asura_GetHashID("AVP_Alien_Move_Melee_JumpSlash_RightClaw_Start")); }

protected:
	virtual bool Start(const Asura_Msg_Move* pxStartMsg);
	virtual void Abort();

	virtual bool CalculateVelocity(const float fTimeStep, Asura_AVector3_OutParam xVelocity) const;

	Asura_MoveData_OrientationInterpolation m_xOrientationInterpolationData;
	Asura_Quat m_xOrientationForVelocity;
	float m_fVelocityMultiplier;

private:
	typedef AVP_Move_Melee_GenericAttack_Start PARENT;
};

////////////////////////////////////////////////////////////////////////////////
// Class        : AVP_Alien_Move_Melee_JumpSlash_RightClaw_Return_Hit
// Author       : Anthony Gregson
// Date         : 06/03/08
////////////////////////////////////////////////////////////////////////////////

class AVP_Alien_Move_Melee_JumpSlash_RightClaw_Return_Hit : public AVP_Move_Melee_GenericAttack_Return_Hit
{
public:
	AVP_Alien_Move_Melee_JumpSlash_RightClaw_Return_Hit(Asura_Movement_System& xParentSystem, Asura_Hash_ID uFirstPersonBlueprintHash, Asura_Hash_ID uThirdPersonBlueprintHash);

	static Asura_Hash_ID GetStaticHash() { return(0x2F31EF75); } // Asura_GetHashID("AVP_Alien_Move_Melee_JumpSlash_RightClaw_Return_Hit")); }

protected:
	virtual void Finish();
	virtual void Abort();

private:
	typedef AVP_Move_Melee_GenericAttack_Return_Hit PARENT;
};

////////////////////////////////////////////////////////////////////////////////
// Class        : AVP_Alien_Move_Melee_JumpSlash_RightClaw_Return_Countered
// Author       : Anthony Gregson
// Date         : 06/03/08
////////////////////////////////////////////////////////////////////////////////

class AVP_Alien_Move_Melee_JumpSlash_RightClaw_Return_Countered : public AVP_Move_Melee_GenericAttack_Return_Countered
{
public:
	AVP_Alien_Move_Melee_JumpSlash_RightClaw_Return_Countered(Asura_Movement_System& xParentSystem, Asura_Hash_ID uFirstPersonBlueprintHash, Asura_Hash_ID uThirdPersonBlueprintHash);

	static Asura_Hash_ID GetStaticHash() { return(0xE61A3DFD); } // Asura_GetHashID("AVP_Alien_Move_Melee_JumpSlash_RightClaw_Return_Countered")); }

protected:
	virtual void Finish();
	virtual void Abort();


private:
	typedef AVP_Move_Melee_GenericAttack_Return_Countered PARENT;
};

////////////////////////////////////////////////////////////////////////////////
// Class        : AVP_Alien_Move_Melee_JumpSlash_RightClaw_Return_Miss
// Author       : Anthony Gregson
// Date         : 06/03/08
////////////////////////////////////////////////////////////////////////////////

class AVP_Alien_Move_Melee_JumpSlash_RightClaw_Return_Miss : public AVP_Move_Melee_GenericAttack_Return_Miss
{
public:
	AVP_Alien_Move_Melee_JumpSlash_RightClaw_Return_Miss(Asura_Movement_System& xParentSystem, Asura_Hash_ID uFirstPersonBlueprintHash, Asura_Hash_ID uThirdPersonBlueprintHash);

	static Asura_Hash_ID GetStaticHash() { return(0xB70E455A); } // Asura_GetHashID("AVP_Alien_Move_Melee_JumpSlash_RightClaw_Return_Miss")); }

protected:
	virtual void Finish();
	virtual void Abort();

private:
	typedef AVP_Move_Melee_GenericAttack_Return_Miss PARENT;
};


/// ////////////////////////////////////////


////////////////////////////////////////////////////////////////////////////////
//
// AVP_Alien_Move_Melee_JumpSlashWall_LeftClaw_Start
//
////////////////////////////////////////////////////////////////////////////////

class AVP_Alien_Move_Melee_JumpSlashWall_LeftClaw_Start : public AVP_Move_Melee_GenericAttack_Start
{
public:
	AVP_Alien_Move_Melee_JumpSlashWall_LeftClaw_Start(Asura_Movement_System& xParentSystem, Asura_Hash_ID uFirstPersonBlueprintHash, Asura_Hash_ID uThirdPersonBlueprintHash);

	static Asura_Hash_ID GetStaticHash() { return 0xfe522cac; } // Asura_GetHashID( "AVP_Alien_Move_Melee_JumpSlashWall_LeftClaw_Start" )

protected:
	virtual bool Start(const Asura_Msg_Move* pxStartMsg);
	virtual void Abort();

	virtual bool CalculateVelocity(const float fTimeStep, Asura_AVector3_OutParam xVelocity) const;

	Asura_MoveData_OrientationInterpolation m_xOrientationInterpolationData;
	Asura_Quat m_xOrientationForVelocity;
	float m_fVelocityMultiplier;

private:
	typedef AVP_Move_Melee_GenericAttack_Start PARENT;
};

////////////////////////////////////////////////////////////////////////////////
//
// AVP_Alien_Move_Melee_JumpSlashWall_LeftClaw_Return_Hit
//
////////////////////////////////////////////////////////////////////////////////

class AVP_Alien_Move_Melee_JumpSlashWall_LeftClaw_Return_Hit : public AVP_Move_Melee_GenericAttack_Return_Hit
{
public:
	AVP_Alien_Move_Melee_JumpSlashWall_LeftClaw_Return_Hit(Asura_Movement_System& xParentSystem, Asura_Hash_ID uFirstPersonBlueprintHash, Asura_Hash_ID uThirdPersonBlueprintHash);

	static Asura_Hash_ID GetStaticHash() { return 0x12991dfa; } // Asura_GetHashID( "AVP_Alien_Move_Melee_JumpSlashWall_LeftClaw_Return_Hit" )

private:
	typedef AVP_Move_Melee_GenericAttack_Return_Hit PARENT;
};

////////////////////////////////////////////////////////////////////////////////
//
// AVP_Alien_Move_Melee_JumpSlashWall_LeftClaw_Return_Countered
//
////////////////////////////////////////////////////////////////////////////////

class AVP_Alien_Move_Melee_JumpSlashWall_LeftClaw_Return_Countered : public AVP_Move_Melee_GenericAttack_Return_Countered
{
public:
	AVP_Alien_Move_Melee_JumpSlashWall_LeftClaw_Return_Countered(Asura_Movement_System& xParentSystem, Asura_Hash_ID uFirstPersonBlueprintHash, Asura_Hash_ID uThirdPersonBlueprintHash);

	static Asura_Hash_ID GetStaticHash() { return 0x3a83b4c2; } // Asura_GetHashID( "AVP_Alien_Move_Melee_JumpSlashWall_LeftClaw_Return_Countered" )

private:
	typedef AVP_Move_Melee_GenericAttack_Return_Countered PARENT;
};

////////////////////////////////////////////////////////////////////////////////
//
// AVP_Alien_Move_Melee_JumpSlashWall_LeftClaw_Return_Miss
//
////////////////////////////////////////////////////////////////////////////////

class AVP_Alien_Move_Melee_JumpSlashWall_LeftClaw_Return_Miss : public AVP_Move_Melee_GenericAttack_Return_Miss
{
public:
	AVP_Alien_Move_Melee_JumpSlashWall_LeftClaw_Return_Miss(Asura_Movement_System& xParentSystem, Asura_Hash_ID uFirstPersonBlueprintHash, Asura_Hash_ID uThirdPersonBlueprintHash);

	static Asura_Hash_ID GetStaticHash() { return 0x408ce775; } // Asura_GetHashID( "AVP_Alien_Move_Melee_JumpSlashWall_LeftClaw_Return_Miss" )

private:
	typedef AVP_Move_Melee_GenericAttack_Return_Miss PARENT;
};

////////////////////////////////////////////////////////////////////////////////
//
// AVP_Alien_Move_Melee_JumpSlashWall_RightClaw_Start
//
////////////////////////////////////////////////////////////////////////////////

class AVP_Alien_Move_Melee_JumpSlashWall_RightClaw_Start : public AVP_Move_Melee_GenericAttack_Start
{
public:
	AVP_Alien_Move_Melee_JumpSlashWall_RightClaw_Start(Asura_Movement_System& xParentSystem, Asura_Hash_ID uFirstPersonBlueprintHash, Asura_Hash_ID uThirdPersonBlueprintHash);

	static Asura_Hash_ID GetStaticHash() { return 0x925f0f1b; } // Asura_GetHashID( "AVP_Alien_Move_Melee_JumpSlashWall_RightClaw_Start" )

protected:
	virtual bool Start(const Asura_Msg_Move* pxStartMsg);
	virtual void Abort();

	virtual bool CalculateVelocity(const float fTimeStep, Asura_AVector3_OutParam xVelocity) const;

	Asura_MoveData_OrientationInterpolation m_xOrientationInterpolationData;
	Asura_Quat m_xOrientationForVelocity;
	float m_fVelocityMultiplier;

private:
	typedef AVP_Move_Melee_GenericAttack_Start PARENT;
};

////////////////////////////////////////////////////////////////////////////////
//
// AVP_Alien_Move_Melee_JumpSlashWall_RightClaw_Return_Hit
//
////////////////////////////////////////////////////////////////////////////////

class AVP_Alien_Move_Melee_JumpSlashWall_RightClaw_Return_Hit : public AVP_Move_Melee_GenericAttack_Return_Hit
{
public:
	AVP_Alien_Move_Melee_JumpSlashWall_RightClaw_Return_Hit(Asura_Movement_System& xParentSystem, Asura_Hash_ID uFirstPersonBlueprintHash, Asura_Hash_ID uThirdPersonBlueprintHash);

	static Asura_Hash_ID GetStaticHash() { return 0x8ab368eb; } // Asura_GetHashID( "AVP_Alien_Move_Melee_JumpSlashWall_RightClaw_Return_Hit" )

private:
	typedef AVP_Move_Melee_GenericAttack_Return_Hit PARENT;
};

////////////////////////////////////////////////////////////////////////////////
//
// AVP_Alien_Move_Melee_JumpSlashWall_RightClaw_Return_Countered
//
////////////////////////////////////////////////////////////////////////////////

class AVP_Alien_Move_Melee_JumpSlashWall_RightClaw_Return_Countered : public AVP_Move_Melee_GenericAttack_Return_Countered
{
public:
	AVP_Alien_Move_Melee_JumpSlashWall_RightClaw_Return_Countered(Asura_Movement_System& xParentSystem, Asura_Hash_ID uFirstPersonBlueprintHash, Asura_Hash_ID uThirdPersonBlueprintHash);

	static Asura_Hash_ID GetStaticHash() { return 0x10fc46f3; } // Asura_GetHashID( "AVP_Alien_Move_Melee_JumpSlashWall_RightClaw_Return_Countered" )

private:
	typedef AVP_Move_Melee_GenericAttack_Return_Countered PARENT;
};

////////////////////////////////////////////////////////////////////////////////
//
// AVP_Alien_Move_Melee_JumpSlashWall_RightClaw_Return_Miss
//
////////////////////////////////////////////////////////////////////////////////

class AVP_Alien_Move_Melee_JumpSlashWall_RightClaw_Return_Miss : public AVP_Move_Melee_GenericAttack_Return_Miss
{
public:
	AVP_Alien_Move_Melee_JumpSlashWall_RightClaw_Return_Miss(Asura_Movement_System& xParentSystem, Asura_Hash_ID uFirstPersonBlueprintHash, Asura_Hash_ID uThirdPersonBlueprintHash);

	static Asura_Hash_ID GetStaticHash() { return 0xcbbbfaa4; } // Asura_GetHashID( "AVP_Alien_Move_Melee_JumpSlashWall_RightClaw_Return_Miss" )

private:
	typedef AVP_Move_Melee_GenericAttack_Return_Miss PARENT;
};

/// ///////////////////////////////////////


////////////////////////////////////////////////////////////////////////////////
// Class        : AVP_Alien_Move_Melee_StandingClawAttack_Start
// Author       : Anthony Gregson
// Date         : 10/03/08
////////////////////////////////////////////////////////////////////////////////

class AVP_Alien_Move_Melee_StandingClawAttack_Start : public AVP_Move_Melee_GenericAttack_Start
{
public:
	AVP_Alien_Move_Melee_StandingClawAttack_Start(Asura_Movement_System& xParentSystem, Asura_Hash_ID uFirstPersonBlueprintHash, Asura_Hash_ID uThirdPersonBlueprintHash);

	static Asura_Hash_ID GetStaticHash() { return(0x0F78F493); } // Asura_GetHashID("AVP_Alien_Move_Melee_StandingClawAttack_Start")); }

private:
	typedef AVP_Move_Melee_GenericAttack_Start PARENT;
};

////////////////////////////////////////////////////////////////////////////////
// Class        : AVP_Alien_Move_Melee_StandingClawAttack_Return_Hit
// Author       : Anthony Gregson
// Date         : 10/03/08
////////////////////////////////////////////////////////////////////////////////

class AVP_Alien_Move_Melee_StandingClawAttack_Return_Hit : public AVP_Move_Melee_GenericAttack_Return_Hit
{
public:
	AVP_Alien_Move_Melee_StandingClawAttack_Return_Hit(Asura_Movement_System& xParentSystem, Asura_Hash_ID uFirstPersonBlueprintHash, Asura_Hash_ID uThirdPersonBlueprintHash);

	static Asura_Hash_ID GetStaticHash() { return(0xE7C62E73); } // Asura_GetHashID("AVP_Alien_Move_Melee_StandingClawAttack_Return_Hit")); }

protected:
	static const char* s_szParameterNameLeft;
	static const char* s_szParameterNameRight;

private:
	typedef AVP_Move_Melee_GenericAttack_Return_Hit PARENT;
};

////////////////////////////////////////////////////////////////////////////////
// Class        : AVP_Alien_Move_Melee_StandingClawAttack_Return_Countered
// Author       : Anthony Gregson
// Date         : 10/03/08
////////////////////////////////////////////////////////////////////////////////

class AVP_Alien_Move_Melee_StandingClawAttack_Return_Countered : public AVP_Move_Melee_GenericAttack_Return_Countered
{
public:
	AVP_Alien_Move_Melee_StandingClawAttack_Return_Countered(Asura_Movement_System& xParentSystem, Asura_Hash_ID uFirstPersonBlueprintHash, Asura_Hash_ID uThirdPersonBlueprintHash);

	static Asura_Hash_ID GetStaticHash() { return(0x1E76C67B); } // Asura_GetHashID("AVP_Alien_Move_Melee_StandingClawAttack_Return_Countered")); }

protected:
	static const char* s_szParameterNameLeft;
	static const char* s_szParameterNameRight;

private:
	typedef AVP_Move_Melee_GenericAttack_Return_Countered PARENT;
};

////////////////////////////////////////////////////////////////////////////////
// Class        : AVP_Alien_Move_Melee_StandingClawAttack_Return_Miss
// Author       : Anthony Gregson
// Date         : 10/03/08
////////////////////////////////////////////////////////////////////////////////

class AVP_Alien_Move_Melee_StandingClawAttack_Return_Miss : public AVP_Move_Melee_GenericAttack_Return_Miss
{
public:
	AVP_Alien_Move_Melee_StandingClawAttack_Return_Miss(Asura_Movement_System& xParentSystem, Asura_Hash_ID uFirstPersonBlueprintHash, Asura_Hash_ID uThirdPersonBlueprintHash);

	static Asura_Hash_ID GetStaticHash() { return(0x1101E61C); } // Asura_GetHashID("AVP_Alien_Move_Melee_StandingClawAttack_Return_Miss")); }

protected:
	static const char* s_szParameterNameLeft;
	static const char* s_szParameterNameRight;

private:
	typedef AVP_Move_Melee_GenericAttack_Return_Miss PARENT;
};


////////////////////////////////////////////////////////////////////////////////
// Class        : AVP_Alien_Move_Melee_CrouchingClawAttack_Start
// Author       : Anthony Gregson
// Date         : 26/09/08
////////////////////////////////////////////////////////////////////////////////

class AVP_Alien_Move_Melee_CrouchingClawAttack_Start : public AVP_Move_Melee_GenericAttack_Start
{
public:
	AVP_Alien_Move_Melee_CrouchingClawAttack_Start(Asura_Movement_System& xParentSystem, Asura_Hash_ID uFirstPersonBlueprintHash, Asura_Hash_ID uThirdPersonBlueprintHash);

	static Asura_Hash_ID GetStaticHash() { return 0x8FE81E55; } // Asura_GetHashID("AVP_Alien_Move_Melee_CrouchingClawAttack_Start")); }

private:
	typedef AVP_Move_Melee_GenericAttack_Start PARENT;
};

////////////////////////////////////////////////////////////////////////////////
// Class        : AVP_Alien_Move_Melee_CrouchingClawAttack_Return_Hit
// Author       : Anthony Gregson
// Date         : 26/09/08
////////////////////////////////////////////////////////////////////////////////

class AVP_Alien_Move_Melee_CrouchingClawAttack_Return_Hit : public AVP_Move_Melee_GenericAttack_Return_Hit
{
public:
	AVP_Alien_Move_Melee_CrouchingClawAttack_Return_Hit(Asura_Movement_System& xParentSystem, Asura_Hash_ID uFirstPersonBlueprintHash, Asura_Hash_ID uThirdPersonBlueprintHash);

	static Asura_Hash_ID GetStaticHash() { return 0x9674CDF1; } // Asura_GetHashID("AVP_Alien_Move_Melee_CrouchingClawAttack_Return_Hit")); }

private:
	typedef AVP_Move_Melee_GenericAttack_Return_Hit PARENT;
};

////////////////////////////////////////////////////////////////////////////////
// Class        : AVP_Alien_Move_Melee_CrouchingClawAttack_Return_Countered
// Author       : Anthony Gregson
// Date         : 26/09/08
////////////////////////////////////////////////////////////////////////////////

class AVP_Alien_Move_Melee_CrouchingClawAttack_Return_Countered : public AVP_Move_Melee_GenericAttack_Return_Countered
{
public:
	AVP_Alien_Move_Melee_CrouchingClawAttack_Return_Countered(Asura_Movement_System& xParentSystem, Asura_Hash_ID uFirstPersonBlueprintHash, Asura_Hash_ID uThirdPersonBlueprintHash);

	static Asura_Hash_ID GetStaticHash() { return 0x9AC34F79; } // Asura_GetHashID("AVP_Alien_Move_Melee_CrouchingClawAttack_Return_Countered")); }

private:
	typedef AVP_Move_Melee_GenericAttack_Return_Countered PARENT;
};

////////////////////////////////////////////////////////////////////////////////
// Class        : AVP_Alien_Move_Melee_CrouchingClawAttack_Return_Miss
// Author       : Anthony Gregson
// Date         : 26/09/08
////////////////////////////////////////////////////////////////////////////////

class AVP_Alien_Move_Melee_CrouchingClawAttack_Return_Miss : public AVP_Move_Melee_GenericAttack_Return_Miss
{
public:
	AVP_Alien_Move_Melee_CrouchingClawAttack_Return_Miss(Asura_Movement_System& xParentSystem, Asura_Hash_ID uFirstPersonBlueprintHash, Asura_Hash_ID uThirdPersonBlueprintHash);

	static Asura_Hash_ID GetStaticHash() { return 0x3827365E; } // Asura_GetHashID("AVP_Alien_Move_Melee_CrouchingClawAttack_Return_Miss")); }

private:
	typedef AVP_Move_Melee_GenericAttack_Return_Miss PARENT;
};


////////////////////////////////////////////////////////////////////////////////
// Class        : AVP_Alien_Move_Melee_Headbite
// Author       : Anthony Gregson
// Date         : 08/04/08
////////////////////////////////////////////////////////////////////////////////

class AVP_Alien_Move_Melee_Headbite : public AVP_Move_Melee
{
public:
	AVP_Alien_Move_Melee_Headbite(Asura_Movement_System& xParentSystem, Asura_Hash_ID uFirstPersonBlueprintHash, Asura_Hash_ID uThirdPersonBlueprintHash);

	static Asura_Hash_ID GetStaticHash() { return(0x69D6A195); } // Asura_GetHashID("AVP_Alien_Move_Melee_Headbite")); }

protected:
	virtual bool Start(const Asura_Msg_Move* pxStartMsg);
	virtual void UpdateStates(const float fTimeStep);

private:
	typedef AVP_Move_Melee PARENT;
};

//////////////////////////////////////////////////////////////////////////////
//
// Crawl to stand attack classes.
// (Claw slash attack for the AI that starts from the crawl pose.)
//
//////////////////////////////////////////////////////////////////////////////

// Right.
class AVP_Alien_Move_Melee_CrawlToStandAttackR_Base_Start : public AVP_Move_Melee_GenericAttack_Start
{
public:
	AVP_Alien_Move_Melee_CrawlToStandAttackR_Base_Start( Asura_Movement_System& xParentSystem, Asura_Hash_ID uFirstPersonBlueprintHash, Asura_Hash_ID uMoveHash, Asura_Hash_ID uThirdPersonBlueprintHash, const char* szBaseParameterName );

protected:
	virtual bool Start( const Asura_Msg_Move* pxStartMsg );
	virtual void Abort();
	virtual bool CalculateVelocity(const float fTimeStep, Asura_AVector3_OutParam xVelocity) const;
	virtual bool CalculateOrientation(const float fTimeStep, Asura_Quat& xOrientation) const;
	virtual void UpdateStates(const float fTimeStep);
private:
	typedef AVP_Move_Melee_GenericAttack_Start PARENT;

	// Asura_MoveData_OrientationInterpolation m_xOrientationInterpolationData;
	mutable float m_fAnimTime;
	mutable Asura_Vector_3 m_xTargetStartPosition;
	Asura_Guid m_uTarget;
	float m_fVelocityMultiplier;
};

class AVP_Alien_Move_Melee_CrawlToStandAttackR_Start : public AVP_Alien_Move_Melee_CrawlToStandAttackR_Base_Start
{
public:
	AVP_Alien_Move_Melee_CrawlToStandAttackR_Start(Asura_Movement_System& xParentSystem, Asura_Hash_ID uFirstPersonBlueprintHash, Asura_Hash_ID uThirdPersonBlueprintHash);
	static Asura_Hash_ID GetStaticHash() { return 0xfe2f863c; } // Asura_GetHashID( "AVP_Alien_Move_Melee_CrawlToStandAttackR_Start" )
	typedef AVP_Alien_Move_Melee_CrawlToStandAttackR_Base_Start PARENT;

};

class AVP_Alien_Move_Melee_CrawlToStandAttackShortR_Start : public AVP_Alien_Move_Melee_CrawlToStandAttackR_Base_Start
{
public:
	AVP_Alien_Move_Melee_CrawlToStandAttackShortR_Start(Asura_Movement_System& xParentSystem, Asura_Hash_ID uFirstPersonBlueprintHash, Asura_Hash_ID uThirdPersonBlueprintHash);
	static Asura_Hash_ID GetStaticHash() { return 0x796f9ed2; } // Asura_GetHashID( "AVP_Alien_Move_Melee_CrawlToStandAttackShortR_Start" )
	typedef AVP_Alien_Move_Melee_CrawlToStandAttackR_Base_Start PARENT;
};


class AVP_Alien_Move_Melee_CrawlToStandAttackR_Return_Hit : public AVP_Move_Melee_GenericAttack_Return_Hit
{
public:
	AVP_Alien_Move_Melee_CrawlToStandAttackR_Return_Hit(Asura_Movement_System& xParentSystem, Asura_Hash_ID uFirstPersonBlueprintHash, Asura_Hash_ID uThirdPersonBlueprintHash);
	static Asura_Hash_ID GetStaticHash() { return 0x49e53e6a; } // Asura_GetHashID( "AVP_Alien_Move_Melee_CrawlToStandAttackR_Return_Hit" )

protected:
	virtual void Finish();
	virtual void Abort();

private:
	typedef AVP_Move_Melee_GenericAttack_Return_Hit PARENT;
};

class AVP_Alien_Move_Melee_CrawlToStandAttackR_Return_Countered : public AVP_Move_Melee_GenericAttack_Return_Countered
{
public:
	AVP_Alien_Move_Melee_CrawlToStandAttackR_Return_Countered(Asura_Movement_System& xParentSystem, Asura_Hash_ID uFirstPersonBlueprintHash, Asura_Hash_ID uThirdPersonBlueprintHash);
	static Asura_Hash_ID GetStaticHash() { return 0xb4f1c132; } // Asura_GetHashID( "AVP_Alien_Move_Melee_CrawlToStandAttackR_Return_Countered" )

protected:
	virtual void Finish();
	virtual void Abort();

private:
	typedef AVP_Move_Melee_GenericAttack_Return_Countered PARENT;
};

class AVP_Alien_Move_Melee_CrawlToStandAttackR_Return_Miss : public AVP_Move_Melee_GenericAttack_Return_Miss
{
public:
	AVP_Alien_Move_Melee_CrawlToStandAttackR_Return_Miss(Asura_Movement_System& xParentSystem, Asura_Hash_ID uFirstPersonBlueprintHash, Asura_Hash_ID uThirdPersonBlueprintHash);
	static Asura_Hash_ID GetStaticHash() { return 0xf2c4d505; } // Asura_GetHashID( "AVP_Alien_Move_Melee_CrawlToStandAttackR_Return_Miss" )

	virtual bool ShouldStart() const;
	virtual bool Start(const Asura_Msg_Move* pxStartMsg);

protected:
	virtual void Finish();
	virtual void Abort();

private:
	typedef AVP_Move_Melee_GenericAttack_Return_Miss PARENT;
	typedef AVP_Move_Melee GRANDPARENT;
};

// Left.
class AVP_Alien_Move_Melee_CrawlToStandAttackL_Base_Start : public AVP_Move_Melee_GenericAttack_Start
{
public:
	AVP_Alien_Move_Melee_CrawlToStandAttackL_Base_Start( Asura_Movement_System& xParentSystem, Asura_Hash_ID uFirstPersonBlueprintHash, Asura_Hash_ID uMoveHash, Asura_Hash_ID uThirdPersonBlueprintHash, const char* szBaseParameterName );

protected:
	virtual bool Start( const Asura_Msg_Move* pxStartMsg );
	virtual void Abort();
	virtual bool CalculateVelocity(const float fTimeStep, Asura_AVector3_OutParam xVelocity) const;
	virtual bool CalculateOrientation(const float fTimeStep, Asura_Quat& xOrientation) const;
	virtual void UpdateStates(const float fTimeStep);

private:
	typedef AVP_Move_Melee_GenericAttack_Start PARENT;

	//Asura_MoveData_OrientationInterpolation m_xOrientationInterpolationData;
	mutable float m_fAnimTime;
	mutable Asura_Vector_3 m_xTargetStartPosition;
	Asura_Guid m_uTarget;
	float m_fVelocityMultiplier;

};

class AVP_Alien_Move_Melee_CrawlToStandAttackL_Start : public AVP_Alien_Move_Melee_CrawlToStandAttackL_Base_Start
{
public:
	AVP_Alien_Move_Melee_CrawlToStandAttackL_Start(Asura_Movement_System& xParentSystem, Asura_Hash_ID uFirstPersonBlueprintHash, Asura_Hash_ID uThirdPersonBlueprintHash);
	static Asura_Hash_ID GetStaticHash() { return 0xc0ca22b6; } // Asura_GetHashID( "AVP_Alien_Move_Melee_CrawlToStandAttackL_Start" )
	typedef AVP_Alien_Move_Melee_CrawlToStandAttackL_Base_Start PARENT;

};

class AVP_Alien_Move_Melee_CrawlToStandAttackShortL_Start : public AVP_Alien_Move_Melee_CrawlToStandAttackL_Base_Start
{
public:
	AVP_Alien_Move_Melee_CrawlToStandAttackShortL_Start(Asura_Movement_System& xParentSystem, Asura_Hash_ID uFirstPersonBlueprintHash, Asura_Hash_ID uThirdPersonBlueprintHash);
	static Asura_Hash_ID GetStaticHash() { return 0x3c0a3b4c; } // Asura_GetHashID( "AVP_Alien_Move_Melee_CrawlToStandAttackShortL_Start" )
	typedef AVP_Alien_Move_Melee_CrawlToStandAttackL_Base_Start PARENT;
};


class AVP_Alien_Move_Melee_CrawlToStandAttackL_Return_Hit : public AVP_Move_Melee_GenericAttack_Return_Hit
{
public:
	AVP_Alien_Move_Melee_CrawlToStandAttackL_Return_Hit(Asura_Movement_System& xParentSystem, Asura_Hash_ID uFirstPersonBlueprintHash, Asura_Hash_ID uThirdPersonBlueprintHash);
	static Asura_Hash_ID GetStaticHash() { return 0x1bbb5e30; } // Asura_GetHashID( "AVP_Alien_Move_Melee_CrawlToStandAttackL_Return_Hit" )

protected:
	virtual void Finish();
	virtual void Abort();

private:
	typedef AVP_Move_Melee_GenericAttack_Return_Hit PARENT;
};

class AVP_Alien_Move_Melee_CrawlToStandAttackL_Return_Countered : public AVP_Move_Melee_GenericAttack_Return_Countered
{
public:
	AVP_Alien_Move_Melee_CrawlToStandAttackL_Return_Countered(Asura_Movement_System& xParentSystem, Asura_Hash_ID uFirstPersonBlueprintHash, Asura_Hash_ID uThirdPersonBlueprintHash);
	static Asura_Hash_ID GetStaticHash() { return 0x19867478; } // Asura_GetHashID( "AVP_Alien_Move_Melee_CrawlToStandAttackL_Return_Countered" )

protected:
	virtual void Finish();
	virtual void Abort();

private:
	typedef AVP_Move_Melee_GenericAttack_Return_Countered PARENT;
};

class AVP_Alien_Move_Melee_CrawlToStandAttackL_Return_Miss : public AVP_Move_Melee_GenericAttack_Return_Miss
{
public:
	AVP_Alien_Move_Melee_CrawlToStandAttackL_Return_Miss(Asura_Movement_System& xParentSystem, Asura_Hash_ID uFirstPersonBlueprintHash, Asura_Hash_ID uThirdPersonBlueprintHash);
	static Asura_Hash_ID GetStaticHash() { return 0x5bb2adff; } // Asura_GetHashID( "AVP_Alien_Move_Melee_CrawlToStandAttackL_Return_Miss" )

	virtual bool ShouldStart() const;
	virtual bool Start(const Asura_Msg_Move* pxStartMsg);

protected:
	virtual void Finish();
	virtual void Abort();

private:
	typedef AVP_Move_Melee_GenericAttack_Return_Miss PARENT;
	typedef AVP_Move_Melee GRANDPARENT;
};


//////////////////////////////////////////////////////////////////////////////
//
// Stand attack loop classes.
// (Standing claw slash attacks for the AI that can be chained after the initial crawl to stand attack.)
//
//////////////////////////////////////////////////////////////////////////////

// Right.
class AVP_Alien_Move_Melee_StandAttackLoopR_Start : public AVP_Move_Melee_GenericAttack_Start
{
public:
	AVP_Alien_Move_Melee_StandAttackLoopR_Start(Asura_Movement_System& xParentSystem, Asura_Hash_ID uFirstPersonBlueprintHash, Asura_Hash_ID uThirdPersonBlueprintHash);
	static Asura_Hash_ID GetStaticHash() { return 0x5390cad0; } // Asura_GetHashID( "AVP_Alien_Move_Melee_StandAttackLoopR_Start" )

protected:
	virtual bool Start( const Asura_Msg_Move* pxStartMsg );
	virtual void Abort();

private:

	Asura_MoveData_OrientationInterpolation m_xOrientationInterpolationData;

	typedef AVP_Move_Melee_GenericAttack_Start PARENT;
};

class AVP_Alien_Move_Melee_StandAttackLoopR_Return_Hit : public AVP_Move_Melee_GenericAttack_Return_Hit
{
public:
	AVP_Alien_Move_Melee_StandAttackLoopR_Return_Hit(Asura_Movement_System& xParentSystem, Asura_Hash_ID uFirstPersonBlueprintHash, Asura_Hash_ID uThirdPersonBlueprintHash);
	static Asura_Hash_ID GetStaticHash() { return 0x2f3bb656; } // Asura_GetHashID( "AVP_Alien_Move_Melee_StandAttackLoopR_Return_Hit" )

protected:
	virtual void Finish();
	virtual void Abort();

private:
	typedef AVP_Move_Melee_GenericAttack_Return_Hit PARENT;
};

class AVP_Alien_Move_Melee_StandAttackLoopR_Return_Countered : public AVP_Move_Melee_GenericAttack_Return_Countered
{
public:
	AVP_Alien_Move_Melee_StandAttackLoopR_Return_Countered(Asura_Movement_System& xParentSystem, Asura_Hash_ID uFirstPersonBlueprintHash, Asura_Hash_ID uThirdPersonBlueprintHash);
	static Asura_Hash_ID GetStaticHash() { return 0x8b91981e; } // Asura_GetHashID( "AVP_Alien_Move_Melee_StandAttackLoopR_Return_Countered" )

protected:
	virtual void Finish();
	virtual void Abort();

private:
	typedef AVP_Move_Melee_GenericAttack_Return_Countered PARENT;
};

class AVP_Alien_Move_Melee_StandAttackLoopR_Return_Miss : public AVP_Move_Melee_GenericAttack_Return_Miss
{
public:
	AVP_Alien_Move_Melee_StandAttackLoopR_Return_Miss(Asura_Movement_System& xParentSystem, Asura_Hash_ID uFirstPersonBlueprintHash, Asura_Hash_ID uThirdPersonBlueprintHash);
	static Asura_Hash_ID GetStaticHash() { return 0xb83d5a99; } // Asura_GetHashID( "AVP_Alien_Move_Melee_StandAttackLoopR_Return_Miss" )

	virtual bool ShouldStart() const;

protected:
	virtual void Finish();
	virtual void Abort();

private:
	typedef AVP_Move_Melee_GenericAttack_Return_Miss PARENT;
};

// Left.
class AVP_Alien_Move_Melee_StandAttackLoopL_Start : public AVP_Move_Melee_GenericAttack_Start
{
public:
	AVP_Alien_Move_Melee_StandAttackLoopL_Start(Asura_Movement_System& xParentSystem, Asura_Hash_ID uFirstPersonBlueprintHash, Asura_Hash_ID uThirdPersonBlueprintHash);
	static Asura_Hash_ID GetStaticHash() { return 0x162b674a; } // Asura_GetHashID( "AVP_Alien_Move_Melee_StandAttackLoopL_Start" )

protected:
	virtual bool Start( const Asura_Msg_Move* pxStartMsg );
	virtual void Abort();

private:

	Asura_MoveData_OrientationInterpolation m_xOrientationInterpolationData;

	typedef AVP_Move_Melee_GenericAttack_Start PARENT;
};

class AVP_Alien_Move_Melee_StandAttackLoopL_Return_Hit : public AVP_Move_Melee_GenericAttack_Return_Hit
{
public:
	AVP_Alien_Move_Melee_StandAttackLoopL_Return_Hit(Asura_Movement_System& xParentSystem, Asura_Hash_ID uFirstPersonBlueprintHash, Asura_Hash_ID uThirdPersonBlueprintHash);
	static Asura_Hash_ID GetStaticHash() { return 0x0111d61c; } // Asura_GetHashID( "AVP_Alien_Move_Melee_StandAttackLoopL_Return_Hit" )

protected:
	virtual void Finish();
	virtual void Abort();

private:
	typedef AVP_Move_Melee_GenericAttack_Return_Hit PARENT;
};

class AVP_Alien_Move_Melee_StandAttackLoopL_Return_Countered : public AVP_Move_Melee_GenericAttack_Return_Countered
{
public:
	AVP_Alien_Move_Melee_StandAttackLoopL_Return_Countered(Asura_Movement_System& xParentSystem, Asura_Hash_ID uFirstPersonBlueprintHash, Asura_Hash_ID uThirdPersonBlueprintHash);
	static Asura_Hash_ID GetStaticHash() { return 0xf0264b64; } // Asura_GetHashID( "AVP_Alien_Move_Melee_StandAttackLoopL_Return_Countered" )

protected:
	virtual void Finish();
	virtual void Abort();

private:
	typedef AVP_Move_Melee_GenericAttack_Return_Countered PARENT;
};

class AVP_Alien_Move_Melee_StandAttackLoopL_Return_Miss : public AVP_Move_Melee_GenericAttack_Return_Miss
{
public:
	AVP_Alien_Move_Melee_StandAttackLoopL_Return_Miss(Asura_Movement_System& xParentSystem, Asura_Hash_ID uFirstPersonBlueprintHash, Asura_Hash_ID uThirdPersonBlueprintHash);
	static Asura_Hash_ID GetStaticHash() { return 0x212b3393; } // Asura_GetHashID( "AVP_Alien_Move_Melee_StandAttackLoopL_Return_Miss" )

	virtual bool ShouldStart() const;

protected:
	virtual void Finish();
	virtual void Abort();

private:
	typedef AVP_Move_Melee_GenericAttack_Return_Miss PARENT;
};


//////////////////////////////////////////////////////////////////////////////
//
// Walk attack classes.
// (Claw slash attack for the AI that starts from the stand pose and walk while slashing.)
//
//////////////////////////////////////////////////////////////////////////////

// Right.
class AVP_Alien_Move_Melee_WalkAttackLoopR_Start : public AVP_Move_Melee_GenericAttack_Start
{
public:
	AVP_Alien_Move_Melee_WalkAttackLoopR_Start(Asura_Movement_System& xParentSystem, Asura_Hash_ID uFirstPersonBlueprintHash, Asura_Hash_ID uThirdPersonBlueprintHash);
	static Asura_Hash_ID GetStaticHash() { return 0x70b37dc7; } // Asura_GetHashID( "AVP_Alien_Move_Melee_WalkAttackR_Start" )

protected:
	virtual bool Start( const Asura_Msg_Move* pxStartMsg );
	virtual void Abort();
	virtual bool CalculateVelocity(const float fTimeStep, Asura_AVector3_OutParam xVelocity) const;

private:
	typedef AVP_Move_Melee_GenericAttack_Start PARENT;

	Asura_MoveData_OrientationInterpolation m_xOrientationInterpolationData;
	float m_fVelocityMultiplier;
};

class AVP_Alien_Move_Melee_WalkAttackLoopR_Return_Hit : public AVP_Move_Melee_GenericAttack_Return_Hit
{
public:
	AVP_Alien_Move_Melee_WalkAttackLoopR_Return_Hit(Asura_Movement_System& xParentSystem, Asura_Hash_ID uFirstPersonBlueprintHash, Asura_Hash_ID uThirdPersonBlueprintHash);
	static Asura_Hash_ID GetStaticHash() { return 0x5b7545bf; } // Asura_GetHashID( "AVP_Alien_Move_Melee_WalkAttackR_Return_Hit" )

protected:
	virtual void Finish();
	virtual void Abort();

private:
	typedef AVP_Move_Melee_GenericAttack_Return_Hit PARENT;
};

class AVP_Alien_Move_Melee_WalkAttackLoopR_Return_Countered : public AVP_Move_Melee_GenericAttack_Return_Countered
{
public:
	AVP_Alien_Move_Melee_WalkAttackLoopR_Return_Countered(Asura_Movement_System& xParentSystem, Asura_Hash_ID uFirstPersonBlueprintHash, Asura_Hash_ID uThirdPersonBlueprintHash);
	static Asura_Hash_ID GetStaticHash() { return 0x369234c7; } // Asura_GetHashID( "AVP_Alien_Move_Melee_WalkAttackR_Return_Countered" )

protected:
	virtual void Finish();
	virtual void Abort();

private:
	typedef AVP_Move_Melee_GenericAttack_Return_Countered PARENT;
};

class AVP_Alien_Move_Melee_WalkAttackLoopR_Return_Miss : public AVP_Move_Melee_GenericAttack_Return_Miss
{
public:
	AVP_Alien_Move_Melee_WalkAttackLoopR_Return_Miss(Asura_Movement_System& xParentSystem, Asura_Hash_ID uFirstPersonBlueprintHash, Asura_Hash_ID uThirdPersonBlueprintHash);
	static Asura_Hash_ID GetStaticHash() { return 0x1335b850; } // Asura_GetHashID( "AVP_Alien_Move_Melee_WalkAttackR_Return_Miss" )

	virtual bool ShouldStart() const;

protected:
	virtual void Finish();
	virtual void Abort();

private:
	typedef AVP_Move_Melee_GenericAttack_Return_Miss PARENT;
};

// Left.
class AVP_Alien_Move_Melee_WalkAttackLoopL_Start : public AVP_Move_Melee_GenericAttack_Start
{
public:
	AVP_Alien_Move_Melee_WalkAttackLoopL_Start(Asura_Movement_System& xParentSystem, Asura_Hash_ID uFirstPersonBlueprintHash, Asura_Hash_ID uThirdPersonBlueprintHash);
	static Asura_Hash_ID GetStaticHash() { return 0x334e1a41; } // Asura_GetHashID( "AVP_Alien_Move_Melee_WalkAttackL_Start" )

protected:
	virtual bool Start( const Asura_Msg_Move* pxStartMsg );
	virtual void Abort();
	virtual bool CalculateVelocity(const float fTimeStep, Asura_AVector3_OutParam xVelocity) const;

private:
	typedef AVP_Move_Melee_GenericAttack_Start PARENT;

	Asura_MoveData_OrientationInterpolation m_xOrientationInterpolationData;
	float m_fVelocityMultiplier;
};

class AVP_Alien_Move_Melee_WalkAttackLoopL_Return_Hit : public AVP_Move_Melee_GenericAttack_Return_Hit
{
public:
	AVP_Alien_Move_Melee_WalkAttackLoopL_Return_Hit(Asura_Movement_System& xParentSystem, Asura_Hash_ID uFirstPersonBlueprintHash, Asura_Hash_ID uThirdPersonBlueprintHash);
	static Asura_Hash_ID GetStaticHash() { return 0x2d4b6585; } // Asura_GetHashID( "AVP_Alien_Move_Melee_WalkAttackL_Return_Hit" )

protected:
	virtual void Finish();
	virtual void Abort();

private:
	typedef AVP_Move_Melee_GenericAttack_Return_Hit PARENT;
};

class AVP_Alien_Move_Melee_WalkAttackLoopL_Return_Countered : public AVP_Move_Melee_GenericAttack_Return_Countered
{
public:
	AVP_Alien_Move_Melee_WalkAttackLoopL_Return_Countered(Asura_Movement_System& xParentSystem, Asura_Hash_ID uFirstPersonBlueprintHash, Asura_Hash_ID uThirdPersonBlueprintHash);
	static Asura_Hash_ID GetStaticHash() { return 0x9b26e80d; } // Asura_GetHashID( "AVP_Alien_Move_Melee_WalkAttackL_Return_Countered" )

protected:
	virtual void Finish();
	virtual void Abort();

private:
	typedef AVP_Move_Melee_GenericAttack_Return_Countered PARENT;
};

class AVP_Alien_Move_Melee_WalkAttackLoopL_Return_Miss : public AVP_Move_Melee_GenericAttack_Return_Miss
{
public:
	AVP_Alien_Move_Melee_WalkAttackLoopL_Return_Miss(Asura_Movement_System& xParentSystem, Asura_Hash_ID uFirstPersonBlueprintHash, Asura_Hash_ID uThirdPersonBlueprintHash);
	static Asura_Hash_ID GetStaticHash() { return 0x7c23914a; } // Asura_GetHashID( "AVP_Alien_Move_Melee_WalkAttackL_Return_Miss" )

	virtual bool ShouldStart() const;

protected:
	virtual void Finish();
	virtual void Abort();

private:
	typedef AVP_Move_Melee_GenericAttack_Return_Miss PARENT;
};


// Headbites

class AVP_Alien_Move_Melee_PickupHuman_Start : public AVP_Move_Melee_GenericAttack_Start
{
public:
	AVP_Alien_Move_Melee_PickupHuman_Start(Asura_Movement_System& xParentSystem, Asura_Hash_ID uFirstPersonBlueprintHash, Asura_Hash_ID uThirdPersonBlueprintHash);

	static Asura_Hash_ID GetStaticHash() { return 0xA6A8A8B7; } // Asura_GetHashID("AVP_Alien_Move_Melee_PickupHuman_Start")); }

private:
	typedef AVP_Move_Melee_GenericAttack_Start PARENT;
};   // End of class 'AVP_Alien_Move_Melee_PickupHuman_Start'.

// Not sure if this move is actually needed, but included for safety.
class AVP_Alien_Move_Melee_PickupHuman_Return_Hit : public AVP_Move_Melee_GenericAttack_Return_Hit
{
public:
	AVP_Alien_Move_Melee_PickupHuman_Return_Hit(Asura_Movement_System& xParentSystem, Asura_Hash_ID uFirstPersonBlueprintHash, Asura_Hash_ID uThirdPersonBlueprintHash);

	virtual bool ShouldStart() const;

	static Asura_Hash_ID GetStaticHash() { return 0xDBB570CF; } // Asura_GetHashID("AVP_Alien_Move_Melee_PickupHuman_Return_Hit")); }

private:
	typedef AVP_Move_Melee_GenericAttack_Return_Hit PARENT;
};   // End of class 'AVP_Alien_Move_Melee_PickupHuman_Return_Hit'.

// Again, not sure this is needed, we may just miss.
class AVP_Alien_Move_Melee_PickupHuman_Return_Countered : public AVP_Move_Melee_GenericAttack_Return_Countered
{
public:
	AVP_Alien_Move_Melee_PickupHuman_Return_Countered(Asura_Movement_System& xParentSystem, Asura_Hash_ID uFirstPersonBlueprintHash, Asura_Hash_ID uThirdPersonBlueprintHash);

	static Asura_Hash_ID GetStaticHash() { return 0x8129D3D7; } // Asura_GetHashID("AVP_Alien_Move_Melee_PickupHuman_Return_Countered")); }

private:
	typedef AVP_Move_Melee_GenericAttack_Return_Countered PARENT;
};   // End of class 'AVP_Alien_Move_Melee_PickupHuman_Return_Countered'.

class AVP_Alien_Move_Melee_PickupHuman_Return_Miss : public AVP_Move_Melee_GenericAttack_Return_Miss
{
public:
	AVP_Alien_Move_Melee_PickupHuman_Return_Miss(Asura_Movement_System& xParentSystem, Asura_Hash_ID uFirstPersonBlueprintHash, Asura_Hash_ID uThirdPersonBlueprintHash);

	static Asura_Hash_ID GetStaticHash() { return 0x9AFAEF40; } // Asura_GetHashID("AVP_Alien_Move_Melee_PickupHuman_Return_Miss")); }

private:
	typedef AVP_Move_Melee_GenericAttack_Return_Miss PARENT;
};   // End of class 'AVP_Alien_Move_Melee_PickupHuman_Return_Miss'.


class AVP_Alien_Move_Melee_Headbite_Human_Start : public AVP_Move_Melee_GenericPuppeteer_Start
{
public:
	AVP_Alien_Move_Melee_Headbite_Human_Start(Asura_Movement_System& xParentSystem);

	static Asura_Hash_ID GetStaticHash() { return 0x709F7B26; } // Asura_GetHashID("AVP_Alien_Move_Melee_Headbite_Human_Start")); }

protected:
	virtual bool ShouldStart() const;

private:
	typedef AVP_Move_Melee_GenericPuppeteer_Start PARENT;
};

class AVP_Alien_Move_Melee_Headbite_Human_Kill : public AVP_Move_Melee_GenericPuppeteer_Success
{
public:
	AVP_Alien_Move_Melee_Headbite_Human_Kill(Asura_Movement_System& xParentSystem);

	static Asura_Hash_ID GetStaticHash() { return 0xB1099C1A; } // Asura_GetHashID("AVP_Alien_Move_Melee_Headbite_Human_Kill")); }

private:
	typedef AVP_Move_Melee_GenericPuppeteer_Success PARENT;
};

class AVP_Alien_Move_Melee_Headbite_Human_Countered : public AVP_Move_Melee_GenericPuppeteer_Countered
{
public:
	AVP_Alien_Move_Melee_Headbite_Human_Countered(Asura_Movement_System& xParentSystem);

	static Asura_Hash_ID GetStaticHash() { return 0xA02D885F; } // Asura_GetHashID("AVP_Alien_Move_Melee_Headbite_Human_Countered")); }

private:
	typedef AVP_Move_Melee_GenericPuppeteer_Countered PARENT;
};


class AVP_Alien_Move_Melee_BackHeadbite_Human_Start : public AVP_Move_Melee_GenericPuppeteer_Start
{
public:
	AVP_Alien_Move_Melee_BackHeadbite_Human_Start(Asura_Movement_System& xParentSystem);

	static Asura_Hash_ID GetStaticHash() { return 0xEED7200D; } // Asura_GetHashID("AVP_Alien_Move_Melee_BackHeadbite_Human_Start")); }

protected:
	virtual bool ShouldStart() const;
	virtual bool Start(const Asura_Msg_Move* pxStartMsg);

private:
	typedef AVP_Move_Melee_GenericPuppeteer_Start PARENT;
};

class AVP_Alien_Move_Melee_BackHeadbite_Human_Kill : public AVP_Move_Melee_GenericPuppeteer_Success
{
public:
	AVP_Alien_Move_Melee_BackHeadbite_Human_Kill(Asura_Movement_System& xParentSystem);

	static Asura_Hash_ID GetStaticHash() { return 0xDE663E53; } // Asura_GetHashID("AVP_Alien_Move_Melee_BackHeadbite_Human_Kill")); }

private:
	typedef AVP_Move_Melee_GenericPuppeteer_Success PARENT;
};

class AVP_Alien_Move_Melee_BackHeadbite_Human_Countered : public AVP_Move_Melee_GenericPuppeteer_Countered
{
public:
	AVP_Alien_Move_Melee_BackHeadbite_Human_Countered(Asura_Movement_System& xParentSystem);

	static Asura_Hash_ID GetStaticHash() { return 0x3EAA61C6; } // Asura_GetHashID("AVP_Alien_Move_Melee_BackHeadbite_Human_Countered")); }

private:
	typedef AVP_Move_Melee_GenericPuppeteer_Countered PARENT;
};


class AVP_Alien_Move_Melee_StealthKill_Human_Start : public AVP_Move_Melee_GenericPuppeteer_Start
{
public:
	AVP_Alien_Move_Melee_StealthKill_Human_Start(Asura_Movement_System& xParentSystem);

	static Asura_Hash_ID GetStaticHash() { return 0x21F68115; } // Asura_GetHashID("AVP_Alien_Move_Melee_StealthKill_Human_Start")); }

protected:
	virtual bool ShouldStart() const;
	virtual bool Start(const Asura_Msg_Move* pxStartMsg);

private:
	typedef AVP_Move_Melee_GenericPuppeteer_Start PARENT;
};

class AVP_Alien_Move_Melee_StealthKill_Human_Kill : public AVP_Move_Melee_GenericPuppeteer_Success
{
public:
	AVP_Alien_Move_Melee_StealthKill_Human_Kill(Asura_Movement_System& xParentSystem);

	static Asura_Hash_ID GetStaticHash() { return 0xF8D29C4B; } // Asura_GetHashID("AVP_Alien_Move_Melee_StealthKill_Human_Kill")); }

private:
	typedef AVP_Move_Melee_GenericPuppeteer_Success PARENT;
};

class AVP_Alien_Move_Melee_StealthKill_Human_Countered : public AVP_Move_Melee_GenericPuppeteer_Countered
{
public:
	AVP_Alien_Move_Melee_StealthKill_Human_Countered(Asura_Movement_System& xParentSystem);

	static Asura_Hash_ID GetStaticHash() { return 0x21A1FECE; } // Asura_GetHashID("AVP_Alien_Move_Melee_StealthKill_Human_Countered")); }

private:
	typedef AVP_Move_Melee_GenericPuppeteer_Countered PARENT;
};

// Predator versions of the above.
class AVP_Alien_Move_Melee_Headbite_Predator_Start : public AVP_Move_Melee_GenericPuppeteer_Start
{
public:
	AVP_Alien_Move_Melee_Headbite_Predator_Start(Asura_Movement_System& xParentSystem);

	static Asura_Hash_ID GetStaticHash() { return 0x88B92504; } // Asura_GetHashID("AVP_Alien_Move_Melee_Headbite_Predator_Start")); }

protected:
	virtual bool ShouldStart() const;

private:
	typedef AVP_Move_Melee_GenericPuppeteer_Start PARENT;
};

class AVP_Alien_Move_Melee_Headbite_Predator_Kill : public AVP_Move_Melee_GenericPuppeteer_Success
{
public:
	AVP_Alien_Move_Melee_Headbite_Predator_Kill(Asura_Movement_System& xParentSystem);

	static Asura_Hash_ID GetStaticHash() { return 0x80443E7C; } // Asura_GetHashID("AVP_Alien_Move_Melee_Headbite_Predator_Kill")); }

private:
	typedef AVP_Move_Melee_GenericPuppeteer_Success PARENT;
};

class AVP_Alien_Move_Melee_Headbite_Predator_Countered : public AVP_Move_Melee_GenericPuppeteer_Countered
{
public:
	AVP_Alien_Move_Melee_Headbite_Predator_Countered(Asura_Movement_System& xParentSystem);

	static Asura_Hash_ID GetStaticHash() { return 0x5D83133D; } // Asura_GetHashID("AVP_Alien_Move_Melee_Headbite_Predator_Countered")); }

private:
	typedef AVP_Move_Melee_GenericPuppeteer_Countered PARENT;
};


class AVP_Alien_Move_Melee_BackHeadbite_Predator_Start : public AVP_Move_Melee_GenericPuppeteer_Start
{
public:
	AVP_Alien_Move_Melee_BackHeadbite_Predator_Start(Asura_Movement_System& xParentSystem);

	static Asura_Hash_ID GetStaticHash() { return 0x961802BD; } // Asura_GetHashID("AVP_Alien_Move_Melee_BackHeadbite_Predator_Start")); }

protected:
	virtual bool ShouldStart() const;
	virtual bool Start(const Asura_Msg_Move* pxStartMsg);

private:
	typedef AVP_Move_Melee_GenericPuppeteer_Start PARENT;
};

class AVP_Alien_Move_Melee_BackHeadbite_Predator_Kill : public AVP_Move_Melee_GenericPuppeteer_Success
{
public:
	AVP_Alien_Move_Melee_BackHeadbite_Predator_Kill(Asura_Movement_System& xParentSystem);

	static Asura_Hash_ID GetStaticHash() { return 0x4F2645A3; } // Asura_GetHashID("AVP_Alien_Move_Melee_BackHeadbite_Predator_Kill")); }

private:
	typedef AVP_Move_Melee_GenericPuppeteer_Success PARENT;
};

class AVP_Alien_Move_Melee_BackHeadbite_Predator_Countered : public AVP_Move_Melee_GenericPuppeteer_Countered
{
public:
	AVP_Alien_Move_Melee_BackHeadbite_Predator_Countered(Asura_Movement_System& xParentSystem);

	static Asura_Hash_ID GetStaticHash() { return 0xC05A6C76; } // Asura_GetHashID("AVP_Alien_Move_Melee_BackHeadbite_Predator_Countered")); }

private:
	typedef AVP_Move_Melee_GenericPuppeteer_Countered PARENT;
};


class AVP_Alien_Move_Melee_StealthKill_Predator_Start : public AVP_Move_Melee_GenericPuppeteer_Start
{
public:
	AVP_Alien_Move_Melee_StealthKill_Predator_Start(Asura_Movement_System& xParentSystem);

	static Asura_Hash_ID GetStaticHash() { return 0xC6B4A4B5; } // Asura_GetHashID("AVP_Alien_Move_Melee_StealthKill_Predator_Start")); }

protected:
	virtual bool ShouldStart() const;
	virtual bool Start(const Asura_Msg_Move* pxStartMsg);

private:
	typedef AVP_Move_Melee_GenericPuppeteer_Start PARENT;
};

class AVP_Alien_Move_Melee_StealthKill_Predator_Kill : public AVP_Move_Melee_GenericPuppeteer_Success
{
public:
	AVP_Alien_Move_Melee_StealthKill_Predator_Kill(Asura_Movement_System& xParentSystem);

	static Asura_Hash_ID GetStaticHash() { return 0x37F184AB; } // Asura_GetHashID("AVP_Alien_Move_Melee_StealthKill_Predator_Kill")); }

private:
	typedef AVP_Move_Melee_GenericPuppeteer_Success PARENT;
};

class AVP_Alien_Move_Melee_StealthKill_Predator_Countered : public AVP_Move_Melee_GenericPuppeteer_Countered
{
public:
	AVP_Alien_Move_Melee_StealthKill_Predator_Countered(Asura_Movement_System& xParentSystem);

	static Asura_Hash_ID GetStaticHash() { return 0x2D65526E; } // Asura_GetHashID("AVP_Alien_Move_Melee_StealthKill_Predator_Countered")); }

private:
	typedef AVP_Move_Melee_GenericPuppeteer_Countered PARENT;
};


// injured alien attack

class AVP_Alien_Move_Melee_2Arms_Injured_Human_Start : public AVP_Move_Melee_GenericPuppeteer_Start
{
public:
	AVP_Alien_Move_Melee_2Arms_Injured_Human_Start(Asura_Movement_System& xParentSystem);

	static Asura_Hash_ID GetStaticHash() { return 0x3f49575f; } //"AVP_Alien_Move_Melee_2Arms_Injured_Human_Start"

protected:
	virtual bool ShouldStart() const;
	virtual bool Start(const Asura_Msg_Move* pxStartMsg);

private:
	typedef AVP_Move_Melee_GenericPuppeteer_Start PARENT;
	Asura_MoveData_OrientationInterpolation m_xOrientationInterpolationData;
};

class AVP_Alien_Move_Melee_2Arms_Injured_Human_Kill : public AVP_Move_Melee_GenericPuppeteer_Success
{
public:
	AVP_Alien_Move_Melee_2Arms_Injured_Human_Kill(Asura_Movement_System& xParentSystem);

	static Asura_Hash_ID GetStaticHash() { return 0x0206d4c1; } //"AVP_Alien_Move_Melee_2Arms_Injured_Human_Kill"

private:
	typedef AVP_Move_Melee_GenericPuppeteer_Success PARENT;
};

class AVP_Alien_Move_Melee_2Arms_Injured_Human_Countered : public AVP_Move_Melee_GenericPuppeteer_Countered
{
public:
	AVP_Alien_Move_Melee_2Arms_Injured_Human_Countered(Asura_Movement_System& xParentSystem);

	static Asura_Hash_ID GetStaticHash() { return 0x11aca018; } //"AVP_Alien_Move_Melee_2Arms_Injured_Human_Countered"

private:
	typedef AVP_Move_Melee_GenericPuppeteer_Countered PARENT;
};


class AVP_Alien_Move_Melee_2Arms_Injured_Predator_Start : public AVP_Move_Melee_GenericPuppeteer_Start
{
public:
	AVP_Alien_Move_Melee_2Arms_Injured_Predator_Start(Asura_Movement_System& xParentSystem);

	static Asura_Hash_ID GetStaticHash() { return 0x318bb22b; } //"AVP_Alien_Move_Melee_2Arms_Injured_Predator_Start"

protected:
	virtual bool ShouldStart() const;
	virtual bool Start(const Asura_Msg_Move* pxStartMsg);

private:
	typedef AVP_Move_Melee_GenericPuppeteer_Start PARENT;
	Asura_MoveData_OrientationInterpolation m_xOrientationInterpolationData;
};

class AVP_Alien_Move_Melee_2Arms_Injured_Predator_Kill : public AVP_Move_Melee_GenericPuppeteer_Success
{
public:
	AVP_Alien_Move_Melee_2Arms_Injured_Predator_Kill(Asura_Movement_System& xParentSystem);

	static Asura_Hash_ID GetStaticHash() { return 0x4be7f075; } //"AVP_Alien_Move_Melee_2Arms_Injured_Predator_Kill"

private:
	typedef AVP_Move_Melee_GenericPuppeteer_Success PARENT;
};

class AVP_Alien_Move_Melee_2Arms_Injured_Predator_Countered : public AVP_Move_Melee_GenericPuppeteer_Countered
{
public:
	AVP_Alien_Move_Melee_2Arms_Injured_Predator_Countered(Asura_Movement_System& xParentSystem);

	static Asura_Hash_ID GetStaticHash() { return 0x126cb4e4; } //"AVP_Alien_Move_Melee_2Arms_Injured_Predator_Countered"

private:
	typedef AVP_Move_Melee_GenericPuppeteer_Countered PARENT;
};

// pounce grapple

class AVP_Alien_Move_Melee_JumpToGrappleHuman_Start : public AVP_Move_Melee_GenericAttack_Start
{
public:
	AVP_Alien_Move_Melee_JumpToGrappleHuman_Start(Asura_Movement_System& xParentSystem, Asura_Hash_ID uFirstPersonBlueprintHash, Asura_Hash_ID uThirdPersonBlueprintHash);

	static Asura_Hash_ID GetStaticHash() { return 0xc3a2e5c7; } //"AVP_Alien_Move_Melee_JumpToGrappleHuman_Start"

private:

	virtual bool Start(const Asura_Msg_Move* pxStartMsg);
	bool CalculateVelocity(const float fTimeStep, Asura_AVector3_OutParam xVelocity) const;

	Asura_MoveData_OrientationInterpolation m_xOrientationInterpolationData;
	// Asura_MoveData_PositionInterpolation m_xPositionInterpolationData;
	Asura_Guid m_uTargetGuid;
	mutable float m_fAnimationTime;

	typedef AVP_Move_Melee_GenericAttack_Start PARENT;
};

class AVP_Alien_Move_Melee_JumpToGrappleHuman_Return_Hit : public AVP_Move_Melee_GenericAttack_Return_Hit
{
public:
	AVP_Alien_Move_Melee_JumpToGrappleHuman_Return_Hit(Asura_Movement_System& xParentSystem, Asura_Hash_ID uFirstPersonBlueprintHash, Asura_Hash_ID uThirdPersonBlueprintHash);

	virtual bool ShouldStart() const;

	static Asura_Hash_ID GetStaticHash() { return 0xfde6ddbf; } //"AVP_Alien_Move_Melee_JumpToGrappleHuman_Return_Hit"

private:
	typedef AVP_Move_Melee_GenericAttack_Return_Hit PARENT;
};

class AVP_Alien_Move_Melee_JumpToGrappleHuman_Return_Countered : public AVP_Move_Melee_GenericAttack_Return_Countered
{
public:
	AVP_Alien_Move_Melee_JumpToGrappleHuman_Return_Countered(Asura_Movement_System& xParentSystem, Asura_Hash_ID uFirstPersonBlueprintHash, Asura_Hash_ID uThirdPersonBlueprintHash);
	static Asura_Hash_ID GetStaticHash() { return 0x3371ccc7; } //"AVP_Alien_Move_Melee_JumpToGrappleHuman_Return_Countered" 

private:
	typedef AVP_Move_Melee_GenericAttack_Return_Countered PARENT;
};

class AVP_Alien_Move_Melee_JumpToGrappleHuman_Return_Miss : public AVP_Move_Melee_GenericAttack_Return_Miss
{
public:
	AVP_Alien_Move_Melee_JumpToGrappleHuman_Return_Miss(Asura_Movement_System& xParentSystem, Asura_Hash_ID uFirstPersonBlueprintHash, Asura_Hash_ID uThirdPersonBlueprintHash);

	static Asura_Hash_ID GetStaticHash() { return 0xbef72050; } //"AVP_Alien_Move_Melee_JumpToGrappleHuman_Return_Miss"

private:
	typedef AVP_Move_Melee_GenericAttack_Return_Miss PARENT;
};

class AVP_Alien_Move_Melee_MarineGrapple_Start : public AVP_Move_Melee_GenericPuppeteer_Start
{
public:
	AVP_Alien_Move_Melee_MarineGrapple_Start(Asura_Movement_System& xParentSystem);

	static Asura_Hash_ID GetStaticHash() { return 0x96629813; } //"AVP_Alien_Move_Melee_MarineGrapple_Start"

private:
	typedef AVP_Move_Melee_GenericPuppeteer_Start PARENT;
};

class AVP_Alien_Move_Melee_MarineGrapple_Kill : public AVP_Move_Melee_GenericPuppeteer_Success
{
public:
	AVP_Alien_Move_Melee_MarineGrapple_Kill(Asura_Movement_System& xParentSystem);

	static Asura_Hash_ID GetStaticHash() { return 0x4f28ad8d; } //"AVP_Alien_Move_Melee_MarineGrapple_Kill"

private:
	typedef AVP_Move_Melee_GenericPuppeteer_Success PARENT;
};

class AVP_Alien_Move_Melee_MarineGrapple_Countered : public AVP_Move_Melee_GenericPuppeteer_Countered
{
public:
	AVP_Alien_Move_Melee_MarineGrapple_Countered(Asura_Movement_System& xParentSystem);

	static Asura_Hash_ID GetStaticHash() { return 0xc40e66cc; } //"AVP_Alien_Move_Melee_MarineGrapple_Countered"

private:
	typedef AVP_Move_Melee_GenericPuppeteer_Countered PARENT;
};

#endif   // ifndef __AVP_ALIEN_MOVES_MELEE_H__
