Files
coffee_crisis/source/smartsprite.cpp
2022-09-27 22:39:27 +02:00

217 lines
3.7 KiB
C++

#include "const.h"
#include "smartsprite.h"
// Constructor
SmartSprite::SmartSprite(LTexture *texture, SDL_Renderer *renderer)
{
setTexture(texture);
setRenderer(renderer);
// BORRABLE ***
setPosX(0);
setPosY(0);
setWidth(0);
setHeight(0);
setVelX(0);
setVelY(0);
setAccelX(0);
setAccelY(0);
setSpriteClip(0, 0, 0, 0);
setRotate(false);
setRotateSpeed(0);
setRotateAmount(0.0);
setEnabled(false);
setEnabledCounter(0);
// HASTA AQUI
onDestination = false;
destX = 0;
destY = 0;
counter = 0;
id = 0;
finished = false;
}
// Destructor
SmartSprite::~SmartSprite()
{
}
// Pinta el objeto en pantalla
void SmartSprite::render()
{
if (enabled)
{
MovingSprite::render();
}
}
// Obtiene el valor de la variable
bool SmartSprite::isEnabled()
{
return enabled;
}
// Establece el valor de la variable
void SmartSprite::setEnabled(bool enabled)
{
this->enabled = enabled;
}
// Obtiene el valor de la variable
int SmartSprite::getEnabledCounter()
{
return enabledCounter;
}
// Establece el valor de la variable
void SmartSprite::setEnabledCounter(int value)
{
enabledCounter = value;
}
// Establece el valor de la variable
void SmartSprite::setDestX(int x)
{
destX = xPrev;
}
// Establece el valor de la variable
void SmartSprite::setDestY(int y)
{
destY = y;
}
// Obtiene el valor de la variable
int SmartSprite::getDestX()
{
return destX;
}
// Obtiene el valor de la variable
int SmartSprite::getDestY()
{
return destY;
}
// Comprueba el movimiento
void SmartSprite::checkMove()
{
// Comprueba si se desplaza en el eje X hacia la derecha
if ((getAccelX() > 0) || ((getAccelX() == 0) && (getVelX() > 0)))
{
// Comprueba si ha llegado al destino
if (getPosX() > destX)
{
// Lo coloca en posición
setPosX(destX);
// Lo detiene
setVelX(0.0f);
setAccelX(0.0f);
}
}
// Comprueba si se desplaza en el eje X hacia la izquierda
else if ((getAccelX() < 0) || ((getAccelX() == 0) && (getVelX() < 0)))
{
// Comprueba si ha llegado al destino
if (getPosX() < destX)
{
// Lo coloca en posición
setPosX(destX);
// Lo detiene
setVelX(0.0f);
setAccelX(0.0f);
}
}
// Comprueba si se desplaza en el eje Y hacia abajo
if ((getAccelY() > 0) || ((getAccelY() == 0) && (getVelY() > 0)))
{
// Comprueba si ha llegado al destino
if (getPosY() > destY)
{
// Lo coloca en posición
setPosY(destY);
// Lo detiene
setVelY(0.0f);
setAccelY(0.0f);
}
}
// Comprueba si se desplaza en el eje Y hacia arriba
else if ((getAccelY() < 0) || ((getAccelY() == 0) && (getVelY() < 0)))
{
// Comprueba si ha llegado al destino
if (getPosY() < destY)
{
// Lo coloca en posición
setPosY(destY);
// Lo detiene
setVelY(0.0f);
setAccelY(0.0f);
}
}
}
// Actualiza la posición y comprueba si ha llegado a su destino
void SmartSprite::update()
{
if (!enabled)
{
return;
}
// Actualiza las variables internas del objeto
MovingSprite::update();
// Comprueba el movimiento
checkMove();
// Comprueba si ha llegado a su destino
onDestination = (getPosX() == destX && getPosY() == destY) ? true : false;
if (onDestination)
{ // Si esta en el destino comprueba su contador
if (enabledCounter == 0)
{ // Si ha llegado a cero, deshabilita el objeto y lo marca como finalizado
enabled = false;
finished = true;
}
else
{ // Si no ha llegado a cero, decrementa el contador
enabledCounter--;
}
}
}
// Obtiene el valor de la variable
bool SmartSprite::isOnDestination()
{
return onDestination;
}
// Establece el valor de la variable
void SmartSprite::setId(int id)
{
this->id = id;
}
// Obtiene el valor de la variable
int SmartSprite::getId()
{
return id;
}
// Obtiene el valor de la variable
bool SmartSprite::hasFinished()
{
return finished;
}