Merge remote-tracking branch 'origin/master' into LevelSystemAndSuch

This commit is contained in:
PlatinumSkink
2015-09-29 14:44:50 +02:00
12 changed files with 280 additions and 110 deletions
+5 -5
View File
@@ -552,15 +552,15 @@ private:
//Todo: Move this //Todo: Move this
{ {
dd::Events::PlaySound e; dd::Events::PlaySound e;
e.path = "Sounds/BGM/under-the-sea-instrumental.wav"; e.FilePath = "Sounds/BGM/under-the-sea-instrumental.wav";
e.isAmbient = true; e.IsAmbient = true;
m_EventBroker->Publish(e); m_EventBroker->Publish(e);
} }
{ {
dd::Events::PlaySound e; dd::Events::PlaySound e;
e.path = "Sounds/BGM/water-flowing.wav"; e.FilePath = "Sounds/BGM/water-flowing.wav";
e.volume = 0.3f; e.Gain = 0.3f;
e.isAmbient = true; e.IsAmbient = true;
m_EventBroker->Publish(e); m_EventBroker->Publish(e);
} }
}; };
+4 -4
View File
@@ -61,15 +61,15 @@ private:
{ {
if (event.Slider == m_SFXSlider) { if (event.Slider == m_SFXSlider) {
Events::MasterVolume e; Events::MasterVolume e;
e.isAmbient = false; e.IsAmbient = false;
e.gain = event.Percentage; e.Gain = event.Percentage;
EventBroker->Publish(e); EventBroker->Publish(e);
} }
if (event.Slider == m_BGMSlider) { if (event.Slider == m_BGMSlider) {
Events::MasterVolume e; Events::MasterVolume e;
e.isAmbient = true; e.IsAmbient = true;
e.gain = event.Percentage; e.Gain = event.Percentage;
EventBroker->Publish(e); EventBroker->Publish(e);
} }
+1 -7
View File
@@ -1,7 +1,3 @@
//
// Created by Adam on 2015-09-17.
//
#ifndef COMPONENTS_CCOLLISIONSOUND_H__ #ifndef COMPONENTS_CCOLLISIONSOUND_H__
#define COMPONENTS_CCOLLISIONSOUND_H__ #define COMPONENTS_CCOLLISIONSOUND_H__
@@ -9,17 +5,15 @@
namespace dd namespace dd
{ {
namespace Components namespace Components
{ {
struct CollisionSound : public Component struct CollisionSound : public Component
{ {
std::string filePath; std::string FilePath;
}; };
} }
} }
#endif #endif
+2 -8
View File
@@ -1,7 +1,3 @@
//
// Created by Adam on 2015-09-24.
//
#ifndef EVENTS_EMASTERVOLUME_H__ #ifndef EVENTS_EMASTERVOLUME_H__
#define EVENTS_EMASTERVOLUME_H__ #define EVENTS_EMASTERVOLUME_H__
@@ -9,19 +5,17 @@
namespace dd namespace dd
{ {
namespace Events namespace Events
{ {
struct MasterVolume : public Event struct MasterVolume : public Event
{ {
float gain = 1; float Gain = 1;
//To determine what channel group to apply the change to. //To determine what channel group to apply the change to.
bool isAmbient = false; bool IsAmbient = false;
}; };
} }
} }
#endif #endif
+6 -8
View File
@@ -1,24 +1,22 @@
#ifndef Events_PlaySFX_h__ #ifndef EVENTS_PLAYSFX_H__
#define Events_PlaySFX_h__ #define EVENTS_PLAYSFX_H__
#include "Core/EventBroker.h" #include "Core/EventBroker.h"
namespace dd namespace dd
{ {
namespace Events namespace Events
{ {
struct PlaySound : Event struct PlaySound : Event
{ {
std::string path; std::string FilePath;
float volume = 1.f; float Gain = 1.f;
float pitch = 1.f; float Pitch = 1.f;
bool isAmbient = false; bool IsAmbient = false;
}; };
} }
} }
#endif #endif
+1 -5
View File
@@ -8,16 +8,12 @@ namespace dd
namespace Events namespace Events
{ {
struct StopSound : public Event struct StopSound : public Event
{ {
std::string path; std::string FilePath;
}; };
} }
} }
#endif #endif
+8 -4
View File
@@ -12,12 +12,20 @@ namespace dd
class Sound : public Resource class Sound : public Resource
{ {
friend class ResourceManager; friend class ResourceManager;
public: public:
ALuint Buffer() { return m_Buffer; }; ALuint Buffer() { return m_Buffer; };
std::string Path() { return m_Path; }; std::string Path() { return m_Path; };
float Gain() { return m_Gain; };
void SetGain(const float Gain) { m_Gain = Gain; };
private: private:
Sound(std::string path); Sound(std::string path);
float m_Gain = 1;
ALuint m_Buffer;
std::string m_Path;
//File-info //File-info
char m_Type[4]; char m_Type[4];
unsigned long m_Size, m_ChunkSize; unsigned long m_Size, m_ChunkSize;
@@ -27,12 +35,8 @@ private:
unsigned long m_DataSize; unsigned long m_DataSize;
std::map<std::string, ALuint> m_BufferCache; std::map<std::string, ALuint> m_BufferCache;
ALuint LoadFile(std::string path); ALuint LoadFile(std::string path);
ALuint m_Buffer;
std::string m_Path;
}; };
} }
#endif #endif
+20 -21
View File
@@ -1,61 +1,60 @@
#ifndef DAYDREAM_SOUND_H #ifndef SYSTEMS_SOUNDSYSTEM_H__
#define DAYDREAM_SOUND_H #define SYSTEMS_SOUNDSYSTEM_H__
#include "AL/al.h" #include "AL/al.h"
#include "AL/alc.h" #include "AL/alc.h"
#include "Core/System.h" #include "Core/System.h"
#include "Core/World.h" #include "Core/World.h"
#include "Core/EventBroker.h" #include "Core/EventBroker.h"
#include "Core/ResourceManager.h"
#include "Sound.h" #include "Sound.h"
#include "Sound/EPlaySound.h" #include "Sound/EPlaySound.h"
#include "Sound/EStopSound.h" #include "Sound/EStopSound.h"
#include "Sound/EMasterVolume.h" #include "Sound/EMasterVolume.h"
#include "Sound/CCollisionSound.h"
#include "Physics/EContact.h" #include "Physics/EContact.h"
#include "Game/CBall.h" #include "Game/CBall.h"
#include "Game/CBrick.h" #include "Game/CBrick.h"
#include "Game/CPad.h" #include "Game/CPad.h"
#include "Sound/CCollisionSound.h"
#include "Core/ResourceManager.h"
namespace dd namespace dd
{ {
namespace Systems namespace Systems
{ {
class SoundSystem : public System { class SoundSystem : public System {
public: public:
SoundSystem(World *world, std::shared_ptr<dd::EventBroker> eventBroker) SoundSystem(World *world, std::shared_ptr<dd::EventBroker> eventBroker)
: System(world, eventBroker) { } : System(world, eventBroker) { }
~SoundSystem(); ~SoundSystem();
void Initialize() override; void Initialize() override;
void Update(double dt) override; void Update(double dt) override;
private: private:
float m_BGMMasterVolume = 1.f;
float m_SFXMasterVolume = 1.f;
std::map<ALuint, Sound*> m_BGMSourcesToBuffers;
std::map<ALuint, Sound*> m_SFXSourcesToBuffers;
ALCdevice* m_Device = nullptr;
//Events //Events
dd::EventRelay<SoundSystem, dd::Events::PlaySound> m_EPlaySFX; dd::EventRelay<SoundSystem, dd::Events::PlaySound> m_EPlaySFX;
dd::EventRelay<SoundSystem, dd::Events::Contact> m_EContact;
dd::EventRelay<SoundSystem, dd::Events::StopSound> m_EStopSound;
dd::EventRelay<SoundSystem, dd::Events::MasterVolume> m_EMasterVolume;
bool OnPlaySound(const dd::Events::PlaySound &event); bool OnPlaySound(const dd::Events::PlaySound &event);
//On contact: play the sound given in the CCOllisionSound.
dd::EventRelay<SoundSystem, dd::Events::Contact> m_EContact;
bool OnContact(const dd::Events::Contact &event); bool OnContact(const dd::Events::Contact &event);
dd::EventRelay<SoundSystem, dd::Events::StopSound> m_EStopSound;
bool OnStopSound(const dd::Events::StopSound &event); bool OnStopSound(const dd::Events::StopSound &event);
dd::EventRelay<SoundSystem, dd::Events::MasterVolume> m_EMasterVolume;
bool OnMasterVolume(const dd::Events::MasterVolume &event); bool OnMasterVolume(const dd::Events::MasterVolume &event);
ALuint CreateSource(); ALuint CreateSource();
std::map<ALuint, Sound*> m_BGMSourcesToBuffers;
std::map<ALuint, Sound*> m_SFXSourcesToBuffers;
ALCdevice* m_Device;
float m_BGMMasterVolume, m_SFXMasterVolume;
}; };
} }
} }
#endif //DAYDREAM_SOUND_H #endif
+3 -3
View File
@@ -263,7 +263,7 @@ void dd::OBJ::ParseMaterial()
ParseColorMap(currentLine, ss, prefix, arg, colorMap); ParseColorMap(currentLine, ss, prefix, arg, colorMap);
} }
// HACK: Should we really have to specify the full path here? // HACK: Should we really have to specify the full FilePath here?
colorMap.FileName = (m_MaterialPath.branch_path() / colorMap.FileName).string(); colorMap.FileName = (m_MaterialPath.branch_path() / colorMap.FileName).string();
currentMaterial->DiffuseTexture = colorMap; currentMaterial->DiffuseTexture = colorMap;
continue; continue;
@@ -280,7 +280,7 @@ void dd::OBJ::ParseMaterial()
ParseColorMap(currentLine, ss, prefix, arg, colorMap); ParseColorMap(currentLine, ss, prefix, arg, colorMap);
} }
// HACK: Should we really have to specify the full path here? // HACK: Should we really have to specify the full FilePath here?
colorMap.FileName = (m_MaterialPath.branch_path() / colorMap.FileName).string(); colorMap.FileName = (m_MaterialPath.branch_path() / colorMap.FileName).string();
currentMaterial->SpecularMap = colorMap; currentMaterial->SpecularMap = colorMap;
continue; continue;
@@ -297,7 +297,7 @@ void dd::OBJ::ParseMaterial()
ParseBumpMap(currentLine, ss, prefix, arg, bumpMap); ParseBumpMap(currentLine, ss, prefix, arg, bumpMap);
} }
// HACK: Should we really have to specify the full path here? // HACK: Should we really have to specify the full FilePath here?
bumpMap.FileName = (m_MaterialPath.branch_path() / bumpMap.FileName).string(); bumpMap.FileName = (m_MaterialPath.branch_path() / bumpMap.FileName).string();
currentMaterial->NormalMap = bumpMap; currentMaterial->NormalMap = bumpMap;
continue; continue;
+1 -1
View File
@@ -119,7 +119,7 @@ void dd::Systems::LevelSystem::CreateBrick(int row, int line, glm::vec2 spacesBe
//sound //sound
auto collisionSound = m_World->AddComponent<Components::CollisionSound>(brick); auto collisionSound = m_World->AddComponent<Components::CollisionSound>(brick);
collisionSound->filePath = "Sounds/Brick/shortbrickbreak.wav"; collisionSound->FilePath = "Sounds/Brick/shortbrickbreak.wav";
m_World->CommitEntity(brick); m_World->CommitEntity(brick);
return; return;
+46 -44
View File
@@ -4,7 +4,7 @@
dd::Systems::SoundSystem::~SoundSystem() dd::Systems::SoundSystem::~SoundSystem()
{ {
alcCloseDevice(m_Device); alcCloseDevice(m_Device);
} };
void dd::Systems::SoundSystem::Initialize() void dd::Systems::SoundSystem::Initialize()
{ {
@@ -19,24 +19,28 @@ void dd::Systems::SoundSystem::Initialize()
else { else {
LOG_ERROR("OpenAL failed to initialize."); LOG_ERROR("OpenAL failed to initialize.");
} }
alGetError(); alGetError();
//Probably unnecessary. vec3(0) probably default.
const ALfloat pos[3] = {0, 0, 0};
//alListenerfv(AL_POSITION, pos);
m_SFXMasterVolume = 1.f;
m_BGMMasterVolume = 1.f;
//Subscribe to events //Subscribe to events
EVENT_SUBSCRIBE_MEMBER(m_EContact, &SoundSystem::OnContact); EVENT_SUBSCRIBE_MEMBER(m_EContact, &SoundSystem::OnContact);
EVENT_SUBSCRIBE_MEMBER(m_EPlaySFX, &SoundSystem::OnPlaySound); EVENT_SUBSCRIBE_MEMBER(m_EPlaySFX, &SoundSystem::OnPlaySound);
EVENT_SUBSCRIBE_MEMBER(m_EStopSound, &SoundSystem::OnStopSound); EVENT_SUBSCRIBE_MEMBER(m_EStopSound, &SoundSystem::OnStopSound);
EVENT_SUBSCRIBE_MEMBER(m_EMasterVolume, &SoundSystem::OnMasterVolume); EVENT_SUBSCRIBE_MEMBER(m_EMasterVolume, &SoundSystem::OnMasterVolume);
//Todo: Move this
{
dd::Events::PlaySound e;
e.FilePath = "Sounds/BGM/under-the-sea-instrumental.wav";
e.IsAmbient = true;
EventBroker->Publish(e);
}
{
dd::Events::PlaySound e;
e.FilePath = "Sounds/BGM/water-flowing.wav";
e.Gain = 0.3f;
e.IsAmbient = true;
EventBroker->Publish(e);
}
} }
void dd::Systems::SoundSystem::Update(double dt) void dd::Systems::SoundSystem::Update(double dt)
@@ -44,7 +48,7 @@ void dd::Systems::SoundSystem::Update(double dt)
//Clean up none-active sources //Clean up none-active sources
//Only used for SFX's. BGM's are handled on stop sound. //Only used for SFX's. BGM's are handled on stop sound.
std::vector<ALuint> deleteList; std::vector<ALuint> deleteList;
for (auto item : m_SFXSourcesToBuffers) { for (auto& item : m_SFXSourcesToBuffers) {
ALint sourceState; ALint sourceState;
alGetSourcei(item.first, AL_SOURCE_STATE, &sourceState); alGetSourcei(item.first, AL_SOURCE_STATE, &sourceState);
if (sourceState == AL_STOPPED) { if (sourceState == AL_STOPPED) {
@@ -70,32 +74,32 @@ ALuint dd::Systems::SoundSystem::CreateSource()
bool dd::Systems::SoundSystem::OnPlaySound(const dd::Events::PlaySound &event) bool dd::Systems::SoundSystem::OnPlaySound(const dd::Events::PlaySound &event)
{ {
//Loading and binding sound buffer to source //Loading and binding sound buffer to source
Sound *sound = ResourceManager::Load<Sound>(event.path); Sound *sound = ResourceManager::Load<Sound>(event.FilePath);
if (sound == nullptr) { if (sound == nullptr) {
return false; return false;
} }
ALuint source = CreateSource(); ALuint source = CreateSource();
ALuint buffer = sound->Buffer(); ALuint buffer = sound->Buffer();
alSourcei(source, AL_BUFFER, buffer); alSourcei(source, AL_BUFFER, buffer);
sound->SetGain(event.Gain);
//Sound settings //Sound settings
float relativeVolume = 1.f; float relativeVolume = 1.f;
if (event.isAmbient) { if (event.IsAmbient) {
alSourcei(source, AL_LOOPING, AL_TRUE); alSourcei(source, AL_LOOPING, AL_TRUE);
relativeVolume = m_BGMMasterVolume; relativeVolume = m_BGMMasterVolume;
m_BGMSourcesToBuffers[source] = sound; m_BGMSourcesToBuffers[source] = sound;
} }
else if (!event.isAmbient) else if (!event.IsAmbient)
{ {
m_SFXSourcesToBuffers[source] = sound; m_SFXSourcesToBuffers[source] = sound;
alSourcei(source, AL_LOOPING, AL_FALSE); alSourcei(source, AL_LOOPING, AL_FALSE);
relativeVolume = m_SFXMasterVolume; relativeVolume = m_SFXMasterVolume;
} }
alSourcef(source, AL_GAIN, (event.volume * relativeVolume)); alSourcef(source, AL_GAIN, (sound->Gain() * relativeVolume));
alSourcef(source, AL_PITCH, event.pitch); alSourcef(source, AL_PITCH, event.Pitch);
//Play //Play
alSourcePlay(source); alSourcePlay(source);
@@ -104,53 +108,50 @@ bool dd::Systems::SoundSystem::OnPlaySound(const dd::Events::PlaySound &event)
bool dd::Systems::SoundSystem::OnStopSound(const dd::Events::StopSound &event) bool dd::Systems::SoundSystem::OnStopSound(const dd::Events::StopSound &event)
{ {
ALuint itemToDeleted;
//TODO: Delete sources for bgms for (auto& item : m_BGMSourcesToBuffers)
ALuint itemToDelete;
for (auto item : m_BGMSourcesToBuffers)
{ {
if (item.second->Path() == event.path) { if (item.second->Path() == event.FilePath) {
itemToDelete = item.first; itemToDeleted = item.first;
break; break;
} }
} }
alSourceStop(itemToDelete); alSourceStop(itemToDeleted);
alDeleteSources(1, &itemToDelete); alDeleteSources(1, &itemToDeleted);
m_BGMSourcesToBuffers.erase(itemToDelete); m_BGMSourcesToBuffers.erase(itemToDeleted);
//Should not because SFX's should be very short. //Should not happen because SFX's should be very short.
for (auto item : m_SFXSourcesToBuffers) for (auto item : m_SFXSourcesToBuffers)
{ {
if (item.second->Path() == event.path) { if (item.second->Path() == event.FilePath) {
alSourceStop(item.first); alSourceStop(item.first);
return true; return true;
} }
} }
return false; return false;
} }
bool dd::Systems::SoundSystem::OnMasterVolume(const dd::Events::MasterVolume &event) bool dd::Systems::SoundSystem::OnMasterVolume(const dd::Events::MasterVolume &event)
{ {
//TODO: Make the volume depend on the value given when stored. if (event.IsAmbient) {
//TODO: .. now it ONLY uses the master volume m_BGMMasterVolume = event.Gain;
if (event.isAmbient) { for (auto& item : m_BGMSourcesToBuffers)
m_BGMMasterVolume = event.gain;
for (auto item : m_BGMSourcesToBuffers)
{ {
alSourcef(item.first, AL_GAIN, event.gain); alSourcef(item.first, AL_GAIN, (item.second->Gain() * m_BGMMasterVolume));
} }
return true;
} }
else if (!event.isAmbient) { else if (!event.IsAmbient) {
m_SFXMasterVolume = event.gain; m_SFXMasterVolume = event.Gain;
for (auto item : m_SFXSourcesToBuffers) for (auto& item : m_SFXSourcesToBuffers)
{ {
alSourcef(item.first, AL_GAIN, event.gain); alSourcef(item.first, AL_GAIN, (item.second->Gain() * m_SFXMasterVolume));
} }
return true;
} }
return false;
} }
//On contact: play the sound given in the CCOllisionSound.
bool dd::Systems::SoundSystem::OnContact(const dd::Events::Contact &event) bool dd::Systems::SoundSystem::OnContact(const dd::Events::Contact &event)
{ {
//Check which entity has the collisionSound component. //Check which entity has the collisionSound component.
@@ -165,10 +166,11 @@ bool dd::Systems::SoundSystem::OnContact(const dd::Events::Contact &event)
//Send play-sound event //Send play-sound event
dd::Events::PlaySound e; dd::Events::PlaySound e;
e.path = collisionSound->filePath; e.FilePath = collisionSound->FilePath;
e.isAmbient = false; e.IsAmbient = false;
EventBroker->Publish(e); EventBroker->Publish(e);
//return true; return true;
} }
+183
View File
@@ -0,0 +1,183 @@
#include "PrecompiledHeader.h"
#include "Sound/SoundSystem.h"
dd::Systems::SoundSystem::~SoundSystem()
{
alcCloseDevice(m_Device);
};
void dd::Systems::SoundSystem::Initialize()
{
//initialize OpenAL
m_Device = alcOpenDevice(NULL);
ALCcontext* context;
if (m_Device) {
context = alcCreateContext(m_Device, NULL);
alcMakeContextCurrent(context);
}
else {
LOG_ERROR("OpenAL failed to initialize.");
}
alGetError();
//Subscribe to events
EVENT_SUBSCRIBE_MEMBER(m_EContact, &SoundSystem::OnContact);
EVENT_SUBSCRIBE_MEMBER(m_EPlaySFX, &SoundSystem::OnPlaySound);
EVENT_SUBSCRIBE_MEMBER(m_EStopSound, &SoundSystem::OnStopSound);
EVENT_SUBSCRIBE_MEMBER(m_EMasterVolume, &SoundSystem::OnMasterVolume);
<<<<<<< HEAD
//Todo: Move this
{
dd::Events::PlaySound e;
e.FilePath = "Sounds/BGM/under-the-sea-instrumental.wav";
e.IsAmbient = true;
EventBroker->Publish(e);
}
{
dd::Events::PlaySound e;
e.FilePath = "Sounds/BGM/water-flowing.wav";
e.Gain = 0.3f;
e.IsAmbient = true;
EventBroker->Publish(e);
}
=======
>>>>>>> origin/master
}
void dd::Systems::SoundSystem::Update(double dt)
{
//Clean up none-active sources
//Only used for SFX's. BGM's are handled on stop sound.
std::vector<ALuint> deleteList;
for (auto& item : m_SFXSourcesToBuffers) {
ALint sourceState;
alGetSourcei(item.first, AL_SOURCE_STATE, &sourceState);
if (sourceState == AL_STOPPED) {
deleteList.push_back(item.first);
}
}
for (int i = 0; i < deleteList.size(); i++) {
alDeleteSources(1, &deleteList[i]);
//alDeleteBuffers(1, &m_SourcesToBuffers[deleteList[i]]);
m_SFXSourcesToBuffers.erase(deleteList[i]);
}
}
ALuint dd::Systems::SoundSystem::CreateSource()
{
ALuint source;
alGenSources((ALuint)1, &source);
return source;
}
bool dd::Systems::SoundSystem::OnPlaySound(const dd::Events::PlaySound &event)
{
//Loading and binding sound buffer to source
Sound *sound = ResourceManager::Load<Sound>(event.FilePath);
if (sound == nullptr) {
return false;
}
ALuint source = CreateSource();
ALuint buffer = sound->Buffer();
alSourcei(source, AL_BUFFER, buffer);
//Sound settings
float relativeVolume = 1.f;
if (event.IsAmbient) {
alSourcei(source, AL_LOOPING, AL_TRUE);
relativeVolume = m_BGMMasterVolume;
m_BGMSourcesToBuffers[source] = sound;
}
else if (!event.IsAmbient)
{
m_SFXSourcesToBuffers[source] = sound;
alSourcei(source, AL_LOOPING, AL_FALSE);
relativeVolume = m_SFXMasterVolume;
}
alSourcef(source, AL_GAIN, (event.Gain * relativeVolume));
alSourcef(source, AL_PITCH, event.Pitch);
//Play
alSourcePlay(source);
return true;
}
bool dd::Systems::SoundSystem::OnStopSound(const dd::Events::StopSound &event)
{
ALuint itemToDeleted;
for (auto& item : m_BGMSourcesToBuffers)
{
if (item.second->Path() == event.FilePath) {
itemToDeleted = item.first;
break;
}
}
alSourceStop(itemToDeleted);
alDeleteSources(1, &itemToDeleted);
m_BGMSourcesToBuffers.erase(itemToDeleted);
//Should not happen because SFX's should be very short.
for (auto item : m_SFXSourcesToBuffers)
{
if (item.second->Path() == event.FilePath) {
alSourceStop(item.first);
return true;
}
}
return false;
}
bool dd::Systems::SoundSystem::OnMasterVolume(const dd::Events::MasterVolume &event)
{
//TODO: Make the Gain depend on the value given when stored.
//TODO: .. now it ONLY uses the master Gain
if (event.IsAmbient) {
m_BGMMasterVolume = event.Gain;
for (auto& item : m_BGMSourcesToBuffers)
{
alSourcef(item.first, AL_GAIN, event.Gain);
}
return true;
}
else if (!event.IsAmbient) {
m_SFXMasterVolume = event.Gain;
for (auto& item : m_SFXSourcesToBuffers)
{
alSourcef(item.first, AL_GAIN, event.Gain);
}
return true;
}
return false;
}
bool dd::Systems::SoundSystem::OnContact(const dd::Events::Contact &event)
{
//Check which entity has the collisionSound component.
auto collisionSound = m_World->GetComponent<Components::CollisionSound>(event.Entity1);
if (collisionSound == nullptr) {
collisionSound = m_World->GetComponent<Components::CollisionSound>(event.Entity2);
if (collisionSound == nullptr) {
//None of the entities had a collisionSound component.
return false;
}
}
//Send play-sound event
dd::Events::PlaySound e;
e.FilePath = collisionSound->FilePath;
e.IsAmbient = false;
EventBroker->Publish(e);
return true;
}