SpriteLoader.cpp 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. #include "SpriteLoader.h"
  2. SpriteLoader::SpriteLoader()
  3. : m_folder(""), m_optiFormat(true)
  4. {}
  5. SpriteLoader::SpriteLoader(std::string folder)
  6. : m_folder(folder), m_optiFormat(true)
  7. {}
  8. SpriteLoader::SpriteLoader(std::string folder, bool optiFormat)
  9. : m_folder(folder), m_optiFormat(optiFormat)
  10. {}
  11. SpriteLoader::~SpriteLoader()
  12. {
  13. for( m_it = m_paquet.begin(); m_it != m_paquet.end(); m_it++ )
  14. {
  15. SDL_FreeSurface(m_it->second);
  16. m_it->second = 0x0;
  17. }
  18. }
  19. SDL_Surface* SpriteLoader::takeSprite(std::string nom)
  20. {
  21. // Cherche la surface dans le tableau
  22. m_it = m_paquet.find(nom);
  23. // Si la surface est déjà chargée, on la donne
  24. if (m_it != m_paquet.end())
  25. {
  26. return m_it->second;
  27. }
  28. // Sinon on la charge
  29. else
  30. {
  31. std::string source(m_folder + nom + ".bmp");
  32. m_paquet[nom] = SDL_LoadBMP(source.c_str());
  33. if (m_paquet[nom] == 0)
  34. {
  35. m_paquet[nom] = SDL_CreateRGBSurface(SDL_HWSURFACE, 40, 40, 32, 0, 0, 0, 0);
  36. std::cout << "La texture " <<nom<< " n'a pas pu être chargée." << std::endl << std::endl;
  37. }
  38. // Si on doit optimiser
  39. if (m_optiFormat)
  40. {
  41. SDL_Surface* src = m_paquet[nom];
  42. m_paquet[nom] = SDL_DisplayFormat(src);
  43. SDL_FreeSurface(src);
  44. }
  45. return m_paquet[nom];
  46. }
  47. }
  48. void SpriteLoader::destroySprite(std::string nom)
  49. {
  50. // Cherche la surface dans le tableau
  51. m_it = m_paquet.find(nom);
  52. // Si la surface est déjà chargée, on la donne
  53. if (m_it != m_paquet.end())
  54. {
  55. SDL_FreeSurface(m_it->second);
  56. m_paquet.erase(m_it);
  57. }
  58. }
  59. void SpriteLoader::addSprite(std::string nom, SDL_Surface* sprite)
  60. {
  61. m_it = m_paquet.find(nom);
  62. if (m_it == m_paquet.end())
  63. {
  64. m_paquet[nom] = sprite;
  65. return;
  66. }
  67. else
  68. {
  69. std::cout << "Attention ! La texture " <<nom<< " a déjà une surface associée. Destruction de la nouvelle surface." << std::endl;
  70. SDL_FreeSurface(sprite);
  71. }
  72. }
  73. void SpriteLoader::assignFolder(std::string folder)
  74. {
  75. m_folder = folder;
  76. }