mirror of
https://github.com/RetroDECK/ES-DE.git
synced 2025-01-31 04:25:40 +00:00
49 lines
1.1 KiB
C++
49 lines
1.1 KiB
C++
// SPDX-License-Identifier: MIT
|
|
//
|
|
// EmulationStation Desktop Edition
|
|
// AnimationController.cpp
|
|
//
|
|
// Basic animation controls.
|
|
//
|
|
|
|
#include "animations/AnimationController.h"
|
|
|
|
#include "animations/Animation.h"
|
|
#include "utils/MathUtil.h"
|
|
|
|
AnimationController::AnimationController(Animation* anim,
|
|
int delay,
|
|
std::function<void()> finishedCallback,
|
|
bool reverse)
|
|
: mAnimation {anim}
|
|
, mFinishedCallback {finishedCallback}
|
|
, mReverse {reverse}
|
|
, mTime {-delay}
|
|
, mDelay {delay}
|
|
{
|
|
}
|
|
|
|
AnimationController::~AnimationController()
|
|
{
|
|
if (mFinishedCallback)
|
|
mFinishedCallback();
|
|
|
|
delete mAnimation;
|
|
}
|
|
|
|
bool AnimationController::update(int deltaTime)
|
|
{
|
|
mTime += deltaTime;
|
|
|
|
if (mTime < 0) // Are we still in delay?
|
|
return false;
|
|
|
|
float animTime {glm::clamp(static_cast<float>(mTime) / mAnimation->getDuration(), 0.0f, 1.0f)};
|
|
mAnimation->apply(mReverse ? 1.0f - animTime : animTime);
|
|
|
|
if (animTime == 1.0f)
|
|
return true;
|
|
|
|
return false;
|
|
}
|