diff options
| author | Joe Ludwig <[email protected]> | 2013-06-26 15:22:04 -0700 |
|---|---|---|
| committer | Joe Ludwig <[email protected]> | 2013-06-26 15:22:04 -0700 |
| commit | 39ed87570bdb2f86969d4be821c94b722dc71179 (patch) | |
| tree | abc53757f75f40c80278e87650ea92808274aa59 /mp/src/game/client/simple_keys.cpp | |
| download | source-sdk-2013-39ed87570bdb2f86969d4be821c94b722dc71179.tar.xz source-sdk-2013-39ed87570bdb2f86969d4be821c94b722dc71179.zip | |
First version of the SOurce SDK 2013
Diffstat (limited to 'mp/src/game/client/simple_keys.cpp')
| -rw-r--r-- | mp/src/game/client/simple_keys.cpp | 96 |
1 files changed, 96 insertions, 0 deletions
diff --git a/mp/src/game/client/simple_keys.cpp b/mp/src/game/client/simple_keys.cpp new file mode 100644 index 00000000..e8a84088 --- /dev/null +++ b/mp/src/game/client/simple_keys.cpp @@ -0,0 +1,96 @@ +//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose:
+//
+//=============================================================================//
+
+#include "cbase.h"
+#include "simple_keys.h"
+
+// memdbgon must be the last include file in a .cpp file!!!
+#include "tier0/memdbgon.h"
+
+//-----------------------------------------------------------------------------
+// Simple key interpolations
+//-----------------------------------------------------------------------------
+
+//-----------------------------------------------------------------------------
+// Purpose:
+// Input : &out -
+// t -
+// &start -
+// &end -
+//-----------------------------------------------------------------------------
+void CSimpleKeyInterp::Interp( Vector &out, float t, const CSimpleKeyInterp &start, const CSimpleKeyInterp &end )
+{
+ float delta = end.GetTime() - start.GetTime();
+ t = clamp( t-start.GetTime(), 0.f, delta );
+
+ float unitT = (delta > 0) ? (t / delta) : 1;
+
+ switch( end.m_interp )
+ {
+ case KEY_SPLINE:
+ unitT = SimpleSpline( unitT );
+ break;
+ case KEY_ACCELERATE:
+ unitT *= unitT;
+ break;
+ case KEY_DECELERATE:
+ unitT = sqrt(unitT);
+ break;
+ default:
+ case KEY_LINEAR:
+ //unitT = unitT;
+ break;
+ }
+ out = (1-unitT) * ((Vector)start) + unitT * ((Vector)end);
+}
+
+//-----------------------------------------------------------------------------
+// Simple key list
+//-----------------------------------------------------------------------------
+
+//-----------------------------------------------------------------------------
+// Purpose:
+// Input : &key -
+// Output : int
+//-----------------------------------------------------------------------------
+int CSimpleKeyList::Insert( const CSimpleKeyInterp &key )
+{
+ for ( int i = 0; i < m_list.Count(); i++ )
+ {
+ if ( key.GetTime() < m_list[i].GetTime() )
+ return m_list.InsertBefore( i, key );
+ }
+
+ return m_list.AddToTail( key );
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+// Input : &out -
+// t -
+// Output : Returns true on success, false on failure.
+//-----------------------------------------------------------------------------
+bool CSimpleKeyList::Interp( Vector &out, float t )
+{
+ int startIndex = -1;
+
+ out.Init();
+ for ( int i = 0; i < m_list.Count(); i++ )
+ {
+ if ( t < m_list[i].GetTime() )
+ {
+ // before start
+ if ( startIndex < 0 )
+ return false;
+ CSimpleKeyInterp::Interp( out, t, m_list[startIndex], m_list[i] );
+ return true;
+ }
+ startIndex = i;
+ }
+
+ // past end
+ return false;
+}
|