Files
2026-08-08 13:54:26 -07:00

54 lines
1.0 KiB
C++

#include "decay.h"
#include <cmath>
idParametricDecay::idParametricDecay()
: delta(0.0f)
, linear(0.0f)
, t0(0.0f)
, tdelta(0.0f)
, lambda(0.0f) {
}
void idParametricDecay::Init(
const float newDelta,
const float newLinear,
const float newT0,
const float newTDelta,
const float newLambda
) {
delta = newDelta;
linear = newLinear;
t0 = newT0;
tdelta = newTDelta;
lambda = newLambda;
}
void idParametricDecay::SetTZero(const float newT0) {
t0 = newT0;
}
void idParametricDecay::SetDelta(const float newDelta) {
delta = newDelta;
}
float idParametricDecay::Evaluate(const float t) const {
if (t < t0) {
return delta;
}
const float elapsed = t - t0;
if (elapsed > tdelta) {
return 0.0f;
}
const float normalizedTime = elapsed / tdelta;
const float exponential = std::pow(
0.5f,
elapsed / (lambda * tdelta)
);
return ((1.0f - linear) * exponential
+ (1.0f - normalizedTime) * linear) * delta;
}