Now calculating the velocity for the listener correctly.
This commit is contained in:
@@ -41,7 +41,7 @@ public:
|
|||||||
SoundSystem(World* world, EventBroker* eventBroker, bool editorMode);
|
SoundSystem(World* world, EventBroker* eventBroker, bool editorMode);
|
||||||
~SoundSystem();
|
~SoundSystem();
|
||||||
// Update emitters / listener
|
// Update emitters / listener
|
||||||
void Update();
|
void Update(double dt);
|
||||||
private:
|
private:
|
||||||
// Help functions for working with OpenaAL
|
// Help functions for working with OpenaAL
|
||||||
void setListenerPos(glm::vec3 pos) { alListener3f(AL_POSITION, pos.x, pos.y, pos.z); };
|
void setListenerPos(glm::vec3 pos) { alListener3f(AL_POSITION, pos.x, pos.y, pos.z); };
|
||||||
@@ -55,10 +55,10 @@ private:
|
|||||||
|
|
||||||
// Logic
|
// Logic
|
||||||
void initOpenAL();
|
void initOpenAL();
|
||||||
void updateEmitters();
|
void updateEmitters(double dt);
|
||||||
void updateListener();
|
void updateListener(double dt);
|
||||||
void deleteInactiveEmitters();
|
void deleteInactiveEmitters();
|
||||||
void addNewEmitters();
|
void addNewEmitters(double dt);
|
||||||
Source* createSource(std::string filePath);
|
Source* createSource(std::string filePath);
|
||||||
void playSound(Source* source);
|
void playSound(Source* source);
|
||||||
void stopSound(Source* source);
|
void stopSound(Source* source);
|
||||||
|
|||||||
@@ -47,13 +47,13 @@ void SoundSystem::stopEmitters()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void SoundSystem::Update()
|
void SoundSystem::Update(double dt)
|
||||||
{
|
{
|
||||||
m_EventBroker->Process<SoundSystem>();
|
m_EventBroker->Process<SoundSystem>();
|
||||||
addNewEmitters(); // can be optimized with "EEntityCreated"
|
addNewEmitters(dt); // can be optimized with "EEntityCreated"
|
||||||
deleteInactiveEmitters(); // can be optimized with "EEntityDeleted"
|
deleteInactiveEmitters(); // can be optimized with "EEntityDeleted"
|
||||||
updateEmitters();
|
updateEmitters( dt);
|
||||||
updateListener();
|
updateListener( dt);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SoundSystem::deleteInactiveEmitters()
|
void SoundSystem::deleteInactiveEmitters()
|
||||||
@@ -85,7 +85,7 @@ void SoundSystem::deleteInactiveEmitters()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void SoundSystem::addNewEmitters()
|
void SoundSystem::addNewEmitters(double dt)
|
||||||
{
|
{
|
||||||
auto emitterComponents = m_World->GetComponents("SoundEmitter");
|
auto emitterComponents = m_World->GetComponents("SoundEmitter");
|
||||||
if (emitterComponents == nullptr) {
|
if (emitterComponents == nullptr) {
|
||||||
@@ -102,7 +102,7 @@ void SoundSystem::addNewEmitters()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void SoundSystem::updateEmitters()
|
void SoundSystem::updateEmitters(double dt)
|
||||||
{
|
{
|
||||||
std::unordered_map<EntityID, Source*>::iterator it;
|
std::unordered_map<EntityID, Source*>::iterator it;
|
||||||
for (it = m_Sources.begin(); it != m_Sources.end(); it++) {
|
for (it = m_Sources.begin(); it != m_Sources.end(); it++) {
|
||||||
@@ -133,9 +133,8 @@ void SoundSystem::updateEmitters()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void SoundSystem::updateListener()
|
void SoundSystem::updateListener(double dt)
|
||||||
{
|
{
|
||||||
int testremove = 0;
|
|
||||||
// Should only be one listener.
|
// Should only be one listener.
|
||||||
auto listenerComponents = m_World->GetComponents("Listener");
|
auto listenerComponents = m_World->GetComponents("Listener");
|
||||||
if (listenerComponents == nullptr) {
|
if (listenerComponents == nullptr) {
|
||||||
@@ -146,14 +145,10 @@ void SoundSystem::updateListener()
|
|||||||
glm::vec3 previousPos;
|
glm::vec3 previousPos;
|
||||||
alGetListener3f(AL_POSITION, &previousPos.x, &previousPos.y, &previousPos.z); // Get previous pos
|
alGetListener3f(AL_POSITION, &previousPos.x, &previousPos.y, &previousPos.z); // Get previous pos
|
||||||
glm::vec3 nextPos = Transform::AbsolutePosition(m_World, listener); // Get next (current) pos
|
glm::vec3 nextPos = Transform::AbsolutePosition(m_World, listener); // Get next (current) pos
|
||||||
glm::vec3 velocity = nextPos - previousPos; // Calculate velocity
|
glm::vec3 velocity = glm::vec3(nextPos - previousPos) / (float)dt; // Calculate velocity
|
||||||
setListenerPos(nextPos);
|
setListenerPos(nextPos);
|
||||||
//setListenerVel(velocity);
|
setListenerVel(velocity);
|
||||||
setListenerOri(glm::eulerAngles(Transform::AbsoluteOrientation(m_World, listener)));
|
setListenerOri(glm::eulerAngles(Transform::AbsoluteOrientation(m_World, listener)));
|
||||||
testremove++;
|
|
||||||
}
|
|
||||||
if (testremove > 1) {
|
|
||||||
testremove = 0;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -127,7 +127,7 @@ void Game::Tick()
|
|||||||
debugTick(dt);
|
debugTick(dt);
|
||||||
m_Renderer->Update(dt);
|
m_Renderer->Update(dt);
|
||||||
m_EventBroker->Process<Client>();
|
m_EventBroker->Process<Client>();
|
||||||
m_SoundSystem->Update();
|
m_SoundSystem->Update(dt);
|
||||||
GLERROR("Game::Tick m_RenderQueueFactory->Update");
|
GLERROR("Game::Tick m_RenderQueueFactory->Update");
|
||||||
m_Renderer->Draw(*m_RenderFrame);
|
m_Renderer->Draw(*m_RenderFrame);
|
||||||
GLERROR("Game::Tick m_Renderer->Draw");
|
GLERROR("Game::Tick m_Renderer->Draw");
|
||||||
|
|||||||
Reference in New Issue
Block a user