#include "pch.h"
#include "Animation.h"

#include <iostream>

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