67 lines
1.6 KiB
C++
67 lines
1.6 KiB
C++
#pragma once
|
|
|
|
#include "blitz/game/Listeners.h"
|
|
#include "client/Listeners.h"
|
|
#include "client/audio/AudioListener.h"
|
|
#include "client/audio/AudioSource.h"
|
|
#include <map>
|
|
|
|
namespace blitz {
|
|
|
|
namespace client {
|
|
class Client;
|
|
} // namespace client
|
|
|
|
namespace game {
|
|
class Player;
|
|
} // namespace game
|
|
|
|
|
|
namespace audio {
|
|
|
|
struct PlayerSound {
|
|
AudioSourcePtr m_Laser;
|
|
AudioSourcePtr m_FootStep;
|
|
AudioSourcePtr m_Death;
|
|
};
|
|
|
|
class AudioManager : public client::ClientListener, public game::GameListener {
|
|
private:
|
|
client::Client* m_Client;
|
|
game::Player* m_Player;
|
|
AudioListener m_Listener;
|
|
AudioSourcePtr m_MenuMusic;
|
|
AudioSourcePtr m_EndMusic;
|
|
AudioBufferPtr m_DeathSound;
|
|
AudioBufferPtr m_LaserSound;
|
|
AudioBufferPtr m_FootStepSound;
|
|
std::map<game::PlayerID, PlayerSound> m_PlayerSources;
|
|
|
|
public:
|
|
AudioManager(client::Client* client);
|
|
~AudioManager();
|
|
|
|
virtual void OnGameJoin() override;
|
|
virtual void OnGameLeave() override;
|
|
virtual void OnGameStateUpdate(game::GameState gameState) override;
|
|
virtual void OnClientPlayerJoin() override;
|
|
virtual void OnPlayerDeath(game::PlayerID player) override;
|
|
virtual void OnPlayerShoot(game::PlayerID player, const Vec3f& position, float yaw, float pitch) override;
|
|
virtual void OnPlayerJoin(game::PlayerID player) override;
|
|
virtual void OnPlayerLeave(game::PlayerID player) override;
|
|
|
|
void SetGlobalVolume(float volume);
|
|
|
|
void Update();
|
|
|
|
private:
|
|
void InitSounds();
|
|
AudioSourcePtr InitSourceFromFile(const std::string& fileName);
|
|
AudioSourcePtr InitSourceFromBuffer(const AudioBufferPtr& buffer);
|
|
AudioBufferPtr InitBufferFromFile(const std::string& fileName);
|
|
};
|
|
|
|
} // namespace audio
|
|
|
|
} // namespace blitz
|