aboutsummaryrefslogtreecommitdiff
path: root/src/crepe/facade
diff options
context:
space:
mode:
authorLoek Le Blansch <loek@pipeframe.xyz>2024-12-02 16:13:08 +0100
committerLoek Le Blansch <loek@pipeframe.xyz>2024-12-02 16:13:08 +0100
commit7a8657dfe019104aced61a5b63e63f61ad919f7a (patch)
treefd8e7aa148aac0a4f50fca8fe05e5016dfd16e47 /src/crepe/facade
parentb8194e02679dc88f5c0a240da83a4700ec5200cf (diff)
remove `Private`
Diffstat (limited to 'src/crepe/facade')
-rw-r--r--src/crepe/facade/Sound.h6
-rw-r--r--src/crepe/facade/SoundContext.cpp23
-rw-r--r--src/crepe/facade/SoundContext.h15
-rw-r--r--src/crepe/facade/SoundHandle.h13
4 files changed, 38 insertions, 19 deletions
diff --git a/src/crepe/facade/Sound.h b/src/crepe/facade/Sound.h
index a78a2a7..85d141b 100644
--- a/src/crepe/facade/Sound.h
+++ b/src/crepe/facade/Sound.h
@@ -20,12 +20,6 @@ public:
Sound(const Asset & src);
~Sound(); // dbg_trace
- //! Voice handle wrapper
- struct Handle {
- //! Voice handle (soloud), used by SoundContext
- SoLoud::handle handle;
- };
-
private:
//! Deserialized resource (soloud)
SoLoud::Wav sample;
diff --git a/src/crepe/facade/SoundContext.cpp b/src/crepe/facade/SoundContext.cpp
index 8bd7e74..d18afc6 100644
--- a/src/crepe/facade/SoundContext.cpp
+++ b/src/crepe/facade/SoundContext.cpp
@@ -15,18 +15,23 @@ SoundContext::~SoundContext() {
this->engine.deinit();
}
-Sound::Handle SoundContext::play(Sound & resource) {
- return {
- .handle = this->engine.play(resource.sample, 1.0f),
- };
+SoundHandle SoundContext::play(Sound & resource) {
+ SoLoud::handle real_handle = this->engine.play(resource.sample, 1.0f);
+ SoundHandle handle = this->next_handle;
+ this->registry[handle] = real_handle;
+ this->next_handle++;
+ return handle;
}
-void SoundContext::stop(Sound::Handle & handle) { this->engine.stop(handle.handle); }
+void SoundContext::stop(const SoundHandle & handle) {
+ this->engine.stop(this->registry[handle]);
+}
-void SoundContext::set_volume(Sound::Handle & handle, float volume) {
- this->engine.setVolume(handle.handle, volume);
+void SoundContext::set_volume(const SoundHandle & handle, float volume) {
+ this->engine.setVolume(this->registry[handle], volume);
}
-void SoundContext::set_loop(Sound::Handle & handle, bool loop) {
- this->engine.setLooping(handle.handle, loop);
+void SoundContext::set_loop(const SoundHandle & handle, bool loop) {
+ this->engine.setLooping(this->registry[handle], loop);
}
+
diff --git a/src/crepe/facade/SoundContext.h b/src/crepe/facade/SoundContext.h
index 3bc8be5..102f928 100644
--- a/src/crepe/facade/SoundContext.h
+++ b/src/crepe/facade/SoundContext.h
@@ -4,6 +4,7 @@
#include "../api/Config.h"
+#include "SoundHandle.h"
#include "Sound.h"
namespace crepe {
@@ -33,7 +34,7 @@ public:
*
* \returns Handle to control this voice
*/
- virtual Sound::Handle play(Sound & resource);
+ virtual SoundHandle play(Sound & resource);
/**
* \brief Stop a voice immediately if it is still playing
*
@@ -42,7 +43,7 @@ public:
*
* \param handle Voice handle returned by SoundContext::play
*/
- virtual void stop(Sound::Handle & handle);
+ virtual void stop(const SoundHandle & handle);
/**
* \brief Change the volume of a voice
*
@@ -52,7 +53,7 @@ public:
* \param handle Voice handle returned by SoundContext::play
* \param volume New gain value (0=silent, 1=default)
*/
- virtual void set_volume(Sound::Handle & handle, float volume);
+ virtual void set_volume(const SoundHandle & handle, float volume);
/**
* \brief Set the looping behavior of a voice
*
@@ -62,7 +63,7 @@ public:
* \param handle Voice handle returned by SoundContext::play
* \param loop Looping behavior (false=oneshot, true=loop)
*/
- virtual void set_loop(Sound::Handle & handle, bool loop);
+ virtual void set_loop(const SoundHandle & handle, bool loop);
private:
//! Abstracted class
@@ -70,6 +71,12 @@ private:
//! Config reference
Config & config = Config::get_instance();
+
+ //! Sound handle registry
+ std::unordered_map<SoundHandle, SoLoud::handle> registry;
+ //! Unique handle counter
+ SoundHandle next_handle = 0;
+
};
} // namespace crepe
diff --git a/src/crepe/facade/SoundHandle.h b/src/crepe/facade/SoundHandle.h
new file mode 100644
index 0000000..131d28c
--- /dev/null
+++ b/src/crepe/facade/SoundHandle.h
@@ -0,0 +1,13 @@
+#pragma once
+
+#include <cstddef>
+
+namespace crepe {
+
+/**
+ * \brief Voice handle returned by
+ */
+typedef size_t SoundHandle;
+
+}
+