@@ -30,14 +30,38 @@ OvAudio::Core::AudioEngine::AudioEngine()
3030 using AudioSourceReceiver = void (AudioEngine::*)(OvAudio::Entities::AudioSource&);
3131 using AudioListenerReceiver = void (AudioEngine::*)(OvAudio::Entities::AudioListener&);
3232
33- Entities::AudioSource::CreatedEvent += std::bind (static_cast <AudioSourceReceiver>(&AudioEngine::Consider), this , std::placeholders::_1);
34- Entities::AudioSource::DestroyedEvent += std::bind (static_cast <AudioSourceReceiver>(&AudioEngine::Unconsider), this , std::placeholders::_1);
35- Entities::AudioListener::CreatedEvent += std::bind (static_cast <AudioListenerReceiver>(&AudioEngine::Consider), this , std::placeholders::_1);
36- Entities::AudioListener::DestroyedEvent += std::bind (static_cast <AudioListenerReceiver>(&AudioEngine::Unconsider), this , std::placeholders::_1);
33+ m_audioSourceCreatedListenerID = Entities::AudioSource::CreatedEvent +=
34+ std::bind (static_cast <AudioSourceReceiver>(&AudioEngine::Consider), this , std::placeholders::_1);
35+ m_audioSourceDestroyedListenerID = Entities::AudioSource::DestroyedEvent +=
36+ std::bind (static_cast <AudioSourceReceiver>(&AudioEngine::Unconsider), this , std::placeholders::_1);
37+ m_audioListenerCreatedListenerID = Entities::AudioListener::CreatedEvent +=
38+ std::bind (static_cast <AudioListenerReceiver>(&AudioEngine::Consider), this , std::placeholders::_1);
39+ m_audioListenerDestroyedListenerID = Entities::AudioListener::DestroyedEvent +=
40+ std::bind (static_cast <AudioListenerReceiver>(&AudioEngine::Unconsider), this , std::placeholders::_1);
3741}
3842
3943OvAudio::Core::AudioEngine::~AudioEngine ()
4044{
45+ if (m_audioSourceCreatedListenerID.has_value ())
46+ {
47+ Entities::AudioSource::CreatedEvent.RemoveListener (m_audioSourceCreatedListenerID.value ());
48+ }
49+
50+ if (m_audioSourceDestroyedListenerID.has_value ())
51+ {
52+ Entities::AudioSource::DestroyedEvent.RemoveListener (m_audioSourceDestroyedListenerID.value ());
53+ }
54+
55+ if (m_audioListenerCreatedListenerID.has_value ())
56+ {
57+ Entities::AudioListener::CreatedEvent.RemoveListener (m_audioListenerCreatedListenerID.value ());
58+ }
59+
60+ if (m_audioListenerDestroyedListenerID.has_value ())
61+ {
62+ Entities::AudioListener::DestroyedEvent.RemoveListener (m_audioListenerDestroyedListenerID.value ());
63+ }
64+
4165 if (IsValid ())
4266 {
4367 m_backend->deinit ();
0 commit comments