#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; }