//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose: 
//
// $NoKeywords: $
//
//=============================================================================//
#ifndef NPC_ICHTHYOSAUR_H
#define NPC_ICHTHYOSAUR_H


#include "hl1_ai_basenpc.h"

#define SEARCH_RETRY	16

#define ICHTHYOSAUR_SPEED 150

#define EYE_MAD		0
#define EYE_BASE	1
#define EYE_CLOSED	2
#define EYE_BACK	3
#define EYE_LOOK	4


//
// CNPC_Ichthyosaur
//

class CNPC_Ichthyosaur : public CHL1BaseNPC
{
	DECLARE_CLASS( CNPC_Ichthyosaur, CHL1BaseNPC );
public:

	void	Precache( void );
	void	Spawn( void );
	Class_T Classify ( void );
	void	NPCThink ( void );
	void	Swim ( void );
	void	StartTask(const Task_t *pTask);
	void	RunTask( const Task_t *pTask );
	int		RangeAttack1Conditions( float flDot, float flDist );
	int		MeleeAttack1Conditions ( float flDot, float flDist );
	void	BiteTouch( CBaseEntity *pOther );
	void	HandleAnimEvent( animevent_t *pEvent );
	int		TranslateSchedule( int scheduleType );
	int		SelectSchedule();
	virtual	bool FVisible ( CBaseEntity *pEntity, int traceMask = MASK_BLOCKLOS, CBaseEntity **ppBlocker = NULL );

	Vector  DoProbe( const Vector &Probe );
	bool    ProbeZ( const Vector &position, const Vector &probe, float *pFraction);

	float	GetGroundSpeed ( void );

	bool	OverrideMove( float flInterval );
	void	MoveExecute_Alive(float flInterval);

	void InputStartCombat( inputdata_t &input );
	void InputEndCombat( inputdata_t &input );

	virtual void	IdleSound( void );
	virtual void	AlertSound( void );
	virtual void	DeathSound( const CTakeDamageInfo &info );
	virtual void	PainSound( const CTakeDamageInfo &info );

	void	AttackSound( void );
	void	BiteSound( void );

	virtual void GatherEnemyConditions( CBaseEntity *pEnemy );

	DEFINE_CUSTOM_AI;
	DECLARE_DATADESC();

private:
	Vector m_SaveVelocity;
	float m_idealDist;

	float m_flBlink;

	float m_flEnemyTouched;
	bool  m_bOnAttack;

	float m_flMaxSpeed;
	float m_flMinSpeed;
	float m_flMaxDist;

	float m_flNextAlert;
	float m_flLastAttackSound;

	//Save the info from that run
	Vector m_vecLastMoveTarget;
	bool m_bHasMoveTarget;

	float m_flFlyingSpeed;	
};


#endif //NPC_ICHTHYOSAUR_H