text: ﻿//========= Copyright Valve Corporation, All rights reserved. ============//
  //
  // Purpose: 
  //
  //=============================================================================//
  #include "cbase.h"
  #include "ai_basenpc.h"
  #include "animation.h"
  #include "vstdlib/random.h"
  #include "h_cycler.h"
  
  //-----------------------------------------------------------------------------
  // Purpose: 
  //-----------------------------------------------------------------------------
  class CCycler_TF2Commando : public CCycler
  {
  	DECLARE_CLASS( CCycler_TF2Commando, CCycler );
  public:
  	DECLARE_DATADESC();
  	DECLARE_SERVERCLASS();
  
  	virtual void Spawn( void );
  	virtual void Think( void );
  
  	// Inputs
  	void	InputRaiseShield( inputdata_t &inputdata );
  	void	InputLowerShield( inputdata_t &inputdata );
  
  private:
  	CNetworkVar( bool, m_bShieldActive );
  	CNetworkVar( float, m_flShieldRaiseTime );
  	CNetworkVar( float, m_flShieldLowerTime );
  };
  
  IMPLEMENT_SERVERCLASS_ST(CCycler_TF2Commando, DT_Cycler_TF2Commando)
  	SendPropInt	(SENDINFO(m_bShieldActive),	1, SPROP_UNSIGNED ),
  	SendPropFloat(SENDINFO(m_flShieldRaiseTime), 0,	SPROP_NOSCALE ),
  	SendPropFloat(SENDINFO(m_flShieldLowerTime), 0,	SPROP_NOSCALE ),
  END_SEND_TABLE();
  
  LINK_ENTITY_TO_CLASS( cycler_tf2commando, CCycler_TF2Commando );
  LINK_ENTITY_TO_CLASS( cycler_aliencommando, CCycler_TF2Commando );
  
  BEGIN_DATADESC( CCycler_TF2Commando )
  
  	// Inputs
  	DEFINE_INPUTFUNC( FIELD_VOID, "RaiseShield", InputRaiseShield ),
  	DEFINE_INPUTFUNC( FIELD_VOID, "LowerShield", InputLowerShield ),
  
  END_DATADESC()
  
  //-----------------------------------------------------------------------------
  // Purpose: 
  //-----------------------------------------------------------------------------
  void CCycler_TF2Commando::Spawn( void )
  {
  	if (GetTeamNumber() == 1)
  	{
  		GenericCyclerSpawn( "models/player/human_commando.mdl", Vector(-16, -16, 0), Vector(16, 16, 72) ); 
  	}
  	else
  	{
  		GenericCyclerSpawn( "models/player/alien_commando.mdl", Vector(-16, -16, 0), Vector(16, 16, 72) ); 
  	}
  
  	m_bShieldActive = false;
  
  	BaseClass::Spawn();
  }
  
  //-----------------------------------------------------------------------------
  // Purpose: 
  //-----------------------------------------------------------------------------
  void CCycler_TF2Commando::Think( void )
  {
  	// Change sequence
  	if ( IsSequenceFinished() )
  	{
  		// Raising our shield?
  		if ( m_bShieldActive )
  		{
  			ResetSequence( LookupSequence( "ShieldUpIdle" ) );
  		}
  		else if ( GetSequence() == LookupSequence( "ShieldDown" ) )
  		{
  			ResetSequence( LookupSequence( "Idle" ) );
  		}
  	}
  
  	SetNextThink( gpGlobals->curtime + 0.1f );
  
  	if (m_animate)
  	{
  		StudioFrameAdvance ( );
  	}
  }
  
  //-----------------------------------------------------------------------------
  // Purpose: Input that raises the cycler's shield
  //-----------------------------------------------------------------------------
  void CCycler_TF2Commando::InputRaiseShield( inputdata_t &inputdata )
  {
  	if (m_animate)
  	{
  		m_bShieldActive = true;
  		ResetSequence( LookupSequence( "ShieldUp" ) );
  		m_flShieldRaiseTime = gpGlobals->curtime;
  	}
  }
  
  //-----------------------------------------------------------------------------
  // Purpose: Input that lowers the cycler's shield
  //-----------------------------------------------------------------------------
  void CCycler_TF2Commando::InputLowerShield( inputdata_t &inputdata )
  {
  	if (m_animate)
  	{
  		m_bShieldActive = false;
  		ResetSequence( LookupSequence( "ShieldDown" ) );
  		m_flShieldLowerTime = gpGlobals->curtime;
  	}
  }
  
  