forked from jaildesigner-jailgames/coffee_crisis
release v1.3 beta 1
This commit is contained in:
228
source/smartsprite.cpp
Normal file
228
source/smartsprite.cpp
Normal file
@@ -0,0 +1,228 @@
|
||||
#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;
|
||||
|
||||
// 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 mEnabledTimer;
|
||||
}
|
||||
|
||||
// Establece el valor de la variable
|
||||
void SmartSprite::setEnabledTimer(Uint16 time)
|
||||
{
|
||||
mEnabledTimer = 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)
|
||||
{
|
||||
move();
|
||||
|
||||
// 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 (mEnabledTimer > 0)
|
||||
{
|
||||
--mEnabledTimer;
|
||||
}
|
||||
// Si ha llegado a cero, deshabilita el objeto o manda el aviso en función de si tiene Id
|
||||
else if (mEnabledTimer == 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;
|
||||
}
|
||||
Reference in New Issue
Block a user