Files
prog2/Game/Animations/Animation.cpp
2026-04-12 23:15:20 +02:00

58 lines
1.4 KiB
C++

#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_FrameDuration(frameDuration), m_IsLooping(isLooping) {
}
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&, 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;
}