
///////////////////////////////////////////////////////////////////////////////
//
// File   : AVP_SurfaceReorientationNormalInterpolator_VelocityInterceptor.h
// Author : Andy Tate
// Date   : 7-Feb-2008
//
// Copyright (C) 2008 Rebellion, All Rights Reserved.
//
///////////////////////////////////////////////////////////////////////////////

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

#ifndef __AVP_SURFACEREORIENTATIONNORMALINTERPOLATOR_VELOCITYINTERCEPTOR_H__
#define __AVP_SURFACEREORIENTATIONNORMALINTERPOLATOR_VELOCITYINTERCEPTOR_H__

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

#include "Actor/AVP_Actor_VelocityInterceptor.h"
#include "Physics/AVP_SurfaceReorientationNormalInterpolator.h"


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


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

////////////////////////////////////////////////////////////////////////////////
// Class        : AVP_SurfaceReorientationNormalInterpolator_VelocityInterceptor
// Author       : Andy Tate
// Date         : 7-Feb-2008
//
// Description  : Class used to interpolate to a desired normal (using a 
//				  velocity-interceptor) during surface-reorientation.
////////////////////////////////////////////////////////////////////////////////

class AVP_SurfaceReorientationNormalInterpolator_VelocityInterceptor : public AVP_SurfaceReorientationNormalInterpolator
{
public:
	// Public functions...
	AVP_SurfaceReorientationNormalInterpolator_VelocityInterceptor(void);
	//virtual ~AVP_SurfaceReorientationNormalInterpolator_VelocityInterceptor();

	// Overridden functions...
	virtual void	Reset(Asura_AVector3_InParam xNormal);

	virtual	void	Update(const float fTimeStep, Asura_AVector3_InParam xDesiredNormal, Asura_AVector3_InOutParam xCurrentNormal);
	virtual	void	Update(const float fTimeStep, const AVP_CalculateSurfaceReorientationNormal& xNormalCalculation, Asura_AVector3_InOutParam xCurrentNormal);


protected:
	// Protected variables...
	AVP_Actor_VelocityInterceptor<Asura_AVector3>	m_xVelocityInterceptor;	// The velocity-interceptor to use.

	// Protected functions...


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

	// Private variables...

	// Private functions...
	AVP_SurfaceReorientationNormalInterpolator_VelocityInterceptor(const AVP_SurfaceReorientationNormalInterpolator_VelocityInterceptor& xOther);

	AVP_SurfaceReorientationNormalInterpolator_VelocityInterceptor&	operator=(const AVP_SurfaceReorientationNormalInterpolator_VelocityInterceptor& xOther);

};   // End of class 'AVP_SurfaceReorientationNormalInterpolator_VelocityInterceptor'.


#endif   // ifndef __AVP_SURFACEREORIENTATIONNORMALINTERPOLATOR_VELOCITYINTERCEPTOR_H__


/// End of file. ///
