77 lines
3.3 KiB
C++
77 lines
3.3 KiB
C++
#pragma once
|
|
|
|
#include <SDL3/SDL.h>
|
|
|
|
#include <memory> // 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> surface, SDL_FRect pos, SDL_FlipMode flip);
|
|
SurfaceMovingSprite(std::shared_ptr<Surface> surface, SDL_FRect pos);
|
|
explicit SurfaceMovingSprite();
|
|
explicit SurfaceMovingSprite(std::shared_ptr<Surface> 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
|
|
}; |