]> git.localhorst.tv Git - blank.git/blob - src/audio/Audio.hpp
store players in world save
[blank.git] / src / audio / Audio.hpp
1 #ifndef BLANK_AUDIO_AUDIO_HPP_
2 #define BLANK_AUDIO_AUDIO_HPP_
3
4 #include "../app/IntervalTimer.hpp"
5
6 #include <al.h>
7 #include <glm/glm.hpp>
8
9
10 namespace blank {
11
12 class Sound;
13
14 class Audio {
15
16 public:
17         Audio();
18         ~Audio();
19
20         Audio(const Audio &) = delete;
21         Audio &operator =(const Audio &) = delete;
22
23 public:
24         void Position(const glm::vec3 &) noexcept;
25         void Velocity(const glm::vec3 &) noexcept;
26         void Orientation(const glm::vec3 &dir, const glm::vec3 &up) noexcept;
27
28         void Play(
29                 const Sound &,
30                 const glm::vec3 &pos = glm::vec3(0.0f),
31                 const glm::vec3 &vel = glm::vec3(0.0f),
32                 const glm::vec3 &dir = glm::vec3(0.0f)
33         ) noexcept;
34
35         void StopAll() noexcept;
36
37         void Update(int dt) noexcept;
38
39 private:
40         int NextFree() noexcept;
41
42 private:
43         static constexpr std::size_t NUM_SRC = 16;
44         ALuint source[NUM_SRC];
45         IntervalTimer timer[NUM_SRC];
46         int last_free;
47
48 };
49
50 }
51
52 #endif