////////////////////////////////////////////////////////////////
//
// File:		AVP_Human_MeleeCounter_System.h
// Author:		Chris Wallace
// Date:		23-Jan-2008
//
// Copyright (C) 2008 Rebellion, All Rights Reserved.
//
////////////////////////////////////////////////////////////////

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

#ifndef __AVP_HUMAN_MELEECOUNTER_SYSTEM_H__
#define __AVP_HUMAN_MELEECOUNTER_SYSTEM_H__

///////////////////////////////////////////////
// #includes
///////////////////////////////////////////////

#include "Actor/Vertebrates/AVP_Vertebrate_MeleeCounter_System.h"

///////////////////////////////////////////////
// #defines
///////////////////////////////////////////////

class AVP_ServerActor_Human;

/////////////////////////////////////////////////////////////////////
//
// Class		:	AVP_Vertebrate_MeleeCounter_System
//
// Description	:	Stored on the server, hold a queue of requested melee moves
//				:	When a melee reaches the front of the queue the status of the 
//				:	actor is checked and a relevant move is played.
//				:	If the move fails (misses, is countered) then the queue is emptied.
//
//////////////////////////////////////////////////////////////////////

enum AVP_HUMAN_MELEEATTACK_TYPE
{
	AVP_HUMAN_MELEEATTACK_TYPE_RETALIATION = NUM_AVP_MELEEATTACK_TYPES,
	NUM_AVP_HUMAN_MELEEATTACK_TYPES,
};

class AVP_Human_MeleeCounter_System : public AVP_Vertebrate_MeleeCounter_System
{
public: 
	AVP_Human_MeleeCounter_System(AVP_ServerActor_Human& xOwner);
	virtual ~AVP_Human_MeleeCounter_System() {}

	//virtual bool HandleMessage( const Asura_Message* pxMessage );
	//virtual void Update( void );

	//virtual float GetAttackDamage() const { return 0; }

protected:

	virtual Asura_Hash_ID GetMeleeMoveHash(u_int uType) const;
	virtual float GetAttackImpulseStrength() const;

	// Go off and get a move hash relevant to the species and weapon
	//virtual Asura_Hash_ID GetMeleeMoveHash(u_int uType) const;
	//virtual u_int PickMeleeMoveVariation(Asura_Hash_ID uMoveHash) const; // At this time, the human melee doesn't need this.

	// Functions for counters by each species, split up to keep the code clearer. Uses the move we're currently doing to pick the correct counter for that species.
	//virtual bool GetCanCounter_AlienCounter(const AVP_ServerEntity_Actor& xEnemy, const u_int uQueuedCounterType, Asura_Hash_ID& uMoveHash, u_int& uNewAttackType, bool& bMakeEnemyIntoPuppet, Asura_Hash_ID& uGrappleSetBlueprintParam) const;
	//virtual bool GetCanCounter_HumanCounter(const AVP_ServerEntity_Actor& xEnemy, const u_int uQueuedCounterType, Asura_Hash_ID& uMoveHash, u_int& uNewAttackType, bool& bMakeEnemyIntoPuppet, Asura_Hash_ID& uGrappleSetBlueprintParam) const;
	//virtual bool GetCanCounter_PredatorCounter(const AVP_ServerEntity_Actor& xEnemy, const u_int uQueuedCounterType, Asura_Hash_ID& uMoveHash, u_int& uNewAttackType, bool& bMakeEnemyIntoPuppet, Asura_Hash_ID& uGrappleSetBlueprintParam) const;

private:
	typedef AVP_Vertebrate_MeleeCounter_System PARENT;
};

#endif //__AVP_HUMAN_MELEECOUNTER_SYSTEM_H__

/// End of file. ///
