You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
43 lines
1.3 KiB
43 lines
1.3 KiB
3 weeks ago
|
#include "sound.hpp"
|
||
|
#include "dbc.hpp"
|
||
|
#include <fmt/core.h>
|
||
|
|
||
|
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
|
||
|
SoundPair *pair = new SoundPair();
|
||
|
$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(true);
|
||
|
}
|
||
|
|
||
|
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
|
||
|
SoundPair *pair = $sounds.at(name);
|
||
|
// play it
|
||
|
pair->sound.play();
|
||
|
}
|
||
|
|
||
|
void SoundManager::playAt(const std::string name, float x, float y, float z) {
|
||
|
SoundPair *pair = $sounds.at(name);
|
||
|
pair->sound.setPosition(x, y, z);
|
||
|
pair->sound.play();
|
||
|
}
|