#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; } // Establece el valor de la variable void SmartSprite::setRotate(bool value) { mRotate = value; } // Establece el valor de la variable void SmartSprite::setRotateSpeed(Uint16 value) { mRotateSpeed = value; } // Establece el valor de la variable void SmartSprite::setRotateAmount(double value) { mRotateAmount = value; } // Obtiene el valor de la variable int SmartSprite::getDestX() { return mDestX; } // Obtiene el valor de la variable int SmartSprite::getDestY() { return mDestY; } // Obtiene el valor de la variable bool SmartSprite::getRotate() { return mRotate; } // Obtiene el valor de la variable Uint16 SmartSprite::getRotateSpeed() { return mRotateSpeed; } // Establece la rotacion void SmartSprite::rotate() { if (mRotate) { if (mCounter % mRotateSpeed == 0) { incAngle(mRotateAmount); } } } // Actualiza la posición y comprueba si ha llegado a su destino bool SmartSprite::update() { if (mEnabled) { move(); rotate(); // 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; } } } mCounter++; mCounter %= 65000; } 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; }