#include "sound.hpp" #include "dbc.hpp" #include using namespace fmt; namespace fs = std::filesystem; SoundManager::SoundManager(std::string base_path) : $base_path(base_path) { dbc::check(fs::exists($base_path), "sound asset path is missing"); } void SoundManager::load(const std::string name, const std::string sound_path) { // get the sound file with base_path fs::path full_path = $base_path / sound_path; // confirm it's there dbc::check(fs::exists(full_path), format("sound file {} does not exist", sound_path)); // create the buffer and keep in the buffer map std::shared_ptr pair = std::make_shared(); $sounds[name] = pair; bool good = pair->buffer.loadFromFile(full_path.string()); dbc::check(good, format("failed to load sound {}", sound_path)); // set it on the sound and keep in the sound map pair->sound.setBuffer(pair->buffer); pair->sound.setRelativeToListener(false); pair->sound.setPosition(0.0f, 0.0f, 1.0f); } void SoundManager::play(const std::string name) { dbc::check($sounds.contains(name), format("sound {} is not loaded in map", name)); // get the sound from the sound map auto pair = $sounds.at(name); // play it pair->sound.play(); } void SoundManager::playAt(const std::string name, float x, float y, float z) { auto pair = $sounds.at(name); pair->sound.setPosition(x, y, z); pair->sound.play(); }