버전
menu_open
link

include/AK/Plugin/PluginServices/AkValueRamp.h

Go to the documentation of this file.
00001 
00002 //
00003 // Copyright (c) 2006 Audiokinetic Inc. / All Rights Reserved
00004 //
00006 
00007 // AkValueRamp.h
00008 
00011 
00012 #ifndef _AK_VALUERAMP_H_
00013 #define _AK_VALUERAMP_H_
00014 
00015 #include <AK/SoundEngine/Common/AkTypes.h>
00016 #include <AK/Tools/Common/AkAssert.h>
00017 #include <math.h>
00018 
00019 namespace AK
00020 {
00021 
00028     class CAkValueRamp
00029     {
00030     public:
00031 
00033         CAkValueRamp() :
00034         m_fStepIncrement( 0.f ),    // Step increment sign
00035             m_fInc( 0.f ),          // Signed increment
00036             m_fTarget( 0.f ),       // Target gain for ramping
00037             m_fCurrent( 0.f ),      // Current interpolated value
00038             m_uRampCount( 0 ),      // Position in interpolation ramp
00039             m_uRampLength( 0 )      // Total duration of interpolation ramp
00040         {
00041         }
00042 
00044         ~CAkValueRamp()
00045         {
00046         }
00047 
00049         inline void RampSetup( 
00050             AkReal32 fStepIncrement,    
00051             AkReal32 fInitVal           
00052             )
00053         {
00054             AKASSERT( fStepIncrement > 0.f );
00055             m_fStepIncrement = fStepIncrement;
00056             m_fCurrent = fInitVal;
00057             SetTarget( fInitVal );
00058         }
00059 
00061         AkForceInline void SetTarget( 
00062             AkReal32 fTarget        
00063             ) 
00064         {
00065             m_fTarget = fTarget;
00066             m_uRampCount = 0;
00067             AkReal32 fDiff = m_fTarget - m_fCurrent;
00068             m_uRampLength = static_cast<AkUInt32>( fabs(fDiff) / m_fStepIncrement );
00069             m_fInc = fDiff > 0 ? m_fStepIncrement : -m_fStepIncrement;
00070         }
00071 
00074         AkForceInline AkReal32 Tick()
00075         {
00076             if ( m_uRampCount >= m_uRampLength )
00077                 m_fCurrent = m_fTarget;
00078             else
00079             {
00080                 ++m_uRampCount;
00081                 m_fCurrent += m_fInc;
00082             }
00083             return m_fCurrent;
00084         }
00085         
00088         AkReal32 GetCurrent()                       { return m_fCurrent; }
00089         
00091         void SetCurrent(AkReal32 in_fCurrent)       { m_fCurrent = in_fCurrent; }
00092 
00095         AkUInt32 GetRampCount()                     { return m_uRampCount; }
00096 
00098         void SetRampCount(AkUInt32 in_uRampCount)   { m_uRampCount = in_uRampCount; }
00099 
00101         void StopRamp()
00102         {
00103             m_fCurrent = m_fTarget;
00104             m_uRampCount = m_uRampLength;
00105         }
00106 
00107     private:
00108 
00109         AkReal32            m_fStepIncrement;       // Step increment size
00110         AkReal32            m_fInc;                 // Signed increment
00111         AkReal32            m_fTarget;              // Target for interpolation ramp
00112         AkReal32            m_fCurrent;             // Current interpolated value
00113         AkUInt32            m_uRampCount;           // Position in interpolation ramp
00114         AkUInt32            m_uRampLength;          // Total duration of interpolation ramp
00115     } AK_ALIGN_DMA;
00116 }
00117 
00118 #endif  //_AK_VALUERAMP_H_

이 페이지가 도움이 되었나요?

지원이 필요하신가요?

질문이 있으신가요? 문제를 겪고 계신가요? 더 많은 정보가 필요하신가요? 저희에게 문의해주시면 도와드리겠습니다!

지원 페이지를 방문해 주세요

작업하는 프로젝트에 대해 알려주세요. 언제든지 도와드릴 준비가 되어 있습니다.

프로젝트를 등록하세요. 아무런 조건이나 의무 사항 없이 빠른 시작을 도와드리겠습니다.

Wwise를 시작해 보세요