diff --git a/include/Nazara/Core/Resource.hpp b/include/Nazara/Core/Resource.hpp index 5a96c3324..adf0eace2 100644 --- a/include/Nazara/Core/Resource.hpp +++ b/include/Nazara/Core/Resource.hpp @@ -40,9 +40,10 @@ class NAZARA_API NzResource protected: void NotifyCreated(); void NotifyDestroy(); + void NotifyModified(unsigned int code); private: - typedef std::unordered_map> ResourceListenerMap; + using ResourceListenerMap = std::unordered_map>; void RemoveResourceListenerIterator(ResourceListenerMap::iterator iterator) const; diff --git a/include/Nazara/Core/ResourceListener.hpp b/include/Nazara/Core/ResourceListener.hpp index 822758b2f..821d17758 100644 --- a/include/Nazara/Core/ResourceListener.hpp +++ b/include/Nazara/Core/ResourceListener.hpp @@ -19,6 +19,7 @@ class NAZARA_API NzResourceListener virtual bool OnResourceCreated(const NzResource* resource, int index); virtual bool OnResourceDestroy(const NzResource* resource, int index); + virtual bool OnResourceModified(const NzResource* resource, int index, unsigned int code); virtual void OnResourceReleased(const NzResource* resource, int index); }; diff --git a/src/Nazara/Core/Resource.cpp b/src/Nazara/Core/Resource.cpp index 312a93de2..461cda9b2 100644 --- a/src/Nazara/Core/Resource.cpp +++ b/src/Nazara/Core/Resource.cpp @@ -148,6 +148,24 @@ void NzResource::NotifyDestroy() m_resourceListenersLocked = false; } +void NzResource::NotifyModified(unsigned int code) +{ + NazaraLock(m_mutex) + + m_resourceListenersLocked = true; + + auto it = m_resourceListeners.begin(); + while (it != m_resourceListeners.end()) + { + if (!it->first->OnResourceModified(this, it->second.first, code)) + RemoveResourceListenerIterator(it++); + else + ++it; + } + + m_resourceListenersLocked = false; +} + void NzResource::RemoveResourceListenerIterator(ResourceListenerMap::iterator iterator) const { unsigned int& referenceCount = iterator->second.second; diff --git a/src/Nazara/Core/ResourceListener.cpp b/src/Nazara/Core/ResourceListener.cpp index a7c8a19ab..6e8019a84 100644 --- a/src/Nazara/Core/ResourceListener.cpp +++ b/src/Nazara/Core/ResourceListener.cpp @@ -23,6 +23,15 @@ bool NzResourceListener::OnResourceDestroy(const NzResource* resource, int index return true; } +bool NzResourceListener::OnResourceModified(const NzResource* resource, int index, unsigned int code) +{ + NazaraUnused(resource); + NazaraUnused(index); + NazaraUnused(code); + + return true; +} + void NzResourceListener::OnResourceReleased(const NzResource* resource, int index) { NazaraUnused(resource);