//========= Copyright © 1996-2005, Valve Corporation, All rights reserved. ============//
//
// Purpose: Hooks and classes for the support of humanoid NPCs with 
//			groovy facial animation capabilities, aka, "Actors"
//
//=============================================================================//

#ifndef AI_INTEREST_TARGET_H
#define AI_INTEREST_TARGET_H

#if defined( _WIN32 )
#pragma once
#endif

#undef MINMAX_H
#include "minmax.h" // max() define

//-----------------------------------------------------------------------------
// CAI_BaseActor
//
// Purpose: The base class for all facially expressive NPCS.
//
//-----------------------------------------------------------------------------

class CAI_InterestTarget_t
{
public:
	enum CAI_InterestTarget_e
	{
		LOOKAT_ENTITY = 0,
		LOOKAT_POSITION, 
		LOOKAT_BOTH
	};

public:
	bool			IsThis( CBaseEntity *pThis );
	const Vector	&GetPosition( void );
	bool			IsActive( void );
	float			Interest( void );

public:
	CAI_InterestTarget_e	m_eType; // ????

	EHANDLE		m_hTarget;
	Vector		m_vecPosition;
	float		m_flStartTime;
	float		m_flEndTime;
	float		m_flRamp;
	float		m_flInterest;

	DECLARE_SIMPLE_DATADESC();
};


class CAI_InterestTarget : public CUtlVector<CAI_InterestTarget_t>
{
public:
	void Add( CBaseEntity *pTarget, float flImportance, float flDuration, float flRamp );
	void Add( const Vector &vecPosition, float flImportance, float flDuration, float flRamp );
	void Add( CBaseEntity *pTarget, const Vector &vecPosition, float flImportance, float flDuration, float flRamp );
	int Find( CBaseEntity *pTarget )
	{
		int i;
		for ( i = 0; i < Count(); i++)
		{
			if (pTarget == (*this)[i].m_hTarget)
				return i;
		}
		return InvalidIndex();
	}
	
	void Cleanup( void )
	{
		int i;
		for (i = Count() - 1; i >= 0; i--)
		{
			if (!Element(i).IsActive())
			{
				Remove( i );
			}
		}
	};

private:
	void Add( CAI_InterestTarget_t::CAI_InterestTarget_e type, CBaseEntity *pTarget, const Vector &vecPosition, float flImportance, float flDuration, float flRamp );
};


//-----------------------------------------------------------------------------
#endif // AI_INTEREST_TARGET_H
