diff --git a/game/src/AudioManager.cpp b/game/src/AudioManager.cpp index d1635df9698b8c778893deaa7920baf7f7bd29df..05b6b80b239d8518a73404ab40175a692e26fa2f 100644 --- a/game/src/AudioManager.cpp +++ b/game/src/AudioManager.cpp @@ -1,30 +1,38 @@ #include "AudioManager.hpp" #include <iostream> -namespace game +namespace game { -AudioManager::AudioManager() : backgroundMusic(nullptr) {} +AudioManager::AudioManager() : backgroundMusic(nullptr) +{ +} -AudioManager::~AudioManager() { +AudioManager::~AudioManager() +{ - if (backgroundMusic) { + if (backgroundMusic) + { stopBackgroundMusic(); Mix_FreeMusic(backgroundMusic); } - - for (auto& pair : soundEffects) { + + for (auto &pair : soundEffects) + { Mix_FreeChunk(pair.second); } Mix_CloseAudio(); } -bool AudioManager::init() { - if (Mix_Init(MIX_INIT_OGG | MIX_INIT_MP3) == 0) { +bool AudioManager::init() +{ + if (Mix_Init(MIX_INIT_OGG | MIX_INIT_MP3) == 0) + { std::cerr << "SDL_mixer konnte nicht richtig initialisiert werden: " << Mix_GetError() << std::endl; return false; } - if (Mix_OpenAudio(44100, MIX_DEFAULT_FORMAT, 2, 512) < 0) { + if (Mix_OpenAudio(44100, MIX_DEFAULT_FORMAT, 2, 512) < 0) + { std::cerr << "SDL_mixer konnte nicht initialisiert werden: " << Mix_GetError() << std::endl; return false; } @@ -32,41 +40,52 @@ bool AudioManager::init() { return true; } -bool AudioManager::loadBackgroundMusic(const std::string& path) { +bool AudioManager::loadBackgroundMusic(const std::string &path) +{ backgroundMusic = Mix_LoadMUS(path.c_str()); - if (!backgroundMusic) { + if (!backgroundMusic) + { std::cerr << "Fehler beim Laden der Hintergrundmusik: " << Mix_GetError() << std::endl; return false; } return true; } -bool AudioManager::loadSoundEffect(const std::string& name, const std::string& path) { - Mix_Chunk* effect = Mix_LoadWAV(path.c_str()); - if (!effect) { +bool AudioManager::loadSoundEffect(const std::string &name, const std::string &path) +{ + Mix_Chunk *effect = Mix_LoadWAV(path.c_str()); + if (!effect) + { std::cerr << "Fehler beim Laden des Soundeffekts '" << name << "': " << Mix_GetError() << std::endl; return false; } - + soundEffects[name] = effect; return true; } -void AudioManager::playBackgroundMusic() { - if (backgroundMusic) { +void AudioManager::playBackgroundMusic() +{ + if (backgroundMusic) + { Mix_PlayMusic(backgroundMusic, -1); } } -void AudioManager::stopBackgroundMusic() { +void AudioManager::stopBackgroundMusic() +{ Mix_HaltMusic(); } -void AudioManager::playSoundEffect(const std::string& name) { +void AudioManager::playSoundEffect(const std::string &name) +{ auto it = soundEffects.find(name); - if (it != soundEffects.end()) { + if (it != soundEffects.end()) + { Mix_PlayChannel(-1, it->second, 0); - } else { + } + else + { std::cerr << "Soundeffekt '" << name << "' nicht gefunden!" << std::endl; } } diff --git a/game/src/AudioManager.hpp b/game/src/AudioManager.hpp index 12370b5741277354939a9ee153e46939bcc79d63..62d973881cb9a47f621eb9098e2d0acaf2867312 100644 --- a/game/src/AudioManager.hpp +++ b/game/src/AudioManager.hpp @@ -1,17 +1,18 @@ #pragma once #include <SDL2/SDL_mixer.h> -#include <unordered_map> #include <string> +#include <unordered_map> -namespace game +namespace game { /** * @brief Manages audio playback including background music and sound effects. */ -class AudioManager { -public: +class AudioManager +{ + public: /** * @brief Default Constructor for the AudioManager. */ @@ -33,7 +34,7 @@ public: * @param path File path to the background music. * @return True if loading was successful, otherwise false. */ - bool loadBackgroundMusic(const std::string& path); + bool loadBackgroundMusic(const std::string &path); /** * @brief Loads a sound effect and stores it with an associated name. @@ -41,8 +42,8 @@ public: * @param path File path to the sound effect. * @return True if loading was successful, otherwise false. */ - bool loadSoundEffect(const std::string& name, const std::string& path); - + bool loadSoundEffect(const std::string &name, const std::string &path); + /** * @brief Plays the currently loaded background music in a loop. */ @@ -57,18 +58,18 @@ public: * @brief Plays a loaded sound effect by name. * @param name Identifier of the sound effect to play. */ - void playSoundEffect(const std::string& name); + void playSoundEffect(const std::string &name); -private: + private: /** * @brief Pointer to the loaded background music. */ - Mix_Music* backgroundMusic; + Mix_Music *backgroundMusic; /** * @brief A map storing sound effects with their associated names. */ - std::unordered_map<std::string, Mix_Chunk*> soundEffects; + std::unordered_map<std::string, Mix_Chunk *> soundEffects; }; } // namespace game \ No newline at end of file diff --git a/game/src/BulletManager.cpp b/game/src/BulletManager.cpp index cb8d50870e059dc7d06d4fc79117322f91247953..8cd967badfd253ad2cb90cc211149982a399f133 100644 --- a/game/src/BulletManager.cpp +++ b/game/src/BulletManager.cpp @@ -8,7 +8,8 @@ namespace game { -BulletManager::BulletManager(b2World *world, TilesheetManager &tilesheetManager, lvl::Level &level, AudioManager &audioManager) +BulletManager::BulletManager(b2World *world, TilesheetManager &tilesheetManager, lvl::Level &level, + AudioManager &audioManager) : m_world(world), m_tilesheetManager(tilesheetManager), m_level(level), m_audioManager(audioManager) { } diff --git a/game/src/BulletManager.hpp b/game/src/BulletManager.hpp index 7332a59d9af87e92004753df422fcac6bf1566b3..6540f0c09be2d31ebe60a6efc7ebb5e50df442e6 100644 --- a/game/src/BulletManager.hpp +++ b/game/src/BulletManager.hpp @@ -1,9 +1,9 @@ #pragma once +#include "AudioManager.hpp" #include "BulletObject.hpp" #include "Camera.hpp" #include "TilesheetManager.hpp" #include "level.hpp" -#include "AudioManager.hpp" #include <SDL2/SDL.h> #include <box2d/box2d.h> #include <vector> diff --git a/game/src/ContactListener.cpp b/game/src/ContactListener.cpp index d51b7b15737a3af617ddc0b418b5a5e8d8b1afff..8724de5899becca630473eab0482512069888a44 100644 --- a/game/src/ContactListener.cpp +++ b/game/src/ContactListener.cpp @@ -1,17 +1,17 @@ #include "ContactListener.hpp" -#include "SDLApplication.hpp" #include "BulletObject.hpp" #include "DynamicObject.hpp" #include "GameObject.hpp" +#include "SDLApplication.hpp" #include <iostream> namespace game { -ContactListener::ContactListener(AudioManager& audioManager) - : m_audioManager(audioManager) { - m_door_entered = false; - } +ContactListener::ContactListener(AudioManager &audioManager) : m_audioManager(audioManager) +{ + m_door_entered = false; +} void ContactListener::BeginContact(b2Contact *contact) { @@ -38,7 +38,7 @@ void ContactListener::HandleCollision(b2Body *bodyA, b2Body *bodyB) enemyBulletsToDestroy.push_back(bodyA); if (objb->get_type() == ObjectType::Player) { - //std::cout << "Player hit" << std::endl; + // std::cout << "Player hit" << std::endl; m_audioManager.playSoundEffect("player_got_hit"); } } @@ -47,7 +47,7 @@ void ContactListener::HandleCollision(b2Body *bodyA, b2Body *bodyB) enemyBulletsToDestroy.push_back(bodyB); if (obja->get_type() == ObjectType::Player) { - //std::cout << "Player hit" << std::endl; + // std::cout << "Player hit" << std::endl; m_audioManager.playSoundEffect("player_got_hit"); } } @@ -56,7 +56,7 @@ void ContactListener::HandleCollision(b2Body *bodyA, b2Body *bodyB) playerBulletsToDestroy.push_back(bodyA); if (objb->get_type() == ObjectType::Enemy) { - //std::cout << "Enemy hit" << std::endl; + // std::cout << "Enemy hit" << std::endl; m_audioManager.playSoundEffect("player_bullet_hit"); enemiesToDestroy.push_back(bodyB); } @@ -66,7 +66,7 @@ void ContactListener::HandleCollision(b2Body *bodyA, b2Body *bodyB) playerBulletsToDestroy.push_back(bodyB); if (obja->get_type() == ObjectType::Enemy) { - //std::cout << "Enemy hit" << std::endl; + // std::cout << "Enemy hit" << std::endl; m_audioManager.playSoundEffect("player_bullet_hit"); enemiesToDestroy.push_back(bodyA); } @@ -76,7 +76,7 @@ void ContactListener::HandleCollision(b2Body *bodyA, b2Body *bodyB) { if (objb->get_type() == ObjectType::Door) { - //std::cout << "Door entered" << std::endl; + // std::cout << "Door entered" << std::endl; m_audioManager.playSoundEffect("door"); m_door_entered = true; } @@ -85,7 +85,7 @@ void ContactListener::HandleCollision(b2Body *bodyA, b2Body *bodyB) { if (obja->get_type() == ObjectType::Door) { - //std::cout << "Door entered" << std::endl; + // std::cout << "Door entered" << std::endl; m_audioManager.playSoundEffect("door"); m_door_entered = true; } diff --git a/game/src/ContactListener.hpp b/game/src/ContactListener.hpp index 7c9a842cfb3dfa0d6afd09dd544eece622c0b925..19fc524368a6ff13eabc9d4f8c9a4b6005df083c 100644 --- a/game/src/ContactListener.hpp +++ b/game/src/ContactListener.hpp @@ -1,8 +1,8 @@ #pragma once +#include "AudioManager.hpp" #include <box2d/box2d.h> #include <vector> -#include "AudioManager.hpp" namespace game { @@ -21,7 +21,7 @@ class ContactListener : public b2ContactListener /** * @brief Constructor for the ContactListener class. */ - ContactListener(AudioManager& audioManager); + ContactListener(AudioManager &audioManager); /** * @brief Destructor for the ContactListener class. */ @@ -71,6 +71,7 @@ class ContactListener : public b2ContactListener bool door_entered(); void cleanup(); + private: /** * @brief Handles the collision between two bodies. @@ -82,8 +83,8 @@ class ContactListener : public b2ContactListener * @param bodyB The second body involved in the collision. */ void HandleCollision(b2Body *bodyA, b2Body *bodyB); - - AudioManager& m_audioManager; /**< The audio manager used to play soundeffects. */ + + AudioManager &m_audioManager; /**< The audio manager used to play soundeffects. */ bool m_door_entered; }; diff --git a/game/src/GameWindow.cpp b/game/src/GameWindow.cpp index 145959bfa7dcab90db88e5b26c58493b86f1dd82..65c0f6a0880e573a12bba7699200f96fbc5fc5fa 100644 --- a/game/src/GameWindow.cpp +++ b/game/src/GameWindow.cpp @@ -1,13 +1,12 @@ #include "GameWindow.hpp" -#include "TilesheetManager.hpp" #include "AudioManager.hpp" +#include "TilesheetManager.hpp" namespace game { GameWindow::GameWindow(const int32_t width, const int32_t height, const float_t scale) noexcept(false) - : SDLApplication("ISAAC is Back", width, height), m_Score(0), m_Scale(scale), m_level("level.h5"), - m_audioManager(), + : SDLApplication("ISAAC is Back", width, height), m_Score(0), m_Scale(scale), m_level("level.h5"), m_audioManager(), m_world(b2Vec2({0.0f, 0.0f})), m_tilesheetManager(m_Renderer, m_level.getSpritesheet(), m_Scale), m_bulletManager(&m_world, m_tilesheetManager, m_level, m_audioManager), m_enemyManager(&m_world, m_bulletManager, m_tilesheetManager, m_level), @@ -20,35 +19,44 @@ GameWindow::GameWindow(const int32_t width, const int32_t height, const float_t m_gameContext(m_level, m_enemyManager, m_bulletManager, m_tilesheetManager, m_objectManager, m_player, m_Renderer, m_Camera), m_contactListener(m_audioManager) - + { m_world.SetContactListener(&m_contactListener); m_gameContext.initialize(); - if (!m_audioManager.init()) { + if (!m_audioManager.init()) + { throw std::runtime_error("Audio konnte nicht initialisiert werden"); } - if (m_audioManager.loadBackgroundMusic("./game/sounds/8-bit-music-on-245249.ogg")) { + if (m_audioManager.loadBackgroundMusic("./game/sounds/8-bit-music-on-245249.ogg")) + { m_audioManager.playBackgroundMusic(); - } else { + } + else + { throw std::runtime_error("Fehler beim Laden des Soundeffekts"); } - if (!m_audioManager.loadSoundEffect("player_bullet_hit", "./game/sounds/8-bit-explosion-95847.wav")) { + if (!m_audioManager.loadSoundEffect("player_bullet_hit", "./game/sounds/8-bit-explosion-95847.wav")) + { throw std::runtime_error("Fehler beim Laden des Gegner Treffer Soundeffekts"); } - if (!m_audioManager.loadSoundEffect("player_got_hit", "./game/sounds/mixkit-weak-fast-blow-2145.wav")) { + if (!m_audioManager.loadSoundEffect("player_got_hit", "./game/sounds/mixkit-weak-fast-blow-2145.wav")) + { throw std::runtime_error("Fehler beim Laden des Trefferschaden Soundeffekts"); } - if (!m_audioManager.loadSoundEffect("door", "./game/sounds/mixkit-creaky-door-open-195.wav")) { + if (!m_audioManager.loadSoundEffect("door", "./game/sounds/mixkit-creaky-door-open-195.wav")) + { throw std::runtime_error("Fehler beim Laden des Tür Soundeffekts"); } - if (!m_audioManager.loadSoundEffect("player_shoot", "./game/sounds/basic-fire-whoosh-104224.wav")) { - throw std::runtime_error("Fehler beim Laden des Spieler-Schuss-Soundeffekts"); + if (!m_audioManager.loadSoundEffect("player_shoot", "./game/sounds/basic-fire-whoosh-104224.wav")) + { + throw std::runtime_error("Fehler beim Laden des Spieler-Schuss-Soundeffekts"); } - if (!m_audioManager.loadSoundEffect("enemy_shoot", "./game/sounds/firesound.wav")) { - throw std::runtime_error("Fehler beim Laden des Spieler-Schuss-Soundeffekts"); + if (!m_audioManager.loadSoundEffect("enemy_shoot", "./game/sounds/firesound.wav")) + { + throw std::runtime_error("Fehler beim Laden des Spieler-Schuss-Soundeffekts"); } } diff --git a/game/src/GameWindow.hpp b/game/src/GameWindow.hpp index 6f169358f125928c73c7f08565553917ecdf80d1..981c1f96ad4a44cee3087bd47a965dce801987ff 100644 --- a/game/src/GameWindow.hpp +++ b/game/src/GameWindow.hpp @@ -1,4 +1,5 @@ #pragma once +#include "AudioManager.hpp" #include "BulletManager.hpp" #include "Camera.hpp" #include "ContactListener.hpp" @@ -10,7 +11,6 @@ #include "StaticObject.hpp" #include "TilesheetManager.hpp" #include "level.hpp" -#include "AudioManager.hpp" #include <SDL2/SDL.h> #include <SDL2/SDL_image.h> #include <box2d/b2_world.h> @@ -122,4 +122,4 @@ class GameWindow : public SDLApplication AudioManager m_audioManager; }; -}// namespace game +} // namespace game diff --git a/game/src/Renderable.cpp b/game/src/Renderable.cpp index 6cab713852ef537e82813c5a463d3e4b82de1cce..beaf977b47830355bb3edd6591a113db25b7e4d1 100644 --- a/game/src/Renderable.cpp +++ b/game/src/Renderable.cpp @@ -85,4 +85,4 @@ int Renderable::y() const return m_targetRect.y; } -} \ No newline at end of file +} // namespace game \ No newline at end of file diff --git a/game/src/Renderable.hpp b/game/src/Renderable.hpp index 3a2b8c25cf37061c36b4ddf4286794be929eaa55..6c0ada7749f8eb516c76df3217c62773f0963724 100644 --- a/game/src/Renderable.hpp +++ b/game/src/Renderable.hpp @@ -112,4 +112,4 @@ class Renderable void computeSourceRect(); }; -} \ No newline at end of file +} // namespace game \ No newline at end of file