//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose:		Projectile shot by mortar synth
//
// $Workfile:     $
// $Date:         $
//
//-----------------------------------------------------------------------------
// $Log: $
//
// $NoKeywords: $
//=============================================================================//

#ifndef	GRENADEBEAM_H
#define	GRENADEBEAM_H

#include "basegrenade_shared.h"

#define GRENADEBEAM_MAXBEAMS 2
#define GRENADEBEAM_MAXHITS  GRENADEBEAM_MAXBEAMS-1

class CGrenadeBeam;
class CBeam;

// End of the grenade beam
class CGrenadeBeamChaser : public CBaseAnimating
{
public:
	DECLARE_CLASS( CGrenadeBeamChaser, CBaseAnimating );
	DECLARE_DATADESC();

	static CGrenadeBeamChaser* ChaserCreate( CGrenadeBeam *pTarget );

	void			Spawn( void );
	void 			ChaserThink();

	CGrenadeBeam*	m_pTarget;
};

class CGrenadeBeam : public CBaseGrenade
{
public:
	DECLARE_CLASS( CGrenadeBeam, CBaseGrenade );
	DECLARE_DATADESC();

	static CGrenadeBeam* Create( CBaseEntity* pOwner, const Vector &vStart);

public:
	void		Spawn( void );
	void		Precache( void );
	void		Format( color32 clrColor, float flWidth);
	void 		GrenadeBeamTouch( CBaseEntity *pOther );
	void 		KillBeam();
	void		CreateBeams(void);
	void		UpdateBeams(void);
	//void		DebugBeams(void);
	void		GetChaserTargetPos(Vector *vPosition);
	void		GetNextTargetPos(Vector *vPosition);
	int			UpdateTransmitState(void);
	void		Shoot(Vector vDirection, float flSpeed, float flLifetime, float flLag, float flDamage );

	Vector		m_vLaunchPos;
	float		m_flBeamWidth;
	float		m_flBeamSpeed;
	float		m_flBeamLag;
	float		m_flLaunchTime;
	float		m_flLastTouchTime;
	EHANDLE		m_hBeamChaser;
	int			m_nNumHits;
	Vector		m_pHitLocation[GRENADEBEAM_MAXHITS];
	CBeam*		m_pBeam[GRENADEBEAM_MAXBEAMS];
};

#endif	//GRENADEBEAM_H