
///////////////////////////////////////////////////////////////////////////////
//
// File   : AVP_InventoryWeapon_PlasmaCaster.h
// Author : Chris Wallace
// Date   : 15-Jan-2009
//
// Copyright (C) 2009 Rebellion, All Rights Reserved.
//
///////////////////////////////////////////////////////////////////////////////

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

#ifndef __AVP_INVENTORYWEAPON_PLASMACASTER_H__
#define __AVP_INVENTORYWEAPON_PLASMACASTER_H__

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

#include "Inventory/Items/Weapons/AVP_InventoryWeapon_RangedWeapon.h"
#include "Inventory/Items/Weapons/AVP_RangedWeapon_SubType.h"
#include "Inventory/Groups/AVP_InventoryGroup_Weapons.h"

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

class Asura_Physics_Object;
class AVP_ClientActor_Vertebrate;
class AVP_ServerActor_Vertebrate;
class AVP_Predator_Tag;
class AVP_Predator_TagHandler;

#define AVP_MAX_LOCKING_ON_PFX 3

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

////////////////////////////////////////////////////////////////////////////////
// Class        : AVP_InventoryWeapon_PlasmaCaster
// Author       : Chris Wallace
// Date         : 15-Jan-2009
//
// Description  : Class to handle either client or server-side updating of the
//				  PlasmaCaster weapon.
////////////////////////////////////////////////////////////////////////////////

class AVP_InventoryWeapon_PlasmaCaster : public AVP_InventoryWeapon_RangedWeapon
{
public:

	AVP_InventoryWeapon_PlasmaCaster( AVP_Inventory_Group& xParentGroup, const Asura_Hash_ID uHash, const Asura_Hash_ID uBlueprintHash );

	virtual void	ProcessPlayerInput( const AVP_ClientEntity_Actor& xActor );
	virtual void	Use(void);
	virtual void	RemoveEnergyForChargedShot( const u_int uUsageType );
	virtual bool	IsPlayerIsStillFiring( const AVP_ClientEntity_Actor& xActor, int iSubType ) const;

	virtual void	ChargeClient( AVP_RangedWeapon_SubType* pxSubType );

	virtual void InitialiseFromBlueprint();

protected:

	virtual void	StopUsing(const u_int uUsageType);

private:
	typedef AVP_InventoryWeapon_RangedWeapon PARENT;

	AVP_InventoryWeapon_PlasmaCaster(void);
	AVP_InventoryWeapon_PlasmaCaster(const AVP_InventoryWeapon_PlasmaCaster& xOther);

	AVP_InventoryWeapon_PlasmaCaster&	operator=(const AVP_InventoryWeapon_PlasmaCaster& xOther);

	Asura_Hash_ID	m_uLockingOnPFXBlueprintHash;
	u_int			m_auLockOnPFXEffectID[3];

	void DoLockingOnPFXEffect();
	void StopLockingOnPFXEffect();
};   // End of class 'AVP_InventoryWeapon_PlasmaCaster'.


#endif   // ifndef __AVP_INVENTORYWEAPON_PLASMACASTER_H__


/// End of file. ///
