Files
coffee_crisis_arcade_edition/source/smart_sprite.cpp

145 lines
2.5 KiB
C++

#include "smart_sprite.h"
class Texture;
// Constructor
SmartSprite::SmartSprite(std::shared_ptr<Texture> texture)
: AnimatedSprite(texture) {}
// Actualiza la posición y comprueba si ha llegado a su destino
void SmartSprite::update()
{
if (enabled_)
{
MovingSprite::update();
checkMove();
checkFinished();
}
}
// Establece el valor de la variable
void SmartSprite::setFinishedCounter(int value)
{
finished_counter_ = value;
}
// Establece el valor de la variable
void SmartSprite::setDestX(int x)
{
dest_x_ = x;
}
// Establece el valor de la variable
void SmartSprite::setDestY(int y)
{
dest_y_ = y;
}
// Obtiene el valor de la variable
int SmartSprite::getDestX() const
{
return dest_x_;
}
// Obtiene el valor de la variable
int SmartSprite::getDestY() const
{
return dest_y_;
}
// 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_;
}
}
}
// Obtiene el valor de la variable
bool SmartSprite::isOnDestination() const
{
return on_destination_;
}
// Obtiene el valor de la variable
bool SmartSprite::hasFinished() const
{
return finished_;
}
void SmartSprite::setEnabled(bool value)
{
enabled_ = value;
}