diff --git a/lib/Ray/sources/Audio/Music.cpp b/lib/Ray/sources/Audio/Music.cpp index b397c04e..db3dae78 100644 --- a/lib/Ray/sources/Audio/Music.cpp +++ b/lib/Ray/sources/Audio/Music.cpp @@ -8,57 +8,50 @@ #include "Audio/Music.hpp" #include +RAY::Cache<::Music> RAY::Audio::Music::_musicsCache(LoadMusicStream, UnloadMusicStream); + RAY::Audio::Music::Music(const std::string &path): - _music(LoadMusicStream(path.c_str())) + _music(this->_musicsCache.fetch(path.c_str())) { } -RAY::Audio::Music::Music() -{ -} - -RAY::Audio::Music::~Music() -{ - UnloadMusicStream(_music); -} - bool RAY::Audio::Music::isPlaying(void) { - return IsMusicStreamPlaying(_music); + return IsMusicStreamPlaying(*_music); } RAY::Audio::Music &RAY::Audio::Music::play(void) { - PlayMusicStream(_music); + PlayMusicStream(*_music); return *this; } RAY::Audio::Music &RAY::Audio::Music::stop(void) { - StopMusicStream(_music); + StopMusicStream(*_music); return *this; } RAY::Audio::Music &RAY::Audio::Music::pause(void) { - PauseMusicStream(_music); + PauseMusicStream(*_music); return *this; } RAY::Audio::Music &RAY::Audio::Music::resume(void) { - ResumeMusicStream(_music); + ResumeMusicStream(*_music); return *this; } RAY::Audio::Music &RAY::Audio::Music::setVolume(float volume) { - SetMusicVolume(_music, volume); + SetMusicVolume(*_music, volume); return *this; } RAY::Audio::Music &RAY::Audio::Music::setPitch(float pitch) { - SetMusicPitch(_music, pitch); + SetMusicPitch(*_music, pitch); return *this; } diff --git a/lib/Ray/sources/Audio/Music.hpp b/lib/Ray/sources/Audio/Music.hpp index 85f31c52..c28e8089 100644 --- a/lib/Ray/sources/Audio/Music.hpp +++ b/lib/Ray/sources/Audio/Music.hpp @@ -9,9 +9,8 @@ #define MUSIC_HPP_ #include "Audio/IAudio.hpp" - #include - +#include "Utils/Cache.hpp" namespace RAY::Audio { @@ -22,11 +21,8 @@ namespace RAY::Audio //! @brief Load Music stream from file Music(const std::string &path); - //! @brief Default constructor - Music(); - //! @brief Default destructor - ~Music(); + ~Music() = default; //! @brief A copy constructor constructor Music(const Music &Music) = default; @@ -56,7 +52,9 @@ namespace RAY::Audio Music &setPitch(float pitch) override; private: - ::Music _music; + std::shared_ptr<::Music> _music; + + static RAY::Cache<::Music> _musicsCache; }; } diff --git a/lib/Ray/sources/Audio/Sound.cpp b/lib/Ray/sources/Audio/Sound.cpp index 4bfcb95a..da8df7ba 100644 --- a/lib/Ray/sources/Audio/Sound.cpp +++ b/lib/Ray/sources/Audio/Sound.cpp @@ -7,58 +7,51 @@ #include "Audio/Sound.hpp" +RAY::Cache<::Sound> RAY::Audio::Sound::_soundsCache(LoadSound, UnloadSound); + RAY::Audio::Sound::Sound(const std::string &path): - _sound(LoadSound(path.c_str())) + _sound(_soundsCache.fetch(path.c_str())) { } -RAY::Audio::Sound::Sound() -{ -} - -RAY::Audio::Sound::~Sound() -{ - UnloadSound(_sound); -} - bool RAY::Audio::Sound::isPlaying(void) { - return IsSoundPlaying(_sound); + return IsSoundPlaying(*_sound); } RAY::Audio::Sound &RAY::Audio::Sound::play(void) { - PlaySound(_sound); + PlaySound(*_sound); return *this; } RAY::Audio::Sound &RAY::Audio::Sound::stop(void) { - StopSound(_sound); + StopSound(*_sound); return *this; } RAY::Audio::Sound &RAY::Audio::Sound::pause(void) { - PauseSound(_sound); + PauseSound(*_sound); return *this; } RAY::Audio::Sound &RAY::Audio::Sound::resume(void) { - ResumeSound(_sound); + ResumeSound(*_sound); return *this; } RAY::Audio::Sound &RAY::Audio::Sound::setVolume(float volume) { - SetSoundVolume(_sound, volume); + SetSoundVolume(*_sound, volume); return *this; } RAY::Audio::Sound &RAY::Audio::Sound::setPitch(float pitch) { - SetSoundPitch(_sound, pitch); + SetSoundPitch(*_sound, pitch); return *this; } diff --git a/lib/Ray/sources/Audio/Sound.hpp b/lib/Ray/sources/Audio/Sound.hpp index 32dd8cb0..00ba3ddc 100644 --- a/lib/Ray/sources/Audio/Sound.hpp +++ b/lib/Ray/sources/Audio/Sound.hpp @@ -9,7 +9,7 @@ #define SOUND_HPP_ #include "Audio/IAudio.hpp" - +#include "Utils/Cache.hpp" #include @@ -22,11 +22,8 @@ namespace RAY::Audio //! @brief Load Sound stream from file Sound(const std::string &path); - //! @brief Default constructor - Sound(); - //! @brief Default destructor - ~Sound(); + ~Sound() = default; //! @brief A copy constructor constructor Sound(const Sound &sound) = default; @@ -56,7 +53,9 @@ namespace RAY::Audio Sound &setPitch(float pitch) override; private: - ::Sound _sound; + std::shared_ptr<::Sound> _sound; + + static RAY::Cache<::Sound> _soundsCache; }; } diff --git a/lib/Ray/sources/Utils/Cache.hpp b/lib/Ray/sources/Utils/Cache.hpp index 7f041853..653933f5 100644 --- a/lib/Ray/sources/Utils/Cache.hpp +++ b/lib/Ray/sources/Utils/Cache.hpp @@ -9,6 +9,7 @@ #include #include #include +#include namespace RAY { //! @brief A templated class used to cache ressources, indexed with a string