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

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


class CTFTeam;
class CBaseTFPlayer;


#include "order_events.h"


//-----------------------------------------------------------------------------
// Purpose: Datatable container class for orders
//-----------------------------------------------------------------------------
class COrder : public CBaseEntity
{
	DECLARE_CLASS( COrder, CBaseEntity );
public:
	DECLARE_SERVERCLASS();

					COrder();
	virtual	void	UpdateOnRemove( void );

	virtual int		UpdateTransmitState() { return SetTransmitState( FL_EDICT_FULLCHECK ); }
	virtual int 	ShouldTransmit( const CCheckTransmitInfo *pInfo );
	
	// This is called when removing the order.
	void			DetachFromPlayer();
	

// Overridables.
public:

	// Purpose: for updates on the order. Return true if the order should be removed.
	virtual bool	Update( void );
	virtual bool	UpdateOnEvent( COrderEvent_Base *pEvent );



public:

	CBaseTFPlayer	*GetOwner( void );
	CBaseEntity		*GetTargetEntity( void );
	int				GetType( void );

	void	SetOwner( CBaseTFPlayer *pPlayer );
	void	SetType( int iOrderType );
	void	SetTarget( CBaseEntity *pTarget );
	void	SetDistance( float flDistance );
	void	SetLifetime( float flLifetime );

public:
	// Sent via datatable
	CNetworkVar( int, m_iOrderType );
	float			m_flDistanceToRemove;

	// When the order goes away.
	double			m_flDieTime;

	// Personal order owner
	CHandle< CBaseTFPlayer >	m_hOwningPlayer;
	EHANDLE						m_hTarget;
	CNetworkVar( int, m_iTargetEntIndex );
};



//-----------------------------------------------------------------------------
// ORDER CREATION DATA
//-----------------------------------------------------------------------------
// Time between personal order updates
#define PERSONAL_ORDER_UPDATE_TIME			2.0

// KILL orders
#define ORDER_KILL_ENEMY_DISTANCE			2048				// Distance the enemy must be within for this player to receive this order

// HEAL orders
#define ORDER_HEAL_FRIENDLY_DISTANCE		2048				// Distance the friendly must be within this player to receive this order

#endif // ORDERS_H