//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose: 
//
// $NoKeywords: $
//
//=============================================================================//
#include "cbase.h"

// memdbgon must be the last include file in a .cpp file!!!
#include "tier0/memdbgon.h"

// -------------------------------------------------------------------------------- //
// An entity used to test traceline
// -------------------------------------------------------------------------------- //

class CTestTraceline : public CPointEntity
{
public:
	DECLARE_CLASS( CTestTraceline, CPointEntity );

	void	Spawn( void );
	int  	UpdateTransmitState();

	DECLARE_SERVERCLASS();
	DECLARE_DATADESC();

private:
	void	Spin( void );
};
							  

// This table encodes the CBaseEntity data.
IMPLEMENT_SERVERCLASS_ST_NOBASE(CTestTraceline, DT_TestTraceline)
	SendPropInt		(SENDINFO(m_clrRender),	32, SPROP_UNSIGNED ),
	SendPropVector (SENDINFO(m_vecOrigin), 19, 0,	MIN_COORD_INTEGER, MAX_COORD_INTEGER),
	SendPropFloat	(SENDINFO_VECTORELEM(m_angRotation, 0), 19, 0,	MIN_COORD_INTEGER, MAX_COORD_INTEGER),
	SendPropFloat	(SENDINFO_VECTORELEM(m_angRotation, 1), 19, 0,	MIN_COORD_INTEGER, MAX_COORD_INTEGER),
	SendPropFloat	(SENDINFO_VECTORELEM(m_angRotation, 2), 19, 0,	MIN_COORD_INTEGER, MAX_COORD_INTEGER),
	SendPropEHandle (SENDINFO_NAME(m_hMoveParent, moveparent)),
END_SEND_TABLE()

LINK_ENTITY_TO_CLASS( test_traceline, CTestTraceline );

BEGIN_DATADESC( CTestTraceline )

	// Function Pointers
	DEFINE_FUNCTION( Spin ),

END_DATADESC()


void	CTestTraceline::Spawn( void )
{
	SetRenderColor( 255, 255, 255, 255 );
	SetNextThink( gpGlobals->curtime );

	SetThink( &CTestTraceline::Spin );
}

void	CTestTraceline::Spin( void )
{
	static ConVar	traceline_spin( "traceline_spin","1" );

	if (traceline_spin.GetInt())
	{
		float s = sin( gpGlobals->curtime );
		QAngle angles = GetLocalAngles();

		angles[0] = 180.0 * 0.5 * (s * s * s + 1.0f) + 90;
		angles[1] = gpGlobals->curtime * 10;
		   
		SetLocalAngles( angles );

	}
	SetNextThink( gpGlobals->curtime );
}

int CTestTraceline::UpdateTransmitState()
{
	return SetTransmitState( FL_EDICT_ALWAYS );
}