Advertisement
Guest User

Untitled

a guest
Jan 2nd, 2016
210
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.10 KB | None | 0 0
  1. #ifndef RESOURCE_HPP
  2. #define RESOURCE_HPP
  3.  
  4. #include <SFML/Graphics/Texture.hpp>
  5. #include <SFML/Graphics/Image.hpp>
  6. #include <SFML/Graphics/Font.hpp>
  7.  
  8. #include <memory>
  9. #include <array>
  10.  
  11. template <class T>
  12. class BaseResource
  13. {
  14. public:
  15.     BaseResource()
  16.     {
  17.  
  18.     }
  19.     virtual ~BaseResource() = default;
  20.     BaseResource(const BaseResource&) = delete;
  21.     const BaseResource& operator = (const BaseResource&) = delete;
  22.  
  23.     T& get(const std::string& path = "default")
  24.     {
  25.         // if path is valid - check current resources and return if found
  26.         if (!path.empty())
  27.         {
  28.             auto res = m_resources.find(path);
  29.             if (res != m_resources.end())
  30.             {
  31.                 return *res->second;
  32.             }
  33.         }
  34.  
  35.         // else attempt to load resource from file
  36.         std::unique_ptr<T> res = std::unique_ptr<T>(new T());
  37.  
  38.         std::string resPath("res/");
  39.  
  40.         if (path.empty() || !res->loadFromFile(resPath + path))
  41.         {
  42.             m_resources[path] = errorHandle();
  43.         }
  44.         else
  45.         {
  46.             m_resources[path] = std::move(res);
  47.         }
  48.  
  49.         return *m_resources[path];
  50.     }
  51.  
  52. protected:
  53.     virtual std::unique_ptr<T> errorHandle() = 0;
  54.  
  55. private:
  56.     std::map<std::string, std::unique_ptr<T>> m_resources;
  57. };
  58.  
  59. class TextureResource final : public BaseResource<sf::Texture>
  60. {
  61. private:
  62.     std::unique_ptr<sf::Texture> errorHandle() override
  63.     {
  64.         std::unique_ptr<sf::Texture> tex(new sf::Texture());
  65.         sf::Image img;
  66.         img.create(20u, 20u, sf::Color(127u, 127u, 255u));
  67.         tex->loadFromImage(img);
  68.         return std::move(tex);
  69.     }
  70. };
  71.  
  72. class ImageResource final : public BaseResource<sf::Image>
  73. {
  74. private:
  75.     std::unique_ptr<sf::Image> errorHandle() override
  76.     {
  77.         std::unique_ptr<sf::Image> img(new sf::Image);
  78.         img->create(20u, 20u, sf::Color::Green);
  79.         return std::move(img);
  80.     }
  81. };
  82.  
  83. class FontResource final : public BaseResource<sf::Font>
  84. {
  85. private:
  86.     std::unique_ptr<sf::Font> errorHandle() override
  87.     {
  88.  
  89.     }
  90. };
  91.  
  92. #endif
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement