| 1 | #include "MapObj/BlinkRateCalculator.h" |
|---|---|
| 2 | |
| 3 | #include "Library/Math/MathUtil.h" |
| 4 | |
| 5 | BlinkRateCalculator::BlinkRateCalculator(s32 maxFrames) : mMaxFrames(maxFrames) {} |
| 6 | |
| 7 | BlinkRateCalculator::BlinkRateCalculator() {} |
| 8 | |
| 9 | void BlinkRateCalculator::reset() { |
| 10 | mCurrentFrame = 0; |
| 11 | mCurrentRate = 1.0f; |
| 12 | } |
| 13 | |
| 14 | void BlinkRateCalculator::update() { |
| 15 | if (mCurrentFrame < mMaxFrames) |
| 16 | mCurrentFrame++; |
| 17 | |
| 18 | if (mMaxFrames - mCurrentFrame > 150) { |
| 19 | mCurrentRate = 1.0f; |
| 20 | return; |
| 21 | } |
| 22 | |
| 23 | s32 interval = mCurrentFrame % 50; |
| 24 | |
| 25 | if (interval < 5) |
| 26 | mCurrentRate = al::lerpValue(a: 1.0f, b: mRateThreshold, t: interval / 5.0f); |
| 27 | else if (interval < 20) |
| 28 | mCurrentRate = mRateThreshold; |
| 29 | else if (interval < 25) |
| 30 | mCurrentRate = al::lerpValue(a: mRateThreshold, b: 1.0f, t: (interval - 20) / 5.0f); |
| 31 | else |
| 32 | mCurrentRate = 1.0f; |
| 33 | } |
| 34 |