8 #include <nap/signalslot.h>
24 LinearSmoothedValue(
const T& initValue,
int stepCount) : mNewDestination(initValue), mValue(initValue), mDestination(initValue), mStepCount(stepCount)
35 mNewDestination.store(initValue);
37 mDestination = initValue;
49 void setValue(
const T& destination) { mNewDestination.store(destination); }
57 T newDestination = mNewDestination.load();
58 int stepCount = mStepCount.load();
60 if (newDestination != mDestination)
62 mDestination = newDestination;
63 mStepCounter = stepCount;
64 if (mStepCounter == 0)
65 mValue = mDestination;
67 mIncrement = (mDestination - mValue) / T(stepCount);
72 mValue = mValue + mIncrement;
74 if (mStepCounter == 0)
75 mValue = mDestination;
93 inline bool isRamping()
const {
return mStepCounter > 0 || mDestination != mNewDestination.load(); }
96 std::atomic<T> mNewDestination = 0;
101 std::atomic<int> mStepCount = 0;
102 int mStepCounter = 0;