Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #ifndef RESOURCE_HPP
- #define RESOURCE_HPP
- #include <SFML/Graphics/Texture.hpp>
- #include <SFML/Graphics/Image.hpp>
- #include <SFML/Graphics/Font.hpp>
- #include <memory>
- #include <array>
- template <class T>
- class BaseResource
- {
- public:
- BaseResource()
- {
- }
- virtual ~BaseResource() = default;
- BaseResource(const BaseResource&) = delete;
- const BaseResource& operator = (const BaseResource&) = delete;
- T& get(const std::string& path = "default")
- {
- // if path is valid - check current resources and return if found
- if (!path.empty())
- {
- auto res = m_resources.find(path);
- if (res != m_resources.end())
- {
- return *res->second;
- }
- }
- // else attempt to load resource from file
- std::unique_ptr<T> res = std::unique_ptr<T>(new T());
- std::string resPath("res/");
- if (path.empty() || !res->loadFromFile(resPath + path))
- {
- m_resources[path] = errorHandle();
- }
- else
- {
- m_resources[path] = std::move(res);
- }
- return *m_resources[path];
- }
- protected:
- virtual std::unique_ptr<T> errorHandle() = 0;
- private:
- std::map<std::string, std::unique_ptr<T>> m_resources;
- };
- class TextureResource final : public BaseResource<sf::Texture>
- {
- private:
- std::unique_ptr<sf::Texture> errorHandle() override
- {
- std::unique_ptr<sf::Texture> tex(new sf::Texture());
- sf::Image img;
- img.create(20u, 20u, sf::Color(127u, 127u, 255u));
- tex->loadFromImage(img);
- return std::move(tex);
- }
- };
- class ImageResource final : public BaseResource<sf::Image>
- {
- private:
- std::unique_ptr<sf::Image> errorHandle() override
- {
- std::unique_ptr<sf::Image> img(new sf::Image);
- img->create(20u, 20u, sf::Color::Green);
- return std::move(img);
- }
- };
- class FontResource final : public BaseResource<sf::Font>
- {
- private:
- std::unique_ptr<sf::Font> errorHandle() override
- {
- }
- };
- #endif
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement