From 2ea9c91cf15477d3a5a050ad371346833e1fe8cb Mon Sep 17 00:00:00 2001 From: StevSpotted <41762297+StevSpotted@users.noreply.github.com> Date: Wed, 18 Dec 2024 15:56:39 +0100 Subject: [PATCH] feat: integrate MusicManager for improved audio handling and remove legacy music code --- CMakeLists.txt | 1 + Entities/shark.cpp | 47 ++++++++++++++++++++++------------------ Entities/shark.h | 4 ++-- Game/launchGameMulti.cpp | 26 ++++++++++++---------- Game/launchGameSolo.cpp | 27 +++++++++++++---------- Game/menu.cpp | 7 ++++++ Game/menu.h | 2 ++ Utility/close.cpp | 32 +++++++++++++-------------- Utility/env.cpp | 5 +---- Utility/env.h | 6 ++--- Utility/utility.cpp | 10 ++++----- main.cpp | 27 ++++++++++++++--------- 12 files changed, 108 insertions(+), 86 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index a595e45..bf0b45e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -41,6 +41,7 @@ add_executable(bloubloulespoissons main.cpp Utility/utility.h Utility/close.cpp Utility/close.h + Utility/music.h Game/LaunchGameSolo.cpp Game/LaunchGameSolo.h Game/LaunchGameMulti.cpp diff --git a/Entities/shark.cpp b/Entities/shark.cpp index 17f96a2..e142db9 100644 --- a/Entities/shark.cpp +++ b/Entities/shark.cpp @@ -15,15 +15,15 @@ Shark::Shark(const int x, const int y, const float vx, const float vy, const int SDL_FreeSurface(sharkSurface); } - sharkSound = Mix_LoadWAV("../sounds/shark.wav"); - if (sharkSound == nullptr) { - std::cerr << "Erreur de chargement du son du requin: " << Mix_GetError() << std::endl; - } + // sharkSound = Mix_LoadWAV("../sounds/shark.wav"); + // if (sharkSound == nullptr) { + // std::cerr << "Erreur de chargement du son du requin: " << Mix_GetError() << std::endl; + // } - approachingSound = Mix_LoadWAV("../sounds/Shark-approching.wav"); - if (approachingSound == nullptr) { - std::cerr << "Erreur de chargement du son d'approche du requin: " << Mix_GetError() << std::endl; - } + // approachingSound = Mix_LoadWAV("../sounds/Shark-approching.wav"); + // if (approachingSound == nullptr) { + // std::cerr << "Erreur de chargement du son d'approche du requin: " << Mix_GetError() << std::endl; + // } lastSoundTime = std::chrono::steady_clock::now(); } @@ -72,11 +72,15 @@ void Shark::cycle() { if (isInView(player)) { checkNeighborhood(player, xpos_avg, ypos_avg, xvel_avg, yvel_avg, neighboring_player); checkCollision(player); - Mix_PlayChannel(SOUND_CHANNEL, approachingSound, 0); + //Mix_PlayChannel(SOUND_CHANNEL, approachingSound, 0); + musicManager.playMusic("Shark-approaching"); + musicManager.pauseMusic("Playing"); } if (!isInView(player)) { // Cut the approach sound - Mix_HaltChannel(SOUND_CHANNEL); + musicManager.stopMusic("Shark-approaching"); + musicManager.resumeMusic("Playing"); + // Mix_HaltChannel(SOUND_CHANNEL); } } if (neighboring_player > 0) { @@ -101,9 +105,10 @@ void Shark::cycle() { auto now = std::chrono::steady_clock::now(); if (std::chrono::duration_cast(now - lastSoundTime).count() > 15) { - if (sharkSound != nullptr) { - Mix_PlayChannel(SOUND_CHANNEL, sharkSound, 0); - } + // if (sharkSound != nullptr) { + // Mix_PlayChannel(SOUND_CHANNEL, sharkSound, 0); + // } + musicManager.playMusic("Shark"); lastSoundTime = now; } @@ -121,15 +126,15 @@ Shark::~Shark() { texture = nullptr; } - if (sharkSound) { - Mix_FreeChunk(sharkSound); - sharkSound = nullptr; - } + // if (sharkSound) { + // Mix_FreeChunk(sharkSound); + // sharkSound = nullptr; + // } - if (approachingSound) { - Mix_FreeChunk(approachingSound); - approachingSound = nullptr; - } + // if (approachingSound) { + // Mix_FreeChunk(approachingSound); + // approachingSound = nullptr; + // } } void Shark::updatePosition(int newX, int newY) { diff --git a/Entities/shark.h b/Entities/shark.h index fed63ec..aac9ad1 100644 --- a/Entities/shark.h +++ b/Entities/shark.h @@ -31,8 +31,8 @@ private: int width, height; std::vector &players_list; - Mix_Chunk* sharkSound; - Mix_Chunk* approachingSound; + // Mix_Chunk* sharkSound; + // Mix_Chunk* approachingSound; std::chrono::steady_clock::time_point lastSoundTime; std::chrono::steady_clock::time_point lastSendTime; diff --git a/Game/launchGameMulti.cpp b/Game/launchGameMulti.cpp index c160d28..bcb374f 100644 --- a/Game/launchGameMulti.cpp +++ b/Game/launchGameMulti.cpp @@ -11,19 +11,21 @@ int pas_la_fontion_main_enfin_ce_nest_pas_la_fontion_principale_du_programme_mai // } game_running = true; - Mix_HaltMusic(); + musicManager.playMusic("Playing"); - backgroundMusic = Mix_LoadMUS("../sounds/Playing.wav"); - if (backgroundMusic == nullptr) { - std::cerr << "Erreur de chargement de la musique: " << Mix_GetError() << std::endl; - return false; - } - Mix_VolumeMusic(MIX_MAX_VOLUME / 4); - if (Mix_PlayMusic(backgroundMusic, -1) == -1) { - std::cerr << "Erreur de lecture de la musique: " << Mix_GetError() << std::endl; - return false; - } - Mix_PlayMusic(backgroundMusic, -1); + // Mix_HaltMusic(); + + // backgroundMusic = Mix_LoadMUS("../sounds/Playing.wav"); + // if (backgroundMusic == nullptr) { + // std::cerr << "Erreur de chargement de la musique: " << Mix_GetError() << std::endl; + // return false; + // } + // Mix_VolumeMusic(MIX_MAX_VOLUME / 4); + // if (Mix_PlayMusic(backgroundMusic, -1) == -1) { + // std::cerr << "Erreur de lecture de la musique: " << Mix_GetError() << std::endl; + // return false; + // } + // Mix_PlayMusic(backgroundMusic, -1); std::vector kelps; std::vector rocks; diff --git a/Game/launchGameSolo.cpp b/Game/launchGameSolo.cpp index 114ef88..b9eaa17 100644 --- a/Game/launchGameSolo.cpp +++ b/Game/launchGameSolo.cpp @@ -12,19 +12,22 @@ int pas_la_fontion_main_enfin_ce_nest_pas_la_fontion_principale_du_programme_mai game_running = true; - Mix_HaltMusic(); + + musicManager.playMusic("Playing"); - backgroundMusic = Mix_LoadMUS("../sounds/Playing.wav"); - if (backgroundMusic == nullptr) { - std::cerr << "Erreur de chargement de la musique: " << Mix_GetError() << std::endl; - return false; - } - Mix_VolumeMusic(MIX_MAX_VOLUME / 4); - if (Mix_PlayMusic(backgroundMusic, -1) == -1) { - std::cerr << "Erreur de lecture de la musique: " << Mix_GetError() << std::endl; - return false; - } - Mix_PlayMusic(backgroundMusic, -1); + // Mix_HaltMusic(); + + // backgroundMusic = Mix_LoadMUS("../sounds/Playing.wav"); + // if (backgroundMusic == nullptr) { + // std::cerr << "Erreur de chargement de la musique: " << Mix_GetError() << std::endl; + // return false; + // } + // Mix_VolumeMusic(MIX_MAX_VOLUME / 4); + // if (Mix_PlayMusic(backgroundMusic, -1) == -1) { + // std::cerr << "Erreur de lecture de la musique: " << Mix_GetError() << std::endl; + // return false; + // } + // Mix_PlayMusic(backgroundMusic, -1); std::vector kelps; std::vector rocks; diff --git a/Game/menu.cpp b/Game/menu.cpp index 9a0e1b0..26f26ed 100644 --- a/Game/menu.cpp +++ b/Game/menu.cpp @@ -78,6 +78,13 @@ void drawRoundedRect(SDL_Renderer* renderer, SDL_Rect rect, int radius, SDL_Colo } +std::string Menu::getCurrentPageName() { + if (currentPage == -1) { + return ""; + } + + return pages[currentPage].title; +} void Menu::draw(SDL_Renderer* renderer) { SDL_RenderClear(renderer); diff --git a/Game/menu.h b/Game/menu.h index 9b78df7..7de31a7 100644 --- a/Game/menu.h +++ b/Game/menu.h @@ -85,6 +85,8 @@ class Menu { void changePage(std::string title); + std::string getCurrentPageName(); + void addButton(std::string page, int x, int y, int w, int h, std::string text, int size, std::function callback, bool isTextInput = false); void addText(std::string page, int x, int y, int w, int h, std::string text, int size); diff --git a/Utility/close.cpp b/Utility/close.cpp index d5c4a97..c759015 100644 --- a/Utility/close.cpp +++ b/Utility/close.cpp @@ -103,23 +103,23 @@ void cleanup() { std::cerr << "Exception caught for DestroyWindow: " << e.what() << std::endl; } - try { - if (backgroundMusic != nullptr) { - Mix_FreeMusic(backgroundMusic); - backgroundMusic = nullptr; - } - } catch (const std::exception& e) { - std::cerr << "Exception caught for FreeMusic: " << e.what() << std::endl; - } + // try { + // if (backgroundMusic != nullptr) { + // Mix_FreeMusic(backgroundMusic); + // backgroundMusic = nullptr; + // } + // } catch (const std::exception& e) { + // std::cerr << "Exception caught for FreeMusic: " << e.what() << std::endl; + // } - try { - if (menuMusic != nullptr) { - Mix_FreeMusic(menuMusic); - menuMusic = nullptr; - } - } catch (const std::exception& e) { - std::cerr << "Exception caught for FreeMusic (menuMusic): " << e.what() << std::endl; - } + // try { + // if (menuMusic != nullptr) { + // Mix_FreeMusic(menuMusic); + // menuMusic = nullptr; + // } + // } catch (const std::exception& e) { + // std::cerr << "Exception caught for FreeMusic (menuMusic): " << e.what() << std::endl; + // } try { IMG_Quit(); diff --git a/Utility/env.cpp b/Utility/env.cpp index 19b9268..e2cbb64 100644 --- a/Utility/env.cpp +++ b/Utility/env.cpp @@ -24,13 +24,10 @@ std::atomic messageThreadRunning(false); std::atomic isHost(false); EventHandler eventHandler; std::atomic soundMuted(false); -Mix_Music* backgroundMusic = nullptr; -Mix_Music* menuMusic = nullptr; -int MUSIC_CHANNEL = 0; -int SOUND_CHANNEL = 1; SDL_Texture* playerTexture = nullptr; SDL_Texture* fishTextures[100]; std::vector school; +MusicManager musicManager; std::atomic displayFPSFlag(true); diff --git a/Utility/env.h b/Utility/env.h index d4c06d4..db4ad70 100644 --- a/Utility/env.h +++ b/Utility/env.h @@ -12,6 +12,7 @@ #include #include #include +#include "music.h" #include "event.h" class Player; @@ -42,13 +43,10 @@ extern std::vector players_server; extern std::atomic isHost; extern EventHandler eventHandler; extern std::atomic soundMuted; -extern Mix_Music* backgroundMusic; -extern Mix_Music* menuMusic; -extern int MUSIC_CHANNEL; -extern int SOUND_CHANNEL; extern SDL_Texture* fishTextures[100]; extern SDL_Texture* playerTexture; extern std::vector school; +extern MusicManager musicManager; extern std::atomic displayFPSFlag; bool initEnvironment(SDL_Renderer* renderer); diff --git a/Utility/utility.cpp b/Utility/utility.cpp index 0a9bab4..cc14766 100644 --- a/Utility/utility.cpp +++ b/Utility/utility.cpp @@ -92,11 +92,11 @@ bool initSDL() { Mix_AllocateChannels(16); // Charger la musique du menu - menuMusic = Mix_LoadMUS("../sounds/Menu.wav"); - if (menuMusic == nullptr) { - std::cerr << "Erreur de chargement de la musique du menu: " << Mix_GetError() << std::endl; - return false; - } + // menuMusic = Mix_LoadMUS("../sounds/Menu.wav"); + // if (menuMusic == nullptr) { + // std::cerr << "Erreur de chargement de la musique du menu: " << Mix_GetError() << std::endl; + // return false; + // } window = SDL_CreateWindow("BloubBloub les poissons", SDL_WINDOWPOS_CENTERED, diff --git a/main.cpp b/main.cpp index eb9d3f0..2d186f3 100644 --- a/main.cpp +++ b/main.cpp @@ -58,12 +58,11 @@ void onPlayerLost(Menu &menu){ SDL_RenderClear(renderer); menu.drawLost(renderer); SDL_RenderPresent(renderer); - Mix_Chunk* deathSound = Mix_LoadWAV("../sounds/death.wav"); - Mix_PlayChannel(-1, deathSound, 0); + musicManager.playMusic("death"); std::this_thread::sleep_for(std::chrono::seconds(8)); - Mix_FreeChunk(deathSound); menuRunning = true; menu.changePage("Main"); + musicManager.playMusic("Menu"); menu.show(); resetAll(); } @@ -167,13 +166,21 @@ int main(int argc, char* args[]) { //menu.addButton((windowWidth/2) - 100, (windowHeight/2 + 25) + 50, 200, 50, "Multi", 1024); - menuMusic = Mix_LoadMUS("../sounds/Menu.wav"); - if (menuMusic != nullptr) { - Mix_VolumeMusic(MIX_MAX_VOLUME / 4); - if (Mix_PlayMusic(menuMusic, -1) == -1) { - std::cerr << "Erreur de lecture de la musique du menu: " << Mix_GetError() << std::endl; - } - } + // menuMusic = Mix_LoadMUS("../sounds/Menu.wav"); + // if (menuMusic != nullptr) { + // Mix_VolumeMusic(MIX_MAX_VOLUME / 4); + // if (Mix_PlayMusic(menuMusic, -1) == -1) { + // std::cerr << "Erreur de lecture de la musique du menu: " << Mix_GetError() << std::endl; + // } + // } + + musicManager.addMusic("../sounds/Menu.wav", AudioType::MUSIC); + musicManager.addMusic("../sounds/Playing.wav", AudioType::MUSIC); + musicManager.addMusic("../sounds/death.wav", AudioType::SOUND_EFFECT); + musicManager.addMusic("../sounds/Shark-approching.wav", AudioType::SOUND_EFFECT); + musicManager.addMusic("../sounds/shark.wav", AudioType::SOUND_EFFECT); + + musicManager.playMusic("Menu"); while (running) {