//======== (C) Copyright 2002 Charles G. Cleveland All rights reserved. =========
//
// The copyright to the contents herein is the property of Charles G. Cleveland.
// The contents may be used and/or copied only with the written permission of
// Charles G. Cleveland, or in accordance with the terms and conditions stipulated in
// the agreement/contract under which the contents have been supplied.
//
// Purpose: 
//
// $Workfile: AvHAlienAbilities.h $
// $Date: 2002/09/23 22:06:33 $
//
//-------------------------------------------------------------------------------
// $Log: AvHAlienAbilities.h,v $
// Revision 1.9  2002/09/23 22:06:33  Flayra
// - Updated anims for new view model artwork
//
// Revision 1.8  2002/08/09 00:52:57  Flayra
// - Speed up deploying of charge and leap, removed old hard-coded number
//
// Revision 1.7  2002/07/26 23:03:08  Flayra
// - New artwork
//
// Revision 1.6  2002/07/08 16:42:38  Flayra
// - Refactoring for cheat protection, moved blinking in here from separate class
//
// Revision 1.5  2002/06/25 17:25:56  Flayra
// - Regular update for leap and charge
//
// Revision 1.4  2002/06/03 16:20:11  Flayra
// - Proper anims for alien abilities
//
// Revision 1.3  2002/05/23 02:34:00  Flayra
// - Post-crash checkin.  Restored @Backup from around 4/16.  Contains changes for last four weeks of development.
//
//===============================================================================
#ifndef AVHALIENABILITIES_H
#define AVHALIENABILITIES_H

#include "util/nowarnings.h"
#include "dlls/weapons.h"
#include "mod/AvHAlienWeapons.h" 

class AvHAlienAbilityWeapon : public AvHAlienWeapon
{
public:
	virtual AvHMessageID		GetAbilityImpulse() const = 0;
	int							mAbilityEvent;
};

class AvHLeap : public AvHAlienAbilityWeapon 
{ 
public: 
				    AvHLeap()
				        { this->Init(); } 

    virtual BOOL    Deploy();

	virtual int		GetBarrelLength() const;

	virtual int		GetDeployAnimation() const;

	virtual float	GetDeployTime() const;
		
	virtual bool	GetFiresUnderwater() const;

	virtual int		GetIdleAnimation() const;
	
	AvHMessageID	GetAbilityImpulse() const;
	
	virtual bool	GetIsDroppable() const;

	int				GetItemInfo(ItemInfo *p) const;

	virtual int		GetShootAnimation() const;

	virtual int		iItemSlot(void);

	virtual void	Precache(void);

	virtual void	Spawn();

	virtual bool	UsesAmmo(void) const;
	virtual BOOL	GetTakesEnergy() { return FALSE; }

protected: 
    virtual void    FireProjectiles(void);
	
    virtual void	Init();
};

class AvHBlinkGun : public AvHAlienAbilityWeapon
{ 
public: 
	AvHBlinkGun()
	{ this->Init(); } 
	
    virtual BOOL    Deploy();
	
	AvHMessageID	GetAbilityImpulse() const;
	
	virtual int		GetBarrelLength() const;

    virtual float	GetRateOfFire() const;
	
	virtual int		GetDeployAnimation() const;
	
	virtual bool	GetFiresUnderwater() const;

	virtual int		GetIdleAnimation() const;
	
	virtual bool	GetIsDroppable() const;
	
	int				GetItemInfo(ItemInfo *p) const;
	
	virtual bool	GetMustPressTriggerForEachShot() const;
	
	virtual int		GetShootAnimation() const;
	
	virtual char*	GetViewModel() const;
	
	virtual int		iItemSlot(void);
	
	virtual void	ItemPostFrame(void);
	
	virtual void	Precache(void);
	
	virtual void	Spawn();
	
	virtual bool	UsesAmmo(void) const;
	virtual BOOL	GetTakesEnergy() { return FALSE; }
protected: 
    virtual void    FireProjectiles(void);
	
    virtual void	Init();
	
	float			mTimeOfNextBlinkEvent;
	
	int				mBlinkSuccessEvent;
};

class AvHCharge : public AvHAlienAbilityWeapon 
{ 
public: 
					AvHCharge()
						{ this->Init(); } 
	
    virtual BOOL    Deploy();
	
	AvHMessageID	GetAbilityImpulse() const;
	
	virtual int		GetBarrelLength() const;
	
	virtual int		GetDeployAnimation() const;

	virtual float	GetDeployTime() const;
		
	virtual bool	GetFiresUnderwater() const;
	
	virtual int		GetIdleAnimation() const;
		
	virtual bool	GetIsDroppable() const;
	
	int				GetItemInfo(ItemInfo *p) const;
	
	virtual int		GetShootAnimation() const;
	
	virtual int		iItemSlot(void);
	
	virtual void	Precache(void);
	
	virtual void	Spawn();
	
	virtual bool	UsesAmmo(void) const;
    	
    virtual float	GetRateOfFire() const;
	
protected: 
    virtual void    FireProjectiles(void);
	
    virtual void	Init();
};



#endif