
///////////////////////////////////////////////////////////////////////////////
//
// File   : Asura_ControlMapping_Combination.cpp
// Author : Andy McCabe
// Date   : 11-Sep-2006
//
// Copyright (C) 2006 Rebellion, All Rights Reserved.
//
///////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////
// Include files...
////////////////////////////////////////////////////////////////////////////////

#include "Core/Asura.h"

// This file's header...
#include "Input/Asura_ControlMapping_Combination.h"

// Asura independent header-files...
#include "Core/Asura_UserInput.h"
#include "Debugging/Asura_Assert.h"

// Asura platform header-files...

// Tools header-files...


////////////////////////////////////////////////////////////////////////////////
// Constant declarations...
////////////////////////////////////////////////////////////////////////////////


////////////////////////////////////////////////////////////////////////////////
// Static variable declarations...
////////////////////////////////////////////////////////////////////////////////


////////////////////////////////////////////////////////////////////////////////
// Private functions...
////////////////////////////////////////////////////////////////////////////////


////////////////////////////////////////////////////////////////////////////////
// Protected functions...
////////////////////////////////////////////////////////////////////////////////


////////////////////////////////////////////////////////////////////////////////
// Public functions...
////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////
// Function     : Asura_ControlMapping_Combination::Asura_ControlMapping_Combination
// Author       : Andy McCabe
// Date         : 11-Sep-2006
//
// Description  : Constructor function for the combination control-mapping class.
//
// Parameters   : The two control mappings to be combined.
//
// Return value : N/A.
////////////////////////////////////////////////////////////////////////////////

Asura_ControlMapping_Combination::Asura_ControlMapping_Combination (Asura_ControlMapping* pxControlMapping1,
																	Asura_ControlMapping* pxControlMapping2,
																	const float fScale) :
	Asura_ControlMapping(fScale),
	m_pxControlMapping1(pxControlMapping1),
	m_pxControlMapping2(pxControlMapping2)
{
	Asura_Assert(pxControlMapping1 && pxControlMapping2, "Error: NULL control mapping pointer passed into Asura_ControlMapping_Combination");
}

/// End of function 'Asura_ControlMapping_Combination::Asura_ControlMapping_Combination'. ///



////////////////////////////////////////////////////////////////////////////////
// Function     : Asura_ControlMapping_Combination::~Asura_ControlMapping_Combination
// Author       : Andy Tate
// Date         : 1-Dec-2005
//
// Description  : Destructor function for the combination control-mapping class.
//
// Return value : N/A.
////////////////////////////////////////////////////////////////////////////////

Asura_ControlMapping_Combination::~Asura_ControlMapping_Combination ()
{
	delete (m_pxControlMapping1);
	delete (m_pxControlMapping2);
}

/// End of function 'Asura_ControlMap::~Asura_ControlMap'. ///


////////////////////////////////////////////////////////////////////////////////
// Function     : Asura_ControlMapping_Combination::UpdateValue
// Author       : Andy Tate
// Date         : 5-Dec-2005
////////////////////////////////////////////////////////////////////////////////

void Asura_ControlMapping_Combination::UpdateValues(const bool bActive, float& fValue, float& fHUDValue)
{
	// Update the active flags...
	m_bActive	= bActive;

	if (m_bActive || !GetPauseWhileInactive())
	{
		if (m_pxControlMapping1 && m_pxControlMapping2)
		{
			float	afValues[2];
			float	afHUDValues[2];

			m_pxControlMapping1->UpdateValues(bActive, afValues[0], afHUDValues[0]);
			m_pxControlMapping2->UpdateValues(bActive, afValues[1], afHUDValues[1]);

			m_fValueToReport = afValues[0] * afValues[1];
		}
		else
		{
			m_fValueToReport = 0.0f;
		}
	}

	fValue		= m_fValueToReport;
	fHUDValue	= m_fValueToReport;
}

/// End of function 'Asura_ControlMapping_Combination::UpdateValue'. ///


// Clear the stored value.
void Asura_ControlMapping_Combination::ResetValue()
{
	// Reset the values of the two control mappings
	if (m_pxControlMapping1) m_pxControlMapping1->ResetValue();
	if (m_pxControlMapping2) m_pxControlMapping2->ResetValue();
	
	m_bActive			= false;
	m_fValueToReport	= 0.0f;
}

#ifdef ASURA_USE_NEW_INPUT
// Set the owner of this mapping and also its children
void Asura_ControlMapping_Combination::SetOwner(Asura_ControlMap* pxOwner)
{
	Asura_ControlMapping::SetOwner(pxOwner); 
	if (m_pxControlMapping1) { m_pxControlMapping1->SetOwner(pxOwner); }
	if (m_pxControlMapping2) { m_pxControlMapping2->SetOwner(pxOwner); }
}
#endif

/// End of file. ///
