Acabada de perfilar la classe PathSprite Menjeades declaracions de utils.h als fitxers que toca
122 lines
3.6 KiB
C++
122 lines
3.6 KiB
C++
#pragma once
|
|
|
|
#include <SDL2/SDL_rect.h> // Para SDL_Rect, SDL_Point
|
|
#include <SDL2/SDL_render.h> // Para SDL_RendererFlip
|
|
#include <memory> // Para shared_ptr
|
|
#include "sprite.h" // Para Sprite
|
|
class Texture; // lines 8-8
|
|
|
|
// Clase MovingSprite. Añade movimiento y efectos de rotación, zoom y flip al sprite
|
|
class MovingSprite : public Sprite
|
|
{
|
|
public:
|
|
struct Rotate
|
|
{
|
|
bool enabled; // Indica si ha de rotar
|
|
int counter; // Contador
|
|
int speed; // Velocidad de giro
|
|
double angle; // Angulo para dibujarlo
|
|
float amount; // Cantidad de grados a girar en cada iteración
|
|
SDL_Point *center; // Centro de rotación
|
|
|
|
Rotate() : enabled(false), counter(0), speed(0), angle(0.0), amount(0.0f), center(nullptr) {}
|
|
};
|
|
|
|
protected:
|
|
float x_; // Posición en el eje X
|
|
float y_; // Posición en el eje Y
|
|
|
|
float vx_ = 0.0f; // Velocidad en el eje X. Cantidad de pixeles a desplazarse
|
|
float vy_ = 0.0f; // Velocidad en el eje Y. Cantidad de pixeles a desplazarse
|
|
|
|
float ax_ = 0.0f; // Aceleración en el eje X. Variación de la velocidad
|
|
float ay_ = 0.0f; // Aceleración en el eje Y. Variación de la velocidad
|
|
|
|
Rotate rotate_; // Variables usada para controlar la rotación del sprite
|
|
float zoom_w_; // Zoom aplicado a la anchura
|
|
float zoom_h_; // Zoom aplicado a la altura
|
|
SDL_RendererFlip flip_; // Indica como se voltea el sprite
|
|
|
|
// Incrementa el valor del ángulo
|
|
void updateAngle();
|
|
|
|
// Mueve el sprite
|
|
void move();
|
|
|
|
// Rota el sprite
|
|
void rotate();
|
|
|
|
public:
|
|
// Constructor
|
|
MovingSprite(std::shared_ptr<Texture> texture, SDL_Rect pos, MovingSprite::Rotate rotate, float zoom_w, float zoom_h, SDL_RendererFlip flip);
|
|
MovingSprite(std::shared_ptr<Texture> texture, SDL_Rect pos);
|
|
explicit MovingSprite(std::shared_ptr<Texture> texture);
|
|
|
|
// Destructor
|
|
virtual ~MovingSprite() = default;
|
|
|
|
// Actualiza las variables internas del objeto
|
|
virtual void update();
|
|
|
|
// Reinicia todas las variables a cero
|
|
void clear() override;
|
|
|
|
// Muestra el sprite por pantalla
|
|
void render() override;
|
|
|
|
// Obtiene la variable
|
|
float getPosX() const;
|
|
float getPosY() const;
|
|
float getVelX() const;
|
|
float getVelY() const;
|
|
float getAccelX() const;
|
|
float getAccelY() const;
|
|
|
|
// Establece la variable
|
|
void setVelX(float value);
|
|
void setVelY(float value);
|
|
void setAccelX(float value);
|
|
void setAccelY(float value);
|
|
|
|
// Obten el valor de la variable
|
|
bool isRotating() const;
|
|
|
|
// Establece el valor de la variable
|
|
void setZoomW(float value);
|
|
void setZoomH(float value);
|
|
|
|
// Establece el valor de la variable
|
|
void setAngle(double vaue);
|
|
|
|
// Activa o desactiva el efecto derotación
|
|
void enableRotate();
|
|
void disableRotate();
|
|
|
|
// Establece el valor de la variable
|
|
void setRotateSpeed(int value);
|
|
void setRotateAmount(double value);
|
|
|
|
// Cambia el sentido de la rotación
|
|
void switchRotate();
|
|
|
|
// Establece el valor de la variable
|
|
void setFlip(SDL_RendererFlip flip);
|
|
|
|
// Gira el sprite horizontalmente
|
|
void flip();
|
|
|
|
// Obtiene el valor de la variable
|
|
SDL_RendererFlip getFlip();
|
|
|
|
// Establece la posición y_ el tamaño del objeto
|
|
void setPos(SDL_Rect rect);
|
|
|
|
// Establece el valor de las variables
|
|
void setPos(float x, float y);
|
|
|
|
// Establece el valor de la variable
|
|
void setPosX(float value);
|
|
|
|
// Establece el valor de la variable
|
|
void setPosY(float value);
|
|
}; |