sprite_manager.cpp 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. // SuperTux
  2. // Copyright (C) 2006 Matthias Braun <matze@braunis.de>
  3. // 2023-2024 Vankata453
  4. //
  5. // This program is free software: you can redistribute it and/or modify
  6. // it under the terms of the GNU General Public License as published by
  7. // the Free Software Foundation, either version 3 of the License, or
  8. // (at your option) any later version.
  9. //
  10. // This program is distributed in the hope that it will be useful,
  11. // but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  13. // GNU General Public License for more details.
  14. //
  15. // You should have received a copy of the GNU General Public License
  16. // along with this program. If not, see <http://www.gnu.org/licenses/>.
  17. #include "sprite/sprite_manager.hpp"
  18. #include "sprite/sprite.hpp"
  19. SpriteManager::SpriteManager() :
  20. m_sprites()
  21. {
  22. }
  23. SpritePtr
  24. SpriteManager::create(const std::string& name)
  25. {
  26. Sprites::iterator i = m_sprites.find(name);
  27. SpriteData* data;
  28. if (i == m_sprites.end())
  29. {
  30. // Try loading the sprite file.
  31. data = load(name);
  32. }
  33. else
  34. {
  35. data = i->second.get();
  36. }
  37. return SpritePtr(new Sprite(*data));
  38. }
  39. SpriteData*
  40. SpriteManager::load(const std::string& filename)
  41. {
  42. m_sprites[filename] = std::make_unique<SpriteData>(filename);
  43. return m_sprites[filename].get();
  44. }
  45. void
  46. SpriteManager::reload()
  47. {
  48. for (const auto& sprite_data : m_sprites)
  49. sprite_data.second->load();
  50. }
  51. /* EOF */