C-Engine/src/Object/Animation.cpp

138 lines
2.6 KiB
C++

/* ************************************************************************** */
/* _____ _ __ ___ __ */
/* Animation.cpp | ___(_)/ _| ___ ( _ ) / /_ */
/* Project: C-Engine | |_ | | |_ / _ \/ _ \| '_ \ */
/* | _| | | _| __/ (_) | (_) | */
/* Author: Fife <wasabifife@gmail.com> |_| |_|_| \___|\___/ \___/ */
/* */
/* ************************************************************************** */
#include "..\C-Engine\include\Object\Animation.hpp"
Animation::Animation()
{
TabSprite = NULL;
nb_image = 0;
delay = 0;
iterateur = 0;
time = 0;
waitatend = false;
waittheend = false;
isend = false;
}
Animation::Animation(Sprite & v)
{
TabSprite = &v;
nb_image = 1;
delay = 0;
iterateur = 0;
time = 0;
waitatend = false;
waittheend = false;
isend = false;
}
Animation::Animation(Sprite * v , int nb , int nbd , bool vwaitatend , bool vwaittheend)
{
TabSprite = v;
nb_image = nb;
delay = nbd;
waitatend = vwaitatend;
waittheend = vwaittheend;
iterateur = 0;
time = 0;
isend = false;
}
void Animation::SetIt(int v)
{
iterateur = v;
time = RTC_getTicks();
isend = false;
}
int Animation::GetSizeY()
{
return TabSprite[iterateur].GetSizeY();
}
int Animation::GetSizeX()
{
return TabSprite[iterateur].GetSizeX();
}
int Animation::GetBlitX()
{
return TabSprite[iterateur].GetBlitX();
}
int Animation::GetBlitY()
{
return TabSprite[iterateur].GetBlitY();
}
bool Animation::GetWaittheEnd()
{
return waittheend;
}
bool Animation::GetisEnd()
{
return isend;
}
void Animation::DrawAnim ( int x , int y , int d)
{
if( iterateur >= nb_image) iterateur = 0;
TabSprite[ iterateur ].DrawSprite( x , y , d);
if(WaitDelay())iterateur ++;
if( iterateur >= nb_image)
{
isend = true;
if(!waitatend)iterateur = 0;
else iterateur = nb_image - 1;
}
}
void Animation::DrawReverseAnim ( int x , int y , int d)
{
if( iterateur >= nb_image) iterateur = 0;
TabSprite[ iterateur ].DrawReverseSprite( x , y , d);
if(WaitDelay())iterateur ++;
if( iterateur >= nb_image)
{
isend = true;
if(!waitatend)iterateur = 0;
else iterateur = nb_image - 1;
}
}
bool Animation::WaitDelay()
{
if(RTC_getTicks() - time > (delay / 7.8125))
{
time = RTC_getTicks();
return true;
}
return false;
}