#include "const.h" #include "smartsprite.h" // Constructor SmartSprite::SmartSprite(LTexture *texture, SDL_Renderer *renderer) { setTexture(texture); setRenderer(renderer); // BORRABLE *** setPosX(0); setPosY(0); setWidth(0); setHeight(0); setVelX(0); setVelY(0); setAccelX(0); setAccelY(0); setSpriteClip(0, 0, 0, 0); setRotate(false); setRotateSpeed(0); setRotateAmount(0.0); setEnabled(false); setEnabledCounter(0); // HASTA AQUI onDestination = false; destX = 0; destY = 0; counter = 0; id = 0; finished = false; } // Destructor SmartSprite::~SmartSprite() { } // Pinta el objeto en pantalla void SmartSprite::render() { if (enabled) { MovingSprite::render(); } } // Obtiene el valor de la variable bool SmartSprite::isEnabled() { return enabled; } // Establece el valor de la variable void SmartSprite::setEnabled(bool enabled) { this->enabled = enabled; } // Obtiene el valor de la variable int SmartSprite::getEnabledCounter() { return enabledCounter; } // Establece el valor de la variable void SmartSprite::setEnabledCounter(int value) { enabledCounter = value; } // Establece el valor de la variable void SmartSprite::setDestX(int x) { destX = xPrev; } // Establece el valor de la variable void SmartSprite::setDestY(int y) { destY = y; } // Obtiene el valor de la variable int SmartSprite::getDestX() { return destX; } // Obtiene el valor de la variable int SmartSprite::getDestY() { return destY; } // Comprueba el movimiento void SmartSprite::checkMove() { // 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); } } } // Actualiza la posición y comprueba si ha llegado a su destino void SmartSprite::update() { if (!enabled) { return; } // Actualiza las variables internas del objeto MovingSprite::update(); // Comprueba el movimiento checkMove(); // Comprueba si ha llegado a su destino onDestination = (getPosX() == destX && getPosY() == destY) ? true : false; if (onDestination) { // Si esta en el destino comprueba su contador if (enabledCounter == 0) { // Si ha llegado a cero, deshabilita el objeto y lo marca como finalizado enabled = false; finished = true; } else { // Si no ha llegado a cero, decrementa el contador enabledCounter--; } } } // Obtiene el valor de la variable bool SmartSprite::isOnDestination() { return onDestination; } // Establece el valor de la variable void SmartSprite::setId(int id) { this->id = id; } // Obtiene el valor de la variable int SmartSprite::getId() { return id; } // Obtiene el valor de la variable bool SmartSprite::hasFinished() { return finished; }