aboutsummaryrefslogtreecommitdiff
path: root/mp/src/game/client/fx_interpvalue.cpp
diff options
context:
space:
mode:
authorJoe Ludwig <[email protected]>2013-06-26 15:22:04 -0700
committerJoe Ludwig <[email protected]>2013-06-26 15:22:04 -0700
commit39ed87570bdb2f86969d4be821c94b722dc71179 (patch)
treeabc53757f75f40c80278e87650ea92808274aa59 /mp/src/game/client/fx_interpvalue.cpp
downloadsource-sdk-2013-39ed87570bdb2f86969d4be821c94b722dc71179.tar.xz
source-sdk-2013-39ed87570bdb2f86969d4be821c94b722dc71179.zip
First version of the SOurce SDK 2013
Diffstat (limited to 'mp/src/game/client/fx_interpvalue.cpp')
-rw-r--r--mp/src/game/client/fx_interpvalue.cpp93
1 files changed, 93 insertions, 0 deletions
diff --git a/mp/src/game/client/fx_interpvalue.cpp b/mp/src/game/client/fx_interpvalue.cpp
new file mode 100644
index 00000000..89559dfa
--- /dev/null
+++ b/mp/src/game/client/fx_interpvalue.cpp
@@ -0,0 +1,93 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose:
+//
+//=============================================================================
+
+#include "cbase.h"
+#include "fx_interpvalue.h"
+
+CInterpolatedValue::CInterpolatedValue( void ) : m_flStartTime( 0.0f ), m_flEndTime( 0.0f ), m_flStartValue( 0.0f ), m_flEndValue( 0.0f ), m_nInterpType( INTERP_LINEAR )
+{
+}
+
+CInterpolatedValue::CInterpolatedValue( float startTime, float endTime, float startValue, float endValue, InterpType_t type ) :
+ m_flStartTime( startTime ), m_flEndTime( endTime ), m_flStartValue( startValue ), m_flEndValue( endValue ), m_nInterpType( type )
+{
+}
+
+void CInterpolatedValue::SetTime( float start, float end )
+{
+ m_flStartTime = start; m_flEndTime = end;
+}
+
+void CInterpolatedValue::SetRange( float start, float end )
+{
+ m_flStartValue = start; m_flEndValue = end;
+}
+
+void CInterpolatedValue::SetType( InterpType_t type )
+{
+ m_nInterpType = type;
+}
+
+// Set the value with no range
+void CInterpolatedValue::SetAbsolute( float value )
+{
+ m_flStartValue = m_flEndValue = value;
+ m_flStartTime = m_flEndTime = gpGlobals->curtime;
+ m_nInterpType = INTERP_LINEAR;
+}
+
+// Set the value with range and time supplied
+void CInterpolatedValue::Init( float startValue, float endValue, float dt, InterpType_t type /*= INTERP_LINEAR*/ )
+{
+ if ( dt <= 0.0f )
+ {
+ SetAbsolute( endValue );
+ return;
+ }
+
+ SetTime( gpGlobals->curtime, gpGlobals->curtime + dt );
+ SetRange( startValue, endValue );
+ SetType( type );
+}
+
+// Start from the current value and move towards the end value
+void CInterpolatedValue::InitFromCurrent( float endValue, float dt, InterpType_t type /*= INTERP_LINEAR*/ )
+{
+ Init( Interp( gpGlobals->curtime ), endValue, dt, type );
+}
+
+// Find our interpolated value at the given point in time
+float CInterpolatedValue::Interp( float curTime )
+{
+ switch( m_nInterpType )
+ {
+ case INTERP_LINEAR:
+ {
+ if ( curTime >= m_flEndTime )
+ return m_flEndValue;
+
+ if ( curTime <= m_flStartTime )
+ return m_flStartValue;
+
+ return RemapVal( curTime, m_flStartTime, m_flEndTime, m_flStartValue, m_flEndValue );
+ }
+
+ case INTERP_SPLINE:
+ {
+ if ( curTime >= m_flEndTime )
+ return m_flEndValue;
+
+ if ( curTime <= m_flStartTime )
+ return m_flStartValue;
+
+ return SimpleSplineRemapVal( curTime, m_flStartTime, m_flEndTime, m_flStartValue, m_flEndValue );
+ }
+ }
+
+ // NOTENOTE: You managed to pass in a bogus interpolation type!
+ Assert(0);
+ return -1.0f;
+}