
///////////////////////////////////////////////////////////////////////////////
//
// File   : AVP_DamageMultiplier.h
// Author : Andy Tate
// Date   : 3-Sep-2008
//
// Copyright (C) 2008 Rebellion, All Rights Reserved.
//
///////////////////////////////////////////////////////////////////////////////

#ifdef ASURA_USE_PRAGMA_ONCE
	#pragma once
#endif   // ifdef ASURA_USE_PRAGMA_ONCE

#ifndef __AVP_DAMAGEMULTIPLIER_H__
#define __AVP_DAMAGEMULTIPLIER_H__

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

#include "Core/Asura_HashTree.h"
#include "Blueprint/Asura_Blueprint.h"


////////////////////////////////////////////////////////////////////////////////
// Forward class declarations...
////////////////////////////////////////////////////////////////////////////////

class Asura_Blueprint;


////////////////////////////////////////////////////////////////////////////////
// Class declaration...
////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////
// Class        : AVP_DamageMultiplier
// Author       : Andy Tate
// Date         : 3-Sep-2008
//
// Description  : Class used to store the data for a particular damage multiplier.
////////////////////////////////////////////////////////////////////////////////

class AVP_DamageMultiplier
{
public:
	// Public functions...
	AVP_DamageMultiplier(void)	{}
	AVP_DamageMultiplier(const Asura_Blueprint& xBlueprint);
	AVP_DamageMultiplier(const AVP_DamageMultiplier& xOther)	: m_fMulitplier(xOther.m_fMulitplier)	{}
	//~AVP_DamageMultiplier();

	// Operators...
	AVP_DamageMultiplier& operator=(const AVP_DamageMultiplier& xOther)
	{
		m_fMulitplier	= xOther.m_fMulitplier;
		return(*this);
	}

	// Manipulation functions...
	float	Apply(const float fDamage) const	{ return(fDamage * m_fMulitplier); }
	
	float   GetMultiplier() const { return m_fMulitplier; }

protected:
	// Protected variables...

	// Protected functions...


private:
	// Private variables...
	float	m_fMulitplier;	// The multiplier to apply to the damage amount.

	// Private functions...

};   // End of class 'AVP_DamageMultiplier'.



////////////////////////////////////////////////////////////////////////////////
// Class        : AVP_DamageMultiplier_Blueprint_ParameterEnumerator
// Author       : Andy Tate
// Date         : 3-Sep-2008
//
// Description  : Class used to enumerate damage-multipliers for an entity.
////////////////////////////////////////////////////////////////////////////////

class AVP_DamageMultiplier_Blueprint_ParameterEnumerator : public Asura_Blueprint_ParameterEnumerator
{
public:
	// Public typedefs...
	typedef Asura_TemplateHashTree<AVP_DamageMultiplier> DamageMultiplierContainer;

	// Public functions...
	AVP_DamageMultiplier_Blueprint_ParameterEnumerator(DamageMultiplierContainer& xDamageMultiplierContainer)	: m_xDamageMultiplierContainer(xDamageMultiplierContainer)	{}
	//virtual ~AVP_DamageMultiplier_Blueprint_ParameterEnumerator();

	// Overridden functions...
	virtual void	BeginEnumeration(void);
	virtual bool	Enumerate(const u_int uIndex, char const* const szName, const Asura_Value& xValue);
	virtual void	EndEnumeration(const bool bSuccess);


protected:
	// Protected variables...

	// Protected functions...


private:
	// Private typedefs...
	typedef Asura_Blueprint_ParameterEnumerator PARENT;

	// Private variables...
	DamageMultiplierContainer&	m_xDamageMultiplierContainer;	// A reference to the container used to store the damage-multipliers.

	// Private functions...
	AVP_DamageMultiplier_Blueprint_ParameterEnumerator(void);
	AVP_DamageMultiplier_Blueprint_ParameterEnumerator(const AVP_DamageMultiplier_Blueprint_ParameterEnumerator& xOther);

	AVP_DamageMultiplier_Blueprint_ParameterEnumerator&	operator=(const AVP_DamageMultiplier_Blueprint_ParameterEnumerator& xOther);

};   // End of class 'AVP_DamageMultiplier_Blueprint_ParameterEnumerator'.

#endif   // ifndef __AVP_DAMAGEMULTIPLIER_H__


/// End of file. ///
