#pragma once #include // Para SDL_Rect, SDL_Point #include // Para SDL_RendererFlip #include // 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(1), 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, SDL_Rect pos, MovingSprite::Rotate rotate, float zoom_w, float zoom_h, SDL_RendererFlip flip); MovingSprite(std::shared_ptr texture, SDL_Rect pos); explicit MovingSprite(std::shared_ptr 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 { return x_; } float getPosY() const { return y_; } float getVelX() const { return vx_; } float getVelY() const { return vy_; } float getAccelX() const { return ax_; } float getAccelY() const { return ay_; } // 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); void setRotatingCenter(SDL_Point *point); // Activa o desactiva el efecto de rotación void setRotate(bool enable); // 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); };