From 74b8ee73c593331c50512b56f84fbfc7e1e473aa Mon Sep 17 00:00:00 2001 From: SHAM-DP Date: Mon, 30 Jan 2023 16:47:03 +0800 Subject: [PATCH] Spatial setup --- .../src/AudioSystem/SHAudioSystem.cpp | 25 +++++++++++++++---- SHADE_Engine/src/AudioSystem/SHAudioSystem.h | 3 +-- 2 files changed, 21 insertions(+), 7 deletions(-) diff --git a/SHADE_Engine/src/AudioSystem/SHAudioSystem.cpp b/SHADE_Engine/src/AudioSystem/SHAudioSystem.cpp index 543523e0..b4330979 100644 --- a/SHADE_Engine/src/AudioSystem/SHAudioSystem.cpp +++ b/SHADE_Engine/src/AudioSystem/SHAudioSystem.cpp @@ -125,14 +125,29 @@ namespace SHADE SHTransformComponent* listenerTransform = SHComponentManager::GetComponent_s(listener.GetEID()); if (listenerTransform) { - listener.SetPos(listenerTransform->GetLocalPosition()); - listener.SetForward({ (listenerTransform->GetLocalScale()[0] > 0.f) ? 1.f : -1.f, 0.f, 0.f }); + listener.SetPos(listenerTransform->GetWorldPosition()); // TODO: Clean up listener + listener.SetForward({ (listenerTransform->GetLocalScale()[0] > 0.f) ? 1.f : -1.f, 0.f, 0.f }); //TODO: USE CORRECT FORWARD FMOD_VECTOR pos = { listener.pos[0] ,listener.pos[1] ,0.f }; FMOD_VECTOR forward = { listener.forward[0] ,listener.forward[1] ,listener.forward[2] }; FMOD_VECTOR up = { listener.up[0] ,listener.up[1] ,listener.up[2] }; fmodSystem->set3DListenerAttributes(0, &pos, nullptr, &forward, &up); } } + + auto [begin, end] = audioClipLibrary.GetDenseAccess(); + for(auto it = begin; it != end; ++it) + { + if(it->instance && (it->transformRef != MAX_EID)) + { + if(SHTransformComponent* transformComponent = SHComponentManager::GetComponent_s(it->transformRef)) + { + FMOD_3D_ATTRIBUTES attribs{}; //TODO: Set other attribs + auto pos = transformComponent->GetWorldPosition(); + attribs.position = {pos.x, pos.y, pos.z}; + it->instance->set3DAttributes(&attribs); + } + } + } } SHAudioSystem::AudioRoutine::AudioRoutine() @@ -372,13 +387,13 @@ namespace SHADE { if (auto transform = SHComponentManager::GetComponent_s(eid)) { - //handle->transformRef = transform; + handle->transformRef = eid; } } - void SHAudioSystem::DetachAudioClipToObject(Handle handle, EntityID eid) + void SHAudioSystem::DetachAudioClipFromObject(Handle handle) { - //handle->transformRef = nullptr; + handle->transformRef = MAX_EID; } //AudioClip* SHAudioSystem::CreateAudioClip(const char* path) diff --git a/SHADE_Engine/src/AudioSystem/SHAudioSystem.h b/SHADE_Engine/src/AudioSystem/SHAudioSystem.h index d1fc325a..0c12cef4 100644 --- a/SHADE_Engine/src/AudioSystem/SHAudioSystem.h +++ b/SHADE_Engine/src/AudioSystem/SHAudioSystem.h @@ -26,7 +26,6 @@ namespace SHADE class SH_API AudioClip { public: - //expose to sxripting void Play(); //void Play(SHVec3 position); void Stop(bool fadeOut = true); @@ -75,7 +74,7 @@ namespace SHADE void AddAudioClipToSFXChannelGroup(Handle handle); void AttachAudioClipToObject(Handle handle, EntityID eid); - void DetachAudioClipToObject(Handle handle, EntityID eid); + void DetachAudioClipFromObject(Handle handle); /// float GetBgmVolume(); float GetSfxVolume();