#include "smart_sprite.hpp" #include "moving_sprite.hpp" // Para MovingSprite // Actualiza la posición y comprueba si ha llegado a su destino (time-based) void SmartSprite::update(float delta_time) { if (enabled_) { MovingSprite::update(delta_time); checkMove(); checkFinished(delta_time); } } // Dibuja el sprite void SmartSprite::render() { if (enabled_) { MovingSprite::render(); } } // Comprueba el movimiento void SmartSprite::checkMove() { // Comprueba si se desplaza en el eje X hacia la derecha if (getAccelX() > 0 || getVelX() > 0) { // Comprueba si ha llegado al destino if (getPosX() > dest_x_) { // Lo coloca en posición setPosX(dest_x_); // Lo detiene setVelX(0.0F); setAccelX(0.0F); } } // Comprueba si se desplaza en el eje X hacia la izquierda else if (getAccelX() < 0 || getVelX() < 0) { // Comprueba si ha llegado al destino if (getPosX() < dest_x_) { // Lo coloca en posición setPosX(dest_x_); // Lo detiene setVelX(0.0F); setAccelX(0.0F); } } // Comprueba si se desplaza en el eje Y hacia abajo if (getAccelY() > 0 || getVelY() > 0) { // Comprueba si ha llegado al destino if (getPosY() > dest_y_) { // Lo coloca en posición setPosY(dest_y_); // Lo detiene setVelY(0.0F); setAccelY(0.0F); } } // Comprueba si se desplaza en el eje Y hacia arriba else if (getAccelY() < 0 || getVelY() < 0) { // Comprueba si ha llegado al destino if (getPosY() < dest_y_) { // Lo coloca en posición setPosY(dest_y_); // Lo detiene setVelY(0.0F); setAccelY(0.0F); } } } // Comprueba si ha terminado (time-based) void SmartSprite::checkFinished(float delta_time) { // Comprueba si ha llegado a su destino on_destination_ = (getPosX() == dest_x_ && getPosY() == dest_y_); if (on_destination_) { if (finished_delay_ms_ == 0.0F) { finished_ = true; } else { finished_timer_ += delta_time; if (finished_timer_ >= finished_delay_ms_) { finished_ = true; } } } }