#include "sprite.hpp" #include #include #include #include #include #include #include "log.hpp" #include "math.hpp" Sprite::Sprite() : m_Texture(nullptr, SDL_DestroyTexture) {} Sprite::Sprite(std::string path, Vec2D center) : Sprite() { LoadImage(path, center); } Sprite::~Sprite() { LOG_DEBUG("."); } void Sprite::LoadImage(std::string path, Vec2D image_center) { LOG_INFO("Loading image ", path); assert(m_Renderer != nullptr); auto surface = std::unique_ptr( IMG_Load(path.c_str()), SDL_DestroySurface); if (surface == nullptr) { LOG_ERROR("IMG_Load failed to load ", path); throw std::runtime_error("Failed to load resources"); } m_Texture = std::unique_ptr( SDL_CreateTextureFromSurface(m_Renderer.get(), surface.get()), SDL_DestroyTexture); if (m_Texture == nullptr) { LOG_ERROR("SDL_CreateTextureFromSurface failed"); throw std::runtime_error("Failed to load resources"); } float w, h; SDL_GetTextureSize(m_Texture.get(), &w, &h); m_Size = {w, h}; m_ImageCenter = image_center; } // Renderer is shared for all class instances - we need it in order // to create textures from images void Sprite::SetRenderer(std::shared_ptr renderer) { m_Renderer = renderer; } std::shared_ptr Sprite::m_Renderer = nullptr;