implemented a sound manager

This commit is contained in:
devZoGok
2025-06-21 19:39:15 +03:00
parent 59451791f3
commit 05f3de11d3
5 changed files with 106 additions and 3 deletions
+3
View File
@@ -7,3 +7,6 @@
[submodule "external/sol2"] [submodule "external/sol2"]
path = external/sol2 path = external/sol2
url = https://github.com/ThePhD/sol2 url = https://github.com/ThePhD/sol2
[submodule "external/SFML"]
path = external/SFML
url = [email protected]:SFML/SFML.git
+9 -3
View File
@@ -1,4 +1,4 @@
cmake_minimum_required(VERSION 3.2) cmake_minimum_required(VERSION 3.5)
project(gameBase) project(gameBase)
set(CMAKE_BUILD_TYPE Debug) set(CMAKE_BUILD_TYPE Debug)
@@ -6,7 +6,7 @@ cmake_policy(SET CMP0015 NEW)
set(CMAKE_POSITION_INDEPENDENT_CODE ON) set(CMAKE_POSITION_INDEPENDENT_CODE ON)
set(states abstractAppState.cpp) set(states abstractAppState.cpp)
set(core inputManager.cpp mapping.h stateManager.cpp) set(core inputManager.cpp mapping.h stateManager.cpp soundManager.cpp)
set(util solUtil.cpp util.cpp) set(util solUtil.cpp util.cpp)
set(LIB_NAME gameBase) set(LIB_NAME gameBase)
@@ -25,4 +25,10 @@ set(SOL_DIR external/sol2)
add_subdirectory(${SOL_DIR}) add_subdirectory(${SOL_DIR})
target_include_directories(${LIB_NAME} PUBLIC ${SOL_DIR}/include) target_include_directories(${LIB_NAME} PUBLIC ${SOL_DIR}/include)
target_link_libraries(${LIB_NAME} glfw lua::lib) set(SFML_DIR external/SFML)
add_subdirectory(${SFML_DIR})
set(SFML_LIB_DIR build/${SFML_DIR}/src)
target_include_directories(${LIB_NAME} PUBLIC ${SFML_DIR}/include)
target_link_directories(${LIB_NAME} PUBLIC ${SFML_LIB_DIR})
target_link_libraries(${LIB_NAME} sfml-system sfml-audio glfw lua::lib)
Vendored Submodule
+1
Submodule external/SFML added at 3651072cc0
+60
View File
@@ -0,0 +1,60 @@
#include "soundManager.h"
#include <SFML/Audio.hpp>
namespace gameBase{
using namespace std;
SoundManager::Track::Track(string p) : path(p){
soundObj = new sf::Music(p);
soundObj->openFromFile(p.c_str());
}
static SoundManager* soundManager = nullptr;
SoundManager* SoundManager::getSingleton(){
if(soundManager == nullptr)
soundManager = new SoundManager();
return soundManager;
}
void SoundManager::update(){
if(currentPlaylist[currentTrackId].soundObj->getStatus() == sf::SoundSource::Status::Stopped){
bool lastTrack = (currentTrackId == currentPlaylist.size() - 1);
if(lastTrack && loop)
currentTrackId = 0;
else if(lastTrack && !loop)
clearPlaylist();
else if(!lastTrack)
currentTrackId++;
if(!currentPlaylist.empty()){
currentPlaylist[currentTrackId].soundObj->play();
currentPlaylist[currentTrackId].soundObj->setLooping(false);
}
}
}
void SoundManager::clearPlaylist(){
for(Track &track : currentPlaylist)
delete track.soundObj;
currentPlaylist.clear();
}
void SoundManager::play(vector<string> playlist, int volume, bool loop, bool shuffle){
this->loop = loop;
this->shuffle = shuffle;
clearPlaylist();
for(string path : playlist)
currentPlaylist.push_back(Track(path));
currentTrackId = 0;
currentPlaylist[currentTrackId].soundObj->play();
currentPlaylist[currentTrackId].soundObj->setLooping(false);
}
}
+33
View File
@@ -0,0 +1,33 @@
#ifndef SOUND_MANAGER_H
#define SOUND_MANAGER_H
#include <string>
#include <vector>
namespace sf{
class Music;
}
namespace gameBase{
class SoundManager{
public:
static SoundManager* getSingleton();
void update();
void play(std::vector<std::string>, int, bool, bool);
private:
struct Track{
std::string path = "";
sf::Music *soundObj = nullptr;
Track(std::string);
};
SoundManager(){}
void clearPlaylist();
int currentTrackId = 0;
bool loop, shuffle;
std::vector<Track> currentPlaylist;
};
}
#endif