// // Created by Иван Ильин on 17.10.2021. // #include "SoundController.h" #include "ResourceManager.h" #include "utils/Log.h" SoundController* SoundController::_instance = nullptr; bool SoundController::_validInstance = false; void SoundController::init() { _instance = new SoundController(); _validInstance = true; Log::log("SoundController::init(): sound controller was initialized"); } void SoundController::playSound(const SoundTag& soundTag, const std::string& filename) { if(!_validInstance) { return; } if(_instance->_sounds.count(soundTag) == 0) { _instance->_sounds.emplace(soundTag, sf::Sound(*ResourceManager::loadSoundBuffer(filename))); } _instance->_sounds[soundTag].play(); Log::log("SoundController::playSound(): play sound '" + soundTag.str() + "'"); } void SoundController::pauseSound(const SoundTag& soundTag) { if(!_validInstance) { return; } if(_instance->_sounds.count(soundTag) > 0) { _instance->_sounds[soundTag].pause(); } Log::log("SoundController::pauseSound(): sound '" + soundTag.str() + "' was paused"); } void SoundController::stopSound(const SoundTag& soundTag) { if(!_validInstance) { return; } if(_instance->_sounds.count(soundTag) > 0) { _instance->_sounds[soundTag].stop(); } Log::log("SoundController::stopSound(): sound '" + soundTag.str() + "' was stopped"); } sf::Sound::Status SoundController::getStatus(const SoundTag& soundTag) { if(!_validInstance) { return sf::Sound::Status::Stopped; } if(_instance->_sounds.count(soundTag) > 0) { return _instance->_sounds[soundTag].getStatus(); } else { return sf::Sound::Status::Stopped; } } void SoundController::free() { if(_validInstance) { for(auto& [soundTag, sound] : _instance->_sounds) { stopSound(soundTag); } _instance->_sounds.clear(); } _validInstance = false; delete _instance; Log::log("SoundController::free(): pointer to 'SoundController' was freed"); }