//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose: Client's Support "weapon"
//
// $NoKeywords: $
//=============================================================================//
#include "cbase.h"
#include "weapon_twohandedcontainer.h"

//-----------------------------------------------------------------------------
// Purpose: Draws little viewmodel attachments
//-----------------------------------------------------------------------------
void C_WeaponTwoHandedContainer::ViewModelDrawn( C_BaseViewModel *pBaseViewModel )
{
	BaseClass::ViewModelDrawn( pBaseViewModel );

	if (pBaseViewModel->ViewModelIndex() != 0)
	{
		if ( m_hRightWeapon )
		{
			m_hRightWeapon->ViewModelDrawn(pBaseViewModel);
		}
	}
	else
	{
		if ( m_hLeftWeapon )
		{
			m_hLeftWeapon->ViewModelDrawn(pBaseViewModel);
		}
	}
}

//-----------------------------------------------------------------------------
// Purpose: 
//-----------------------------------------------------------------------------
bool C_WeaponTwoHandedContainer::OnFireEvent( C_BaseViewModel *pViewModel, const Vector& origin, 
											  const QAngle& angles, int event, const char *options )
{
	bool bRight = m_hRightWeapon->OnFireEvent( pViewModel, origin, angles, event, options );
	bool bLeft = m_hLeftWeapon->OnFireEvent( pViewModel, origin, angles, event, options );

	return ( bRight || bLeft );
}

//-----------------------------------------------------------------------------
// Purpose: 
//-----------------------------------------------------------------------------
void C_WeaponTwoHandedContainer::OnDataChanged( DataUpdateType_t updateType )
{
	BaseClass::OnDataChanged( updateType );

	// Did we just receive a new weapon?
	bool rightchanged = m_hOldRightWeapon.Get() != m_hRightWeapon.Get() ? true : false;
	bool leftchanged = m_hOldLeftWeapon.Get() != m_hLeftWeapon.Get() ? true : false;

	if ( rightchanged || leftchanged )
	{
		/*
		// Tell weapons that they're being holstered
		if ( m_hRightWeapon != NULL && rightchanged )
		{
			m_hRightWeapon->Holster( NULL );
		}
		if ( m_hLeftWeapon != NULL && leftchanged )
		{
			m_hLeftWeapon->Holster( NULL );
		}
		*/

		HookWeaponEntities();
	}
}

//-----------------------------------------------------------------------------
// Purpose: 
//-----------------------------------------------------------------------------
void C_WeaponTwoHandedContainer::HookWeaponEntities( void )
{
	m_hOldRightWeapon	= m_hRightWeapon;
	m_hOldLeftWeapon	= m_hLeftWeapon;
}

//-----------------------------------------------------------------------------
// Purpose: Never draw the container
//-----------------------------------------------------------------------------
bool C_WeaponTwoHandedContainer::ShouldDraw( void )
{
	return false;
}

//-----------------------------------------------------------------------------
// Purpose: This weapon is the active weapon, and it should now draw anything
//			it wants to. This gets called every frame.
//-----------------------------------------------------------------------------
void C_WeaponTwoHandedContainer::Redraw()
{
	BaseClass::Redraw();

	if ( m_hRightWeapon.Get() )
	{
		m_hRightWeapon->Redraw();
	}
	if ( m_hLeftWeapon.Get() )
	{
		m_hLeftWeapon->Redraw();
	}
}

//-----------------------------------------------------------------------------
// Purpose: Draw both weapon's ammo's
//-----------------------------------------------------------------------------
void C_WeaponTwoHandedContainer::DrawAmmo()
{
	// Just tell our active weapon to draw it's ammo, since our offhand doesn't use it
	if ( m_hLeftWeapon )
	{
		m_hLeftWeapon->DrawAmmo();
	}
	if ( m_hRightWeapon.Get() )
	{
		m_hRightWeapon->DrawAmmo();
	}
}

//-----------------------------------------------------------------------------
// Purpose: Let each weapon handle input
//-----------------------------------------------------------------------------
void C_WeaponTwoHandedContainer::HandleInput( void )
{
	BaseClass::HandleInput();

	if ( m_hRightWeapon )
	{
		m_hRightWeapon->HandleInput();
	}
	if ( m_hLeftWeapon )
	{
		m_hLeftWeapon->HandleInput();
	}
}

//-----------------------------------------------------------------------------
// Purpose: Let each weapon handle input
//-----------------------------------------------------------------------------
void C_WeaponTwoHandedContainer::OverrideMouseInput( float *x, float *y )
{
	BaseClass::OverrideMouseInput( x,y );

	if ( m_hRightWeapon )
	{
		m_hRightWeapon->OverrideMouseInput( x,y );
	}
	if ( m_hLeftWeapon )
	{
		m_hLeftWeapon->OverrideMouseInput( x,y );
	}
}

//-----------------------------------------------------------------------------
// Purpose: 
// Output : Returns true on success, false on failure.
//-----------------------------------------------------------------------------
bool C_WeaponTwoHandedContainer::VisibleInWeaponSelection( void )
{
	return false;
}