mirror of
https://github.com/MonsterDruide1/OdysseyDecomp
synced 2026-05-10 01:09:26 +00:00
34 lines
989 B
C++
34 lines
989 B
C++
#include "Library/Bgm/BgmBeatCounter.h"
|
|
|
|
#include "Library/Bgm/BgmLineFunction.h"
|
|
|
|
namespace al {
|
|
|
|
BgmBeatCounter::BgmBeatCounter(IUseAudioKeeper* audioKeeper, f32 triggerBeatOffset)
|
|
: mAudioKeeper(audioKeeper), mTriggerBeatOffset(triggerBeatOffset) {}
|
|
|
|
void BgmBeatCounter::update() {
|
|
if (!isEnableRhythmAnim(mAudioKeeper, nullptr))
|
|
return;
|
|
|
|
f32 currentBeat = getCurBeatOnMeasure(mAudioKeeper);
|
|
if (currentBeat - (s32)currentBeat > mTriggerBeatOffset + 1.0f &&
|
|
mPrevBeat - (s32)currentBeat <= mTriggerBeatOffset + 1.0f)
|
|
mIsOnBeat = true;
|
|
else
|
|
mIsOnBeat = false;
|
|
|
|
mCurBeatWithOffset = getCurBeat(mAudioKeeper) - mTriggerBeatOffset;
|
|
mPrevBeat = currentBeat;
|
|
}
|
|
|
|
bool BgmBeatCounter::isTriggerBeat(s32 interval, s32 delayTime) const {
|
|
if (!mIsOnBeat)
|
|
return false;
|
|
|
|
s32 beatValue = mCurBeatWithOffset + (mCurBeatWithOffset >= 0.0f ? 0.5f : -0.5f);
|
|
return beatValue % interval == delayTime;
|
|
}
|
|
|
|
} // namespace al
|