1#include "MapObj/BlinkRateCalculator.h"
2
3#include "Library/Math/MathUtil.h"
4
5BlinkRateCalculator::BlinkRateCalculator(s32 maxFrames) : mMaxFrames(maxFrames) {}
6
7BlinkRateCalculator::BlinkRateCalculator() {}
8
9void BlinkRateCalculator::reset() {
10 mCurrentFrame = 0;
11 mCurrentRate = 1.0f;
12}
13
14void 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