1#include "Library/Math/InOutParam.h"
2
3#include "Library/Math/MathUtil.h"
4#include "Library/Yaml/ByamlIter.h"
5
6namespace al {
7
8InOutParam::InOutParam() = default;
9
10InOutParam::InOutParam(const InOutParam& src)
11 : mInMin(src.mInMin), mInMax(src.mInMax), mOutMin(src.mOutMin), mOutMax(src.mOutMax) {}
12
13InOutParam::InOutParam(f32 inMin, f32 inMax, f32 outMin, f32 outMax)
14 : mInMin(inMin), mInMax(inMax), mOutMin(outMin), mOutMax(outMax) {}
15
16void InOutParam::init(const ByamlIter& iter) {
17 iter.tryGetFloatByKey(val: &mInMin, key: "InMin");
18 iter.tryGetFloatByKey(val: &mInMax, key: "InMax");
19 iter.tryGetFloatByKey(val: &mOutMin, key: "OutMin");
20 iter.tryGetFloatByKey(val: &mOutMax, key: "OutMax");
21}
22
23f32 InOutParam::calcLeapValue(f32 value) const {
24 return lerpValue(value, mInMin, mInMax, mOutMin, mOutMax);
25}
26
27f32 InOutParam::calcEaseInValue(f32 value) const {
28 f32 lerp = lerpValue(value, mInMin, mInMax, 0.0f, 1.0f);
29 f32 eased = easeIn(t: lerp);
30 return mOutMin + eased * (mOutMax - mOutMin);
31}
32
33f32 InOutParam::calcEaseOutValue(f32 value) const {
34 f32 lerp = lerpValue(value, mInMin, mInMax, 0.0f, 1.0f);
35 f32 eased = easeOut(t: lerp);
36 return mOutMin + eased * (mOutMax - mOutMin);
37}
38
39f32 InOutParam::calcEaseInOutValue(f32 value) const {
40 f32 lerp = lerpValue(value, mInMin, mInMax, 0.0f, 1.0f);
41 f32 eased = easeInOut(t: lerp);
42 return mOutMin + eased * (mOutMax - mOutMin);
43}
44
45f32 InOutParam::calcSqrtValue(f32 value) const {
46 f32 lerp = lerpValue(value, mInMin, mInMax, 0.0f, 1.0f);
47 f32 eased = sead::Mathf::sqrt(t: lerp);
48 return mOutMin + eased * (mOutMax - mOutMin);
49}
50
51f32 InOutParam::calcSquareValue(f32 value) const {
52 f32 lerp = lerpValue(value, mInMin, mInMax, 0.0f, 1.0f);
53 f32 eased = sead::Mathf::square(t: lerp);
54 return mOutMin + eased * (mOutMax - mOutMin);
55}
56
57} // namespace al
58