/*
================

AI_Medic.h

================
*/
#include "AI_Tactical.h"

#ifndef __AI_MEDIC__
#define __AI_MEDIC__

class rvAIMedic : public rvAITactical {
public:

	CLASS_PROTOTYPE( rvAIMedic );

	rvAIMedic ( void );

	void				InitSpawnArgsVariables			( void );
	void				Spawn							( void );
	void				Think							( void );
	void				Save							( idSaveGame *savefile ) const;
	void				Restore							( idRestoreGame *savefile );
	
	virtual void		Show							( void );

	virtual void		TalkTo							( idActor *actor );

	virtual void		GetDebugInfo					( debugInfoProc_t proc, void* userData );

	virtual bool		IsTethered						( void ) const;

	virtual void		OnStateThreadClear				( const char *statename, int flags );

	virtual bool		Pain							( idEntity *inflictor, idEntity *attacker, int damage, const idVec3 &dir, int location );

	bool				isTech;

protected:
	virtual void		OnStartMoving					( void );

private:

	idEntityPtr<idPlayer> patient;
	bool				healing;
	int					lastPatientCheckTime;
	bool				emergencyOverride;

	bool				noAutoHeal;
	bool				stationary;
	bool				silent;
	bool				healObeyTether;
	int					healAmt;
	float				patientRange;
	float				buddyRange;
	float				enemyRange;

	int					curHealValue;
	int					maxHealValue;
	int					minHealValue;
	int					healedAmount;
	int					maxPatientValue;

	int					healDebounceInterval;
	int					healDebounceTime;

	bool				healDisabled;
	bool				wasAware;
	bool				wasIgnoreEnemies;

	void				SetHealValues					( idPlayer* player );
 	
	void				TakePatient						( idPlayer* pPatient );
	void				DropPatient						( void );
 	bool				CheckTakePatient				( idPlayer* actor );
 	bool				SituationAllowsPatient			( void );
 	bool				AvailableToTakePatient			( void );

	stateResult_t		State_Medic						( const stateParms_t& parms );
	
	void				Event_EnableHeal				( void );
	void				Event_DisableHeal				( void );
	void				Event_EnableMovement			( void );
	void				Event_DisableMovement			( void );

	rvScriptFuncUtility	mPostHealScript;		// script to run after completing a heal

	CLASS_STATES_PROTOTYPE ( rvAIMedic );
};

#endif /* !__AI_MEDIC__ */