#pragma once #include #include #include class Surface; class Sprite { public: Sprite(); Sprite(std::shared_ptr surface, float x, float y, float w, float h); Sprite(std::shared_ptr surface, SDL_FRect rect); explicit Sprite(std::shared_ptr surface); virtual ~Sprite() = default; virtual void update(float delta_time); virtual void render(); virtual void clear(); [[nodiscard]] auto getX() const -> float { return pos_.x; } [[nodiscard]] auto getY() const -> float { return pos_.y; } [[nodiscard]] auto getWidth() const -> float { return pos_.w; } [[nodiscard]] auto getHeight() const -> float { return pos_.h; } [[nodiscard]] auto getPosition() const -> SDL_FRect { return pos_; } [[nodiscard]] auto getClip() const -> SDL_FRect { return clip_; } [[nodiscard]] auto getSurface() const -> std::shared_ptr { return surface_; } auto getRect() -> SDL_FRect& { return pos_; } void setX(float x) { pos_.x = x; } void setY(float y) { pos_.y = y; } void setWidth(float w) { pos_.w = w; } void setHeight(float h) { pos_.h = h; } void setPosition(float x, float y); void setPosition(SDL_FPoint p); void setPosition(SDL_FRect r) { pos_ = r; } void incX(float value) { pos_.x += value; } void incY(float value) { pos_.y += value; } void setClip(SDL_FRect rect) { clip_ = rect; } void setClip(float x, float y, float w, float h) { clip_ = SDL_FRect{.x = x, .y = y, .w = w, .h = h}; } void setSurface(std::shared_ptr surface) { surface_ = std::move(surface); } protected: std::shared_ptr surface_{nullptr}; SDL_FRect pos_{.x = 0.0F, .y = 0.0F, .w = 0.0F, .h = 0.0F}; SDL_FRect clip_{.x = 0.0F, .y = 0.0F, .w = 0.0F, .h = 0.0F}; };