214 lines
3.8 KiB
C++
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;
|
|
} |