This repository has been archived on 2024-06-13. You can view files and clone it, but cannot push or open issues or pull requests.
nekohook/modules/source2013/sdk/game/shared/apparent_velocity_helper.h
2020-08-04 13:13:01 -04:00

61 lines
1.3 KiB
C++

//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
//=============================================================================//
#ifndef APPARENT_VELOCITY_HELPER_H
#define APPARENT_VELOCITY_HELPER_H
#ifdef _WIN32
#pragma once
#endif
inline float CalcDistance(float x, float y) { return x - y; }
inline float CalcDistance(const Vector &a, const Vector &b) {
return a.DistTo(b);
}
template <class T>
class CDefaultCalcDistance {
public:
static inline float CalcDistance(const T &a, const T &b) {
return ::CalcDistance(a, b);
}
};
class CCalcDistance2D {
public:
static inline float CalcDistance(const Vector &a, const Vector &b) {
return (a - b).Length2D();
}
};
template <class T, class Functor = CDefaultCalcDistance<T> >
class CApparentVelocity {
public:
CApparentVelocity(const T &t0) {
m_LastTime = -1;
m_LastValue = t0;
}
float AddSample(float time, T value) {
float flRet = 0;
if (m_LastTime != -1) {
flRet =
Functor::CalcDistance(value, m_LastValue) / (time - m_LastTime);
}
m_LastTime = time;
m_LastValue = value;
return flRet;
}
private:
T m_LastValue;
float m_LastTime;
};
#endif // APPARENT_VELOCITY_HELPER_H