bool Playback::HasEndReached() const { if (IsForward()) return (AreFramesChrono() ? frame >= lastFrame : frame <= lastFrame); else return (AreFramesChrono() ? frame <= firstFrame : frame >= firstFrame); }
void Playback::SetNextFrame(FrameIndex nextFrameIndex) { if (IsForward()) nextFrame = nextFrameIndex; else frame = nextFrameIndex; }
void Playback::SetNextFrame() { /* Set next frame index depending on playback chronology */ if (IsForward()) nextFrame = (AreFramesChrono() ? frame + 1 : frame - 1); else frame = (AreFramesChrono() ? frame - 1 : frame + 1); }
void Playback::Update(Gs::Real deltaTime) { /* Check if playback is currently being played */ if (GetState() != State::Playing || deltaTime <= Gs::Real(0)) return; /* Increase frame interpolator */ interpolator += (deltaTime * speed); if (IsForward()) { /* Post event for each animation frame */ while (interpolator >= Gs::Real(1)) { /* Set current frame to the next frame */ interpolator -= Gs::Real(1); frame = nextFrame; /* Get next frame by event listener */ PostNextFrame(); } } else { /* Post event for each animation frame */ while (interpolator <= Gs::Real(0)) { /* Set current frame to the next frame */ interpolator += Gs::Real(1); nextFrame = frame; /* Get next frame by event listener */ PostNextFrame(); } } }
bool FCurveSequence::IsAtEnd( ) const { return ( IsForward() == true && IsPlaying() == false && !bIsLooping ); }