diff options
| author | Jonathan Bradley <jcb@pikum.xyz> | 2025-07-11 11:41:21 -0400 |
|---|---|---|
| committer | Jonathan Bradley <jcb@pikum.xyz> | 2025-07-11 11:41:21 -0400 |
| commit | f88ca0bc946bae086e02eacdc6c129f00e2e07e3 (patch) | |
| tree | eb8975ec505315e7f53a15ded32fb0cfd6b57731 /src/audio.cpp | |
| parent | 1fd2b900a5f97379e80adc411d3763f9ba811570 (diff) | |
pke: audio: fx boilerplate, low-pass spatial
Diffstat (limited to 'src/audio.cpp')
| -rw-r--r-- | src/audio.cpp | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/src/audio.cpp b/src/audio.cpp index 194c01c..33ea740 100644 --- a/src/audio.cpp +++ b/src/audio.cpp @@ -3,6 +3,8 @@ #include "asset-manager.hpp" #include "audio-impl-pw.hpp" #include "audio.hpp" +#include "ecs.hpp" +#include "math-helpers.hpp" #include "pk.h" struct pke_audio_master pke_audio_mstr{}; @@ -26,11 +28,29 @@ void pke_audio_teardown() { } void pke_audio_tick(double delta) { (void)delta; + uint32_t i, k; #ifdef PKE_AUDIO_IMPL_PIPEWIRE if (pke_audio_pw.is_needing_output_remapped == true) { pke_audio_pw_remap_outputs(); } #endif + pke_audio_mstr.mtx_buffer.lock(); + for (i = 0; i < pke_audio_mstr.playing_objects.next; ++i) { + for (k = 0; k < pke_audio_mstr.playing_objects[i].play_count; ++k) { + if (pke_audio_mstr.playing_objects[i].instance_handle[k] == InstanceHandle_MAX) { + continue; + } + CompInstance *inst = ECS_GetInstance(pke_audio_mstr.playing_objects[i].instance_handle[k]); + if (inst == nullptr || inst->instanceHandle == InstanceHandle_MAX) { + continue; + } + BulletToGlm( + inst->bt.rigidBody->getWorldTransform().getOrigin(), + pke_audio_mstr.playing_objects[i].position_source[k] + ); + } + } + pke_audio_mstr.mtx_buffer.unlock(); } float pke_audio_get_volume(pke_audio_source source) { @@ -46,7 +66,7 @@ bool pke_audio_playing_objects_find_first_by_key(void *user_data, void *arr_data pke_audio_obj &audio_obj = *reinterpret_cast<pke_audio_obj*>(arr_data); return std::get<0>(tup) == audio_obj.handle && std::get<1>(tup) == audio_obj.source; } -void pke_audio_play(AssetHandle handle, pke_audio_source audio_source, glm::vec3 position_source, pke_audio_flags flags) { +void pke_audio_play(AssetHandle handle, pke_audio_source audio_source, pke_audio_flags flags, glm::vec3 position_source, InstanceHandle instance_handle) { // TODO validation: audio length (does it fit in uint32_t), etc // TODO rethink threading: first-pass only mutex std::tuple<AssetHandle, pke_audio_source> tup {handle, audio_source}; @@ -67,6 +87,7 @@ void pke_audio_play(AssetHandle handle, pke_audio_source audio_source, glm::vec3 idx = aobj->play_count; aobj->play_count += 1; } + aobj->instance_handle[idx] = instance_handle; aobj->position_source[idx] = position_source; aobj->flags[idx] = flags; aobj->play_heads[idx] = 0; |
