43 lines
		
	
	
	
		
			1.4 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			43 lines
		
	
	
	
		
			1.4 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| #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(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();
 | |
| }
 | 
