//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose: 
//
// $NoKeywords: $
//=============================================================================//

#ifndef SCRIPTEDTARGET_H
#define SCRIPTEDTARGET_H
#ifdef _WIN32
#pragma once
#endif

#ifndef SCRIPTEVENT_H
#include "scriptevent.h"
#endif

#include "ai_basenpc.h"

class CScriptedTarget : public CAI_BaseNPC
{
	DECLARE_CLASS( CScriptedTarget, CAI_BaseNPC );
public:
	DECLARE_DATADESC();

	void				Spawn( void );
	virtual int			ObjectCaps( void ) { return (BaseClass::ObjectCaps() & ~FCAP_ACROSS_TRANSITION); }


	void				ScriptThink( void );
	CBaseEntity*		FindEntity( void );

	void TurnOn(void);
	void TurnOff(void);

	// Input handlers
	void InputEnable( inputdata_t &inputdata );
	void InputDisable( inputdata_t &inputdata );

	CScriptedTarget*	NextScriptedTarget(void);
	float				MoveSpeed(void)			{ return m_nMoveSpeed; };
	float				EffectDuration(void)	{ return m_flEffectDuration; };

	int					DrawDebugTextOverlays(void);
	void				DrawDebugGeometryOverlays(void);
	float				PercentComplete(void);

	Vector				m_vLastPosition;	// Last position that's been reached
	
private:
	int					m_iDisabled;		// Initial state
	string_t			m_iszEntity;		// entity that is wanted for this script
	float				m_flRadius;			// range to search

	int					m_nMoveSpeed;		// How fast do I burn from target to target
	float				m_flPauseDuration;	// How long to pause at this target
	float				m_flPauseDoneTime;	// When is pause over
	float				m_flEffectDuration;	// How long should any associated effect last?

	COutputEvent		m_AtTarget;			// Fired when scripted target has been reached
	COutputEvent		m_LeaveTarget;		// Fired when scripted target is left
};

#endif // SCRIPTEDTARGET_H