#ifndef BUFFERED_VALUE_H
#define BUFFERED_VALUE_H

#include "math/Math.h"

template<typename T>
class BufferedValue {
    T last;
    T current;

public:
    BufferedValue(const T& t) : last(t), current(t) {
    }

    void update() {
        last = current;
    }

    T get(float lag) {
        return Math::interpolate(last, current, lag);
    }

    BufferedValue& operator=(const T& t) {
        current = t;
        return *this;
    }

    operator T&() {
        return current;
    }

    operator const T&() const {
        return current;
    }
};

#endif