#include "const.h" #include "smartsprite.h" // Constructor SmartSprite::SmartSprite(LTexture *texture, SDL_Renderer *renderer) { setTexture(texture); setRenderer(renderer); } // Destructor SmartSprite::~SmartSprite() { } // Inicializador void SmartSprite::init() { 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; } // 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; }