1#include "Library/Bgm/BgmBeatCounter.h"
2
3#include "Library/Bgm/BgmLineFunction.h"
4
5namespace al {
6
7BgmBeatCounter::BgmBeatCounter(IUseAudioKeeper* audioKeeper, f32 triggerBeatOffset)
8 : mAudioKeeper(audioKeeper), mTriggerBeatOffset(triggerBeatOffset) {}
9
10void BgmBeatCounter::update() {
11 if (!isEnableRhythmAnim(mAudioKeeper, nullptr))
12 return;
13
14 f32 currentBeat = getCurBeatOnMeasure(mAudioKeeper);
15 if (currentBeat - (s32)currentBeat > mTriggerBeatOffset + 1.0f &&
16 mPrevBeat - (s32)currentBeat <= mTriggerBeatOffset + 1.0f)
17 mIsOnBeat = true;
18 else
19 mIsOnBeat = false;
20
21 mCurBeatWithOffset = getCurBeat(mAudioKeeper) - mTriggerBeatOffset;
22 mPrevBeat = currentBeat;
23}
24
25bool BgmBeatCounter::isTriggerBeat(s32 interval, s32 delayTime) const {
26 if (!mIsOnBeat)
27 return false;
28
29 s32 beatValue = mCurBeatWithOffset + (mCurBeatWithOffset >= 0.0f ? 0.5f : -0.5f);
30 return beatValue % interval == delayTime;
31}
32
33} // namespace al
34