AssetManager.hxx 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. #pragma once
  2. #ifndef SNAKE_ASSETMANAGER_HXX
  3. #define SNAKE_ASSETMANAGER_HXX
  4. #include "../SDLRenderer.hxx"
  5. #include <SDL_ttf.h>
  6. #include <atomic>
  7. #include <filesystem>
  8. #include <thread>
  9. #include <unordered_map>
  10. class AssetManager final {
  11. public:
  12. explicit AssetManager(SDLRenderer& renderer);
  13. AssetManager(AssetManager const&) = delete;
  14. AssetManager& operator=(AssetManager const&) = delete;
  15. ~AssetManager();
  16. static AssetManager& instance() noexcept;
  17. float get_progress() const;
  18. SDL_Texture* get_texture_asset(std::string const& filepath);
  19. TTF_Font* get_font_asset(std::string const& filepath);
  20. private:
  21. void load_assets(std::filesystem::path const& asset_directory);
  22. static AssetManager* instance_;
  23. std::atomic<size_t> assets_loaded_{0u};
  24. std::atomic<size_t> total_assets_{0u};
  25. std::thread loading_thread_;
  26. SDLRenderer& renderer_;
  27. std::unordered_map<std::string, SDL_Texture*> texture_assets_;
  28. std::unordered_map<std::string, TTF_Font*> font_assets_;
  29. };
  30. #endif // SNAKE_ASSETMANAGER_HXX