Files
coffee_crisis/source/smartsprite.cpp
2022-09-27 13:06:04 +02:00

214 lines
3.8 KiB
C++

#include "const.h"
#include "smartsprite.h"
// Constructor
SmartSprite::SmartSprite(LTexture *texture, SDL_Renderer *renderer)
{
setTexture(texture);
setRenderer(renderer);
setPosX(0);
setPosY(0);
setWidth(0);
setHeight(0);
setVelX(0);
setVelY(0);
setAccelX(0);
setAccelY(0);
setSpriteClip(0, 0, 0, 0);
setEnabled(false);
setEnabledTimer(0);
onDestination = false;
destX = 0;
destY = 0;
setRotate(false);
setRotateSpeed(0);
setRotateAmount(0.0);
counter = 0;
// El Id siempre es >=0, por lo tanto si no se le asigna Id se queda en negativo
id = -1;
introEvents = nullptr;
}
// Destructor
SmartSprite::~SmartSprite()
{
}
// Obtiene el valor de la variable
bool SmartSprite::isEnabled()
{
return enabled;
}
// Establece el valor de la variable
void SmartSprite::setEnabled(bool state)
{
enabled = state;
}
// Obtiene el valor de la variable
Uint16 SmartSprite::getEnabledTimer()
{
return enabledCounter;
}
// Establece el valor de la variable
void SmartSprite::setEnabledTimer(Uint16 time)
{
enabledCounter = time;
}
// Establece el valor de la variable
void SmartSprite::setDestX(int value)
{
destX = value;
}
// Establece el valor de la variable
void SmartSprite::setDestY(int value)
{
destY = value;
}
// Obtiene el valor de la variable
int SmartSprite::getDestX()
{
return destX;
}
// Obtiene el valor de la variable
int SmartSprite::getDestY()
{
return destY;
}
// Actualiza la posición y comprueba si ha llegado a su destino
bool SmartSprite::update()
{
if (enabled)
{
MovingSprite::update();
// 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);
}
}
// Comprueba si ha llegado a su destino
if ((getPosX() == destX) && (getPosY() == destY))
onDestination = true;
else
onDestination = false;
// Si esta en el destino comprueba su contador
if (onDestination)
{
// Si el contador es mayor que cero, lo decrementa
if (enabledCounter > 0)
{
enabledCounter--;
}
// Si ha llegado a cero, deshabilita el objeto o manda el aviso en función de si tiene Id
else if (enabledCounter == 0)
{
if (id < 0)
{
enabled = false;
}
else
{
introEvents[id] = EVENT_COMPLETED;
}
}
}
}
return onDestination;
}
// Obtiene el valor de la variable
bool SmartSprite::isOnDestination()
{
return onDestination;
}
// Pinta el objeto en pantalla
void SmartSprite::render()
{
if (enabled)
MovingSprite::render();
}
// Establece el valor de la variable
void SmartSprite::setId(int id)
{
id = id;
}
// Establece el valor de la variable
void SmartSprite::setIntroEvents(Uint8 *value)
{
introEvents = value;
}