//-----------------------------------------------------------------------------
// Purpose: 
//-----------------------------------------------------------------------------
bool CWeaponCombatShield::Holster( CBaseCombatWeapon *pSwitchingTo )
{
	CBaseTFPlayer *player = ToBaseTFPlayer( GetOwner() );
	if ( player )
	{
		player->SetBlocking( false );
		player->SetParrying( false );

		if ( m_iShieldState != SS_DOWN && 
			 m_iShieldState != SS_UNAVAILABLE )
		{
			SetShieldState( SS_LOWERING );
		}
	}

	return true;
}
//-----------------------------------------------------------------------------
// Purpose: 
//-----------------------------------------------------------------------------
void CWeaponCombatShield::SetShieldState( int iShieldState )
{
	CBaseTFPlayer *pOwner = ToBaseTFPlayer( GetOwner() );
	if ( !pOwner )
		return;

	switch (iShieldState )
	{
	default:
	case SS_DOWN:
		pOwner->SetBlocking( false );
		m_flShieldUpStartTime = 0;
		m_flShieldParryEndTime = 0;
		m_flShieldUnavailableEndTime = 0;
		m_flShieldRaisedTime = 0.0f;
		m_flShieldLoweredTime = 0.0f;
		break;

	case SS_UP:
		SendWeaponAnim( ACT_VM_FIDGET );
		pOwner->SetBlocking( true );
		m_flShieldDownStartTime = 0.0f;
		m_flShieldParryEndTime = 0;
		m_flShieldUnavailableEndTime = 0;
		m_flShieldRaisedTime = 0.0f;
		m_flShieldLoweredTime = 0.0f;
		break;

	case SS_PARRYING:
		pOwner->SetBlocking( false );
		pOwner->SetParrying( true );
		m_flShieldParryEndTime = gpGlobals->curtime + PARRY_OPPORTUNITY_LENGTH;
		m_flShieldParrySwingEndTime = gpGlobals->curtime + 1.0f;	// a hack to make it look ok
		m_flShieldUnavailableEndTime = gpGlobals->curtime + SequenceDuration();
		m_flNextPrimaryAttack = m_flShieldUnavailableEndTime;
		m_flShieldRaisedTime = 0.0f;
		m_flShieldLoweredTime = 0.0f;
		break;

	case SS_PARRYING_FINISH_SWING:
		pOwner->SetBlocking( false );
		pOwner->SetParrying( false );
		break;

	case SS_UNAVAILABLE:
		SendWeaponAnim( ACT_VM_HAULBACK );
		pOwner->SetBlocking( false );
		pOwner->SetParrying( false );
		break;

	case SS_RAISING:
		{
			pOwner->SetBlocking( false );
			pOwner->SetParrying( false );
			m_flShieldRaisedTime = gpGlobals->curtime + SequenceDuration();
			m_flShieldUpStartTime = gpGlobals->curtime;
		}
		break;
	case SS_LOWERING:
		{
			SendWeaponAnim( ACT_VM_HAULBACK );
			pOwner->SetBlocking( false );
			pOwner->SetParrying( false );
			m_flShieldLoweredTime = gpGlobals->curtime + SequenceDuration();
			m_flShieldDownStartTime = gpGlobals->curtime;
		}
		break;
	};

	m_iShieldState = iShieldState;
}