#include "pch.h" #include "Animation.h" #include #include "utils.h" Animation::Animation(Texture* pTexture, int frames, float frameDuration, Rectf srcRect, bool isLooping): m_pTexture(pTexture), m_SrcRect(srcRect), m_Frames(frames), m_IsLooping(isLooping), m_FrameDuration(frameDuration) { } void Animation::Update(float elapsedSec) { if (m_IsPlaying) { m_FrameTimer -= elapsedSec; if (m_FrameTimer <= 0.0f) { m_FrameTimer = m_FrameDuration; ++m_CurrentFrame; if (m_CurrentFrame >= m_Frames) { m_CurrentFrame = 0; if (!m_IsLooping) { m_HasPlayedOnce = true; m_IsPlaying = false; } } } } } void Animation::Draw(const Vector2f& pos) const { Draw(pos, Rectf { pos.x, pos.y, m_SrcRect.width, m_SrcRect.height }); } void Animation::Draw(const Vector2f& pos, const Rectf& dst) const { Rectf src = m_SrcRect; src.left += static_cast(m_CurrentFrame) * src.width; m_pTexture->Draw(dst, src, m_IsFlipped); } void Animation::SetPlaying(bool isPlaying) { m_IsPlaying = isPlaying; } void Animation::SetFlipped(bool isFlipped) { m_IsFlipped = isFlipped; } void Animation::Reset() { m_CurrentFrame = 0; m_HasPlayedOnce = false; m_IsPlaying = true; m_FrameTimer = m_FrameDuration; } bool Animation::IsDone() const { return m_HasPlayedOnce && !m_IsLooping; } int Animation::GetFrameCount() const { return m_Frames; } void Animation::SetFrame(int frame) { m_CurrentFrame = frame; }