#pragma once #include "ISoundSystem.h" #include #include #include #include #include struct Mix_Chunk; struct _Mix_Music; enum class SoundStatus { Unloaded, Loading, Loaded }; class SDLSoundSystem final : public ISoundSystem { public: SDLSoundSystem(); ~SDLSoundSystem() override; void Play(const Sound_Id soundId, const float volume) override; void PlayMusic(const Sound_Id musicId, const float volume, const int loops = -1) override; void Load(std::tuple& sound); void LoadingThread(); void RegisterSound(const Sound_Id soundId, const std::string& filepath) override; void RegisterMusic(const Sound_Id musicId, const std::string& filepath) override; void StopMusic() override; private: std::map> m_Sounds; std::map> m_Music; std::thread m_Thread; bool m_IsRunning{ true }; std::queue> m_LoadQueue{}; std::mutex m_LoadQueueMutex; //std::mutex m_PlayMutex; std::condition_variable m_LoadConditionVariable; std::list m_PlayAfterLoadQueue{}; };