VEGO-Engine  0.1
Loading...
Searching...
No Matches
SoundManager.h
1#pragma once
2
3#include <SDL3_mixer/SDL_mixer.h>
4#include <map>
5#include <vector>
6
7#include "ECS.h"
8#include "TextureManager.h"
9#include "BackgroundMusic.h"
10#include "SoundEffects.h"
11
12class GameInternal;
13
20class SoundManager
21{
22
23 public:
24
25 SoundManager() {
26 if (this_instance == nullptr) {
27 this_instance = this;
28 }
29 else {
30 throw std::runtime_error("SoundManager instance already exists!");
31 }
32 }
33 ~SoundManager() {
34 for (auto& it : this->sound_cache) {
35 Mix_FreeChunk(it.second);
36 }
37
38 for (auto& it : this->music_cache) {
39 Mix_FreeMusic(it.second);
40 }
41 }
42
43 SoundManager(SoundManager const&) = delete;
44 void operator=(SoundManager const&) = delete;
45
46 /*
47 * \brief Loads music from a file (mp3)
48 * \returns a pointer to Mix_Music
49 * \sa AssetManager::AddMusic(std::string id, const char* path)
50
51 Mix_Music* loadMusic(const char* fileName);
65 static void playSound(SoundEffects sound, bool canOverlap, int loops, int volume, int channel);
71 static void playMusic(BackgroundMusic sound, int loops, int volume, int milliseconds);
72
73 static void setSoundVolume(int volume, int channel);
74 static void setMusicVolume(int volume);
75
76 static void pauseSound(int channel);
77 static void pauseMusic();
78
79 static void restartSound(int channel);
80 static void restartMusic();
81
82 static void fadeOutMusic(int ms);
83
88 static void addSoundEffects(const std::map<SoundEffects, const char*> &effects);
89
94 static void addBackgroundMusic(const std::map<BackgroundMusic, const char*> &backgroundMusic);
95
96 static SoundManager* getInstance() {
97 return this_instance;
98 }
99
100
101 private:
102
103 std::map<BackgroundMusic, Mix_Music*> music_cache;
104 std::map<SoundEffects, Mix_Chunk*> sound_cache;
105 static SoundManager* this_instance;
106
107 static void addSingleBackgroundMusic(BackgroundMusic backgroundMusic, const char* path);
108 static void addSingleSoundEffect(SoundEffects soundEffect, const char* path);
109};
static void playSound(SoundEffects sound, bool canOverlap, int loops, int volume, int channel)
Handles playing of sound effects.
Definition SoundManager.cpp:53
static void pauseMusic()
Handles pausing music track.
Definition SoundManager.cpp:122
static void addSoundEffects(const std::map< SoundEffects, const char * > &effects)
Initializes sound-effects and adds them to a cache.
Definition SoundManager.cpp:177
static void playMusic(BackgroundMusic sound, int loops, int volume, int milliseconds)
Handles playing of music.
Definition SoundManager.cpp:85
static void pauseSound(int channel)
Handles pausing sound effects (either all or on a specific channel)
Definition SoundManager.cpp:117
static void addBackgroundMusic(const std::map< BackgroundMusic, const char * > &backgroundMusic)
Initializes background-music and adds them to a cache.
Definition SoundManager.cpp:182
static void restartMusic()
Handles resuming music track.
Definition SoundManager.cpp:132
static void restartSound(int channel)
Handles resuming sound effects (either all or on a specific channel)
Definition SoundManager.cpp:127
static void setMusicVolume(int volume)
Volume handling for music track.
Definition SoundManager.cpp:112
static void fadeOutMusic(int ms)
Handles fading out a music track.
Definition SoundManager.cpp:137
static void setSoundVolume(int volume, int channel)
Volume handling for sound effects (either all or on a specific channel)
Definition SoundManager.cpp:107