Add util::updater and smooth_updater
This commit is contained in:
parent
8d0440926f
commit
ec08a4a281
2 changed files with 81 additions and 0 deletions
67
libs/util/include/psemek/util/smooth_updater.hpp
Normal file
67
libs/util/include/psemek/util/smooth_updater.hpp
Normal file
|
|
@ -0,0 +1,67 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <psemek/util/updater.hpp>
|
||||||
|
|
||||||
|
#include <cmath>
|
||||||
|
|
||||||
|
namespace psemek::util
|
||||||
|
{
|
||||||
|
|
||||||
|
template <typename Time, typename Value = Time>
|
||||||
|
struct smooth_updater
|
||||||
|
: updater<Time>
|
||||||
|
{
|
||||||
|
smooth_updater(Value & value, Time speed)
|
||||||
|
: value_(value)
|
||||||
|
, target_(value)
|
||||||
|
, speed_(speed)
|
||||||
|
{}
|
||||||
|
|
||||||
|
template <typename H>
|
||||||
|
smooth_updater & operator = (H new_value)
|
||||||
|
{
|
||||||
|
target_ = new_value;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename H>
|
||||||
|
smooth_updater & operator += (H new_value)
|
||||||
|
{
|
||||||
|
target_ += new_value;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename H>
|
||||||
|
smooth_updater & operator -= (H new_value)
|
||||||
|
{
|
||||||
|
target_ -= new_value;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename H>
|
||||||
|
smooth_updater & operator *= (H new_value)
|
||||||
|
{
|
||||||
|
target_ *= new_value;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename H>
|
||||||
|
smooth_updater & operator /= (H new_value)
|
||||||
|
{
|
||||||
|
target_ /= new_value;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
void update(Time dt) override
|
||||||
|
{
|
||||||
|
using std::lerp;
|
||||||
|
value_ = lerp(target_, value_, std::exp(- dt * speed_));
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
Value & value_;
|
||||||
|
Value target_;
|
||||||
|
Time speed_;
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
14
libs/util/include/psemek/util/updater.hpp
Normal file
14
libs/util/include/psemek/util/updater.hpp
Normal file
|
|
@ -0,0 +1,14 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
namespace psemek::util
|
||||||
|
{
|
||||||
|
|
||||||
|
template <typename Time>
|
||||||
|
struct updater
|
||||||
|
{
|
||||||
|
virtual void update(Time dt) = 0;
|
||||||
|
|
||||||
|
virtual ~updater() {}
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
Loading…
Add table
Reference in a new issue