86 lines
2.2 KiB
C++
86 lines
2.2 KiB
C++
#include "smart_sprite.h"
|
|
|
|
#include "moving_sprite.h" // Para MovingSprite
|
|
|
|
// Actualiza la posición y comprueba si ha llegado a su destino
|
|
void SmartSprite::update() {
|
|
if (enabled_) {
|
|
MovingSprite::update();
|
|
checkMove();
|
|
checkFinished();
|
|
}
|
|
}
|
|
|
|
// 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
|
|
void SmartSprite::checkFinished() {
|
|
// Comprueba si ha llegado a su destino
|
|
on_destination_ = (getPosX() == dest_x_ && getPosY() == dest_y_);
|
|
|
|
if (on_destination_) {
|
|
if (finished_counter_ == 0) {
|
|
finished_ = true;
|
|
} else {
|
|
--finished_counter_;
|
|
}
|
|
}
|
|
} |