Magic_Game/core/Action/FiniteTimeAction.cpp

45 lines
646 B
C++

#include "..\e2daction.h"
e2d::FiniteTimeAction::FiniteTimeAction(float duration)
: _delta(0)
, _duration(std::max(duration, 0.f))
{
}
void e2d::FiniteTimeAction::reset()
{
Action::reset();
_delta = 0;
}
void e2d::FiniteTimeAction::_init()
{
Action::_init();
}
void e2d::FiniteTimeAction::_update()
{
Action::_update();
if (_duration == 0)
{
_delta = 1;
this->stop();
}
else
{
_delta = std::min((Time::now() - _started).seconds() / _duration, 1.f);
if (_delta >= 1)
{
this->stop();
}
}
}
void e2d::FiniteTimeAction::_resetTime()
{
Action::_resetTime();
_started = Time::now() - Duration(_delta * _duration);
}