From d9dd7f535fb02a796257e4f75ae4f02b0c3ea8c7 Mon Sep 17 00:00:00 2001 From: stiffly Date: Fri, 15 Jan 2016 13:45:08 +0100 Subject: [PATCH] When changing camera listener is updated. Also fixed some crashes in RenderSystem when there were no cameras available. --- src/Engine/Rendering/RenderSystem.cpp | 19 +++++++++++++++---- src/Engine/Sound/SoundSystem.cpp | 7 ++++++- 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/src/Engine/Rendering/RenderSystem.cpp b/src/Engine/Rendering/RenderSystem.cpp index 1f2bac9d..69eb5775 100644 --- a/src/Engine/Rendering/RenderSystem.cpp +++ b/src/Engine/Rendering/RenderSystem.cpp @@ -39,11 +39,17 @@ void RenderSystem::switchCamera(EntityID entity) if (m_World->HasComponent(m_CurrentCamera, "Model")) { m_World->GetComponent(m_CurrentCamera, "Model")["Visible"] = true; } + if (m_World->HasComponent(m_CurrentCamera, "Listener")) { + m_World->DeleteComponent(m_CurrentCamera, "Listener"); + } } if (m_World->HasComponent(entity, "Model")) { m_World->GetComponent(entity, "Model")["Visible"] = false; } + if (!m_World->HasComponent(entity, "Listener")) { + m_World->AttachComponent(entity, "Listener"); + } m_CurrentCamera = entity; m_SwitchCamera = false; @@ -130,6 +136,9 @@ void RenderSystem::updateCamera(World* world, double dt) { if (m_SwitchCamera) { auto cameras = world->GetComponents("Camera"); + if (cameras == nullptr) { + return; + } for (auto it = cameras->begin(); it != cameras->end(); it++) { if ((*it).EntityID == m_CurrentCamera) { it++; @@ -141,11 +150,13 @@ void RenderSystem::updateCamera(World* world, double dt) break; } } - ComponentWrapper& cameraComponent = world->GetComponent(m_CurrentCamera, "Camera"); - ComponentWrapper& cameraTransform = world->GetComponent(m_CurrentCamera, "Transform"); + if (m_World->HasComponent(m_CurrentCamera, "Camera")) { + ComponentWrapper& cameraComponent = world->GetComponent(m_CurrentCamera, "Camera"); + ComponentWrapper& cameraTransform = world->GetComponent(m_CurrentCamera, "Transform"); - m_DebugCameraInputController->SetOrientation(glm::quat((glm::vec3)cameraTransform["Orientation"])); - m_DebugCameraInputController->SetPosition(cameraTransform["Position"]); + m_DebugCameraInputController->SetOrientation(glm::quat((glm::vec3)cameraTransform["Orientation"])); + m_DebugCameraInputController->SetPosition(cameraTransform["Position"]); + } } if (m_World->ValidEntity(m_CurrentCamera)) { diff --git a/src/Engine/Sound/SoundSystem.cpp b/src/Engine/Sound/SoundSystem.cpp index ed65351f..d51ec50e 100644 --- a/src/Engine/Sound/SoundSystem.cpp +++ b/src/Engine/Sound/SoundSystem.cpp @@ -135,6 +135,7 @@ void SoundSystem::updateEmitters() void SoundSystem::updateListener() { + int testremove = 0; // Should only be one listener. auto listenerComponents = m_World->GetComponents("Listener"); if (listenerComponents == nullptr) { @@ -147,8 +148,12 @@ void SoundSystem::updateListener() glm::vec3 nextPos = Transform::AbsolutePosition(m_World, listener); // Get next (current) pos glm::vec3 velocity = nextPos - previousPos; // Calculate velocity setListenerPos(nextPos); - setListenerVel(velocity); + //setListenerVel(velocity); setListenerOri(glm::eulerAngles(Transform::AbsoluteOrientation(m_World, listener))); + testremove++; + } + if (testremove > 1) { + testremove = 0; } }