/* This file is part of Minitrem. Minitrem is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 2 of the License, or (at your option) any later version. Minitrem is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Minitrem. If not, see . */ #include "common.hpp" namespace audio { static std::list playing_sounds; static std::list ambient_sounds; void clean_sounds(void) { playing_sounds.remove_if( [](sf::Sound &sound) { return sound.getStatus() == sf::Sound::Stopped; }); } void sound_t::load(const char *path) { printf("load %s\n", path); buffer.loadFromFile(path); } void sound_t::play(void) { auto sound = playing_sounds.emplace(playing_sounds.end()); sound->setBuffer(buffer); sound->play(); } void ambient_t::load(const char *path) { printf("load %s\n", path); sound.openFromFile(path); sound.setLoop(true); ambient_sounds.push_back(this); } void update_ambience(bool playing) { for (ambient_t *ambient : ambient_sounds) { if (!playing) { if (ambient->playing) { ambient->sound.stop(); ambient->playing = false; } continue; } if (!ambient->playing) { ambient->sound.play(); ambient->playing = true; } ambient->sound.setVolume(ambient->weight * 100.0f); } } } // namespace audio