#pragma once #include // Para shared_ptr #include "animated_sprite.h" // Para AnimatedSprite class Texture; // Clase SmartSprite: Sprite animado que se mueve hacia un destino y puede deshabilitarse automáticamente class SmartSprite : public AnimatedSprite { public: // --- Constructor y destructor --- explicit SmartSprite(std::shared_ptr texture) : AnimatedSprite(texture) {} ~SmartSprite() override = default; // --- Métodos principales --- void update() override; // Actualiza la posición y comprueba si ha llegado a su destino void render() override; // Dibuja el sprite // --- Getters --- auto getDestX() const -> int { return dest_x_; } // Obtiene la posición de destino en X auto getDestY() const -> int { return dest_y_; } // Obtiene la posición de destino en Y auto isOnDestination() const -> bool { return on_destination_; } // Indica si está en el destino auto hasFinished() const -> bool { return finished_; } // Indica si ya ha terminado // --- Setters --- void setFinishedCounter(int value) { finished_counter_ = value; } // Establece el contador para deshabilitarlo void setDestX(int x) { dest_x_ = x; } // Establece la posición de destino en X void setDestY(int y) { dest_y_ = y; } // Establece la posición de destino en Y void setEnabled(bool value) { enabled_ = value; } // Habilita o deshabilita el objeto private: // --- Variables internas --- bool on_destination_ = false; // Indica si está en el destino int dest_x_ = 0; // Posición de destino en el eje X int dest_y_ = 0; // Posición de destino en el eje Y int finished_counter_ = 0; // Contador para deshabilitarlo bool finished_ = false; // Indica si ya ha terminado bool enabled_ = false; // Indica si el objeto está habilitado // --- Métodos internos --- void checkFinished(); // Comprueba si ha terminado void checkMove(); // Comprueba el movimiento };