diff --git a/source/notifier.cpp b/source/notifier.cpp index 1f86289..506a2da 100644 --- a/source/notifier.cpp +++ b/source/notifier.cpp @@ -10,14 +10,15 @@ #include "sprite.h" // Para Sprite #include "text.h" // Para Text #include "texture.h" // Para Texture +#include "resource.h" // [SINGLETON] Hay que definir las variables estáticas, desde el .h sólo la hemos declarado Notifier *Notifier::notifier_ = nullptr; // [SINGLETON] Crearemos el objeto screen con esta función estática -void Notifier::init(const std::string &icon_file, std::shared_ptr text, const std::string &sound_file) +void Notifier::init(const std::string &icon_file, std::shared_ptr text) { - Notifier::notifier_ = new Notifier(icon_file, text, sound_file); + Notifier::notifier_ = new Notifier(icon_file, text); } // [SINGLETON] Destruiremos el objeto screen con esta función estática @@ -33,21 +34,14 @@ Notifier *Notifier::get() } // Constructor -Notifier::Notifier(std::string icon_file, std::shared_ptr text, const std::string &sound_file) +Notifier::Notifier(std::string icon_file, std::shared_ptr text) : renderer_(Screen::get()->getRenderer()), icon_texture_(!icon_file.empty() ? std::make_unique(renderer_, icon_file) : nullptr), text_(text), bg_color_(param.notification.color), wait_time_(150), stack_(false), - has_icons_(!icon_file.empty()), - sound_(JA_LoadSound(sound_file.c_str())) {} - -// Destructor -Notifier::~Notifier() -{ - JA_DeleteSound(sound_); -} + has_icons_(!icon_file.empty()) {} // Dibuja las notificaciones por pantalla void Notifier::render() @@ -80,8 +74,9 @@ void Notifier::update() if (param.notification.sound) { if (notifications_[i].status == NotificationStatus::RISING) - { // Reproduce el sonido de la notificación - JA_PlaySound(sound_); + { + // Reproduce el sonido de la notificación + JA_PlaySound(Resource::get()->getSound("notify.wav")); } } } diff --git a/source/notifier.h b/source/notifier.h index 6c4ea66..06b2540 100644 --- a/source/notifier.h +++ b/source/notifier.h @@ -62,7 +62,6 @@ private: std::vector notifications_; // La lista de notificaciones activas bool stack_; // Indica si las notificaciones se apilan bool has_icons_; // Indica si el notificador tiene textura para iconos - JA_Sound_t *sound_; // Sonido a reproducir cuando suena la notificación // Elimina las notificaciones finalizadas void clearFinishedNotifications(); @@ -73,14 +72,14 @@ private: // [SINGLETON] Ahora el constructor y el destructor son privados, para no poder crear objetos notifier desde fuera // Constructor - Notifier(std::string icon_file, std::shared_ptr text, const std::string &sound_file); + Notifier(std::string icon_file, std::shared_ptr text); // Destructor - ~Notifier(); + ~Notifier() = default; public: // [SINGLETON] Crearemos el objeto notifier con esta función estática - static void init(const std::string &icon_file, std::shared_ptr text, const std::string &sound_file); + static void init(const std::string &icon_file, std::shared_ptr text); // [SINGLETON] Destruiremos el objeto notifier con esta función estática static void destroy(); diff --git a/source/resource.cpp b/source/resource.cpp index b183068..b60a051 100644 --- a/source/resource.cpp +++ b/source/resource.cpp @@ -41,8 +41,8 @@ Resource::Resource() // Vacia todos los vectores de recursos void Resource::clear() { - sounds_.clear(); - musics_.clear(); + clearSounds(); + clearMusics(); textures_.clear(); text_files_.clear(); texts_.clear(); @@ -332,3 +332,33 @@ void Resource::createText() printWithDots("Text : ", resource.first, "[ DONE ]"); } } + +// Vacía el vector de sonidos +void Resource::clearSounds() +{ + // Itera sobre el vector y libera los recursos asociados a cada JA_Sound_t + for (auto &sound : sounds_) + { + if (sound.sound) + { + JA_DeleteSound(sound.sound); + sound.sound = nullptr; + } + } + sounds_.clear(); // Limpia el vector después de liberar todos los recursos +} + +// Vacía el vector de musicas +void Resource::clearMusics() +{ + // Itera sobre el vector y libera los recursos asociados a cada JA_Music_t + for (auto &music : musics_) + { + if (music.music) + { + JA_DeleteMusic(music.music); + music.music = nullptr; + } + } + musics_.clear(); // Limpia el vector después de liberar todos los recursos +} \ No newline at end of file diff --git a/source/resource.h b/source/resource.h index 516467d..a17265b 100644 --- a/source/resource.h +++ b/source/resource.h @@ -123,6 +123,12 @@ private: // Carga todos los recursos void load(); + // Vacía el vector de sonidos + void clearSounds(); + + // Vacía el vector de musicas + void clearMusics(); + // [SINGLETON] Ahora el constructor y el destructor son privados, para no poder crear objetos resource desde fuera // Constructor