#pragma once #include #include // Para shared_ptr #include "core/rendering/surface_sprite.hpp" // Para SSprite class Surface; // lines 8-8 // Clase SMovingSprite. Añade movimiento y flip al sprite class SurfaceMovingSprite : public SurfaceSprite { public: // Constructores SurfaceMovingSprite(std::shared_ptr surface, SDL_FRect pos, SDL_FlipMode flip); SurfaceMovingSprite(std::shared_ptr surface, SDL_FRect pos); explicit SurfaceMovingSprite(); explicit SurfaceMovingSprite(std::shared_ptr surface); ~SurfaceMovingSprite() override = default; // Actualización y renderizado void update(float delta_time) override; // Actualiza variables internas (time-based) void render() override; // Muestra el sprite por pantalla void render(Uint8 source_color, Uint8 target_color) override; // Renderiza con reemplazo de color // Gestión de estado void clear() override; // Reinicia todas las variables a cero // Getters de posición [[nodiscard]] auto getPosX() const -> float { return x_; } [[nodiscard]] auto getPosY() const -> float { return y_; } // Getters de velocidad [[nodiscard]] auto getVelX() const -> float { return vx_; } [[nodiscard]] auto getVelY() const -> float { return vy_; } // Getters de aceleración [[nodiscard]] auto getAccelX() const -> float { return ax_; } [[nodiscard]] auto getAccelY() const -> float { return ay_; } // Setters de posición void setPos(SDL_FRect rect); // Establece posición y tamaño del objeto void setPos(float x, float y); // Establece posición x, y void setPosX(float value); // Establece posición X void setPosY(float value); // Establece posición Y // Setters de velocidad void setVelX(float value) { vx_ = value; } void setVelY(float value) { vy_ = value; } // Setters de aceleración void setAccelX(float value) { ax_ = value; } void setAccelY(float value) { ay_ = value; } // Gestión de flip (volteo horizontal) void setFlip(SDL_FlipMode flip) { flip_ = flip; } // Establece modo de flip auto getFlip() -> SDL_FlipMode { return flip_; } // Obtiene modo de flip void flip() { flip_ = (flip_ == SDL_FLIP_HORIZONTAL) ? SDL_FLIP_NONE : SDL_FLIP_HORIZONTAL; } // Alterna flip horizontal protected: // Métodos protegidos void move(float delta_time); // Mueve el sprite (time-based) // Variables miembro - Posición float x_{0.0F}; // Posición en el eje X float y_{0.0F}; // Posición en el eje Y // Variables miembro - Velocidad (pixels/segundo) float vx_{0.0F}; // Velocidad en el eje X float vy_{0.0F}; // Velocidad en el eje Y // Variables miembro - Aceleración (pixels/segundo²) float ax_{0.0F}; // Aceleración en el eje X float ay_{0.0F}; // Aceleración en el eje Y // Variables miembro - Renderizado SDL_FlipMode flip_{SDL_FLIP_NONE}; // Modo de volteo del sprite };