⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 icelineardamper.h

📁 使用stl技术,(还没看,是听说的)
💻 H
字号:
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/**
 *	Contains a linear damper.
 *	\file		IceLinearDamper.h
 *	\author		Pierre Terdiman
 *	\date		February, 8, 2003
 */
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Include Guard
#ifndef __ICELINEARDAMPER_H__
#define __ICELINEARDAMPER_H__

	//! Linear frame-independent damper
	class ICECORE_API LinearDamper
	{
		public:
		// Constructor/Destructor
						LinearDamper() : mLinearCoeff(0.0f), mNormalizer(0.0f)	{}
						~LinearDamper()											{}

		inline_	void	Reset()
						{
							mLinearCoeff = mNormalizer = 0.0f;
						}

		// We want the coeff to reach 0 in a time T. We accumulate the time in "elapsed_time", so that
		// it ranges from 0 to T, remapped to 0-1. 

		///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		/**
		 *	Resets for forward damping. Linear coeff ranges from 0 to 1 over a given delay.
		 *	\param		delay	[in] time interval in seconds
		 *	\see		ForwardUpdate(float elapsed_time)
		 */
		///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		inline_	void	ForwardReset(float delay)
						{
							mLinearCoeff = 0.0f;
							mNormalizer = 1.0f / delay;
						}

		///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		/**
		 *	Resets for backward damping. Linear coeff ranges from 1 to 0 over a given delay.
		 *	\param		delay	[in] time interval in seconds
		 *	\see		BackwardUpdate(float elapsed_time)
		 */
		///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		inline_	void	BackwardReset(float delay)
						{
							mLinearCoeff = 1.0f;
							mNormalizer = 1.0f / delay;
						}

		///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		/**
		 *	Updates damper for forward damping.
		 *	\param		elapsed_time	[in] elapsed time in seconds
		 *	\return		true if linear coeff has reached a limit
		 *	\see		ForwardReset(float delay)
		 */
		///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		inline_	BOOL	ForwardUpdate(float elapsed_time)
						{
							mLinearCoeff += elapsed_time*mNormalizer;
							if(SIR(mLinearCoeff)>IEEE_1_0)	{ SIR(mLinearCoeff) = IEEE_1_0; return TRUE;	}
							return FALSE;
						}

		///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		/**
		 *	Updates damper for backward damping.
		 *	\param		elapsed_time	[in] elapsed time in seconds
		 *	\return		true if linear coeff has reached a limit
		 *	\see		BackwardReset(float delay)
		 */
		///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
		inline_	BOOL	BackwardUpdate(float elapsed_time)
						{
							mLinearCoeff -= elapsed_time*mNormalizer;
							if(SIR(mLinearCoeff)<0)	{ SIR(mLinearCoeff) = 0; return TRUE;	}
							return FALSE;
						}

		// Data access
		inline_			operator float()	const	{ return mLinearCoeff;	}
		inline_	float	GetLinearCoeff()	const	{ return mLinearCoeff;	}
		inline_	float	GetNormalizer()		const	{ return mNormalizer;	}

		private:
				float	mLinearCoeff;	//!< Linear coeff between 0 and 1
				float	mNormalizer;	//!< Coeff multiplier
	};

#endif // __ICELINEARDAMPER_H__

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -