forked from jaildesigner-jailgames/jaildoctors_dilemma
233 lines
4.0 KiB
C++
233 lines
4.0 KiB
C++
#include "const.h"
|
|
#include "smartsprite.h"
|
|
|
|
// Constructor
|
|
SmartSprite::SmartSprite()
|
|
{
|
|
//init(nullptr, nullptr);
|
|
}
|
|
|
|
// Destructor
|
|
SmartSprite::~SmartSprite()
|
|
{
|
|
//init(nullptr, nullptr);
|
|
}
|
|
|
|
// Inicializador
|
|
void SmartSprite::init(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);
|
|
|
|
mIsOnDestination = false;
|
|
mDestX = 0;
|
|
mDestY = 0;
|
|
|
|
setRotate(false);
|
|
setRotateSpeed(0);
|
|
setRotateAmount(0.0);
|
|
|
|
mCounter = 0;
|
|
|
|
// El Id siempre es >=0, por lo tanto si no se le asigna Id se queda en negativo
|
|
mId = -1;
|
|
|
|
mIntroEvents = nullptr;
|
|
}
|
|
|
|
// Pone a cero los elementos del objeto
|
|
void SmartSprite::erase()
|
|
{
|
|
init(nullptr, nullptr);
|
|
}
|
|
|
|
// Obtiene el valor de la variable
|
|
bool SmartSprite::isEnabled()
|
|
{
|
|
return mEnabled;
|
|
}
|
|
|
|
// Establece el valor de la variable
|
|
void SmartSprite::setEnabled(bool state)
|
|
{
|
|
mEnabled = state;
|
|
}
|
|
|
|
// Obtiene el valor de la variable
|
|
Uint16 SmartSprite::getEnabledTimer()
|
|
{
|
|
return mEnabledCounter;
|
|
}
|
|
|
|
// Establece el valor de la variable
|
|
void SmartSprite::setEnabledTimer(Uint16 time)
|
|
{
|
|
mEnabledCounter = time;
|
|
}
|
|
|
|
// Establece el valor de la variable
|
|
void SmartSprite::setDestX(int value)
|
|
{
|
|
mDestX = value;
|
|
}
|
|
|
|
// Establece el valor de la variable
|
|
void SmartSprite::setDestY(int value)
|
|
{
|
|
mDestY = value;
|
|
}
|
|
|
|
// Obtiene el valor de la variable
|
|
int SmartSprite::getDestX()
|
|
{
|
|
return mDestX;
|
|
}
|
|
|
|
// Obtiene el valor de la variable
|
|
int SmartSprite::getDestY()
|
|
{
|
|
return mDestY;
|
|
}
|
|
|
|
// Actualiza la posición y comprueba si ha llegado a su destino
|
|
bool SmartSprite::update()
|
|
{
|
|
if (mEnabled)
|
|
{
|
|
MovingSprite::update();
|
|
|
|
// Comprueba si se desplaza en el eje X hacia la derecha
|
|
if ((getAccelX() > 0) || ((getAccelX() == 0) && (getVelX() > 0)))
|
|
{
|
|
// Comprueba si hemos llegado al destino
|
|
if (getPosX() > mDestX)
|
|
{
|
|
// Lo coloca en posición
|
|
setPosX(mDestX);
|
|
|
|
// 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 hemos llegado al destino
|
|
if (getPosX() < mDestX)
|
|
{
|
|
// Lo coloca en posición
|
|
setPosX(mDestX);
|
|
|
|
// 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 hemos llegado al destino
|
|
if (getPosY() > mDestY)
|
|
{
|
|
// Lo coloca en posición
|
|
setPosY(mDestY);
|
|
|
|
// 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 hemos llegado al destino
|
|
if (getPosY() < mDestY)
|
|
{
|
|
// Lo coloca en posición
|
|
setPosY(mDestY);
|
|
|
|
// Lo detiene
|
|
setVelY(0.0f);
|
|
setAccelY(0.0f);
|
|
}
|
|
}
|
|
|
|
// Comprueba si ha llegado a su destino
|
|
if ((getPosX() == mDestX) && (getPosY() == mDestY))
|
|
{
|
|
mIsOnDestination = true;
|
|
}
|
|
else
|
|
{
|
|
mIsOnDestination = false;
|
|
}
|
|
|
|
// Si esta en el destino comprueba su contador
|
|
if (mIsOnDestination)
|
|
{
|
|
// Si el contador es mayor que cero, lo decrementa
|
|
if (mEnabledCounter > 0)
|
|
{
|
|
--mEnabledCounter;
|
|
}
|
|
// Si ha llegado a cero, deshabilita el objeto o manda el aviso en función de si tiene Id
|
|
else if (mEnabledCounter == 0)
|
|
{
|
|
if (mId < 0)
|
|
{
|
|
mEnabled = false;
|
|
}
|
|
else
|
|
{
|
|
mIntroEvents[mId] = EVENT_COMPLETED;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return mIsOnDestination;
|
|
}
|
|
|
|
// Obtiene el valor de la variable
|
|
bool SmartSprite::isOnDestination()
|
|
{
|
|
return mIsOnDestination;
|
|
}
|
|
|
|
// Pinta el objeto en pantalla
|
|
void SmartSprite::render()
|
|
{
|
|
if (mEnabled)
|
|
{
|
|
MovingSprite::render();
|
|
}
|
|
}
|
|
|
|
// Establece el valor de la variable
|
|
void SmartSprite::setId(int id)
|
|
{
|
|
mId = id;
|
|
}
|
|
|
|
// Establece el valor de la variable
|
|
void SmartSprite::setIntroEvents(Uint8 *value)
|
|
{
|
|
mIntroEvents = value;
|
|
} |