diff --git a/engine/includes/resources/resource.h b/engine/includes/resources/resource.h index 416c9e67a..8361fc328 100644 --- a/engine/includes/resources/resource.h +++ b/engine/includes/resources/resource.h @@ -28,7 +28,6 @@ class ENGINE_EXPORT Resource : public Object { public: Resource(); Resource(const Resource &origin); - ~Resource() override; State state() const; diff --git a/engine/includes/systems/resourcesystem.h b/engine/includes/systems/resourcesystem.h index 68bd6706f..41ebf98f7 100644 --- a/engine/includes/systems/resourcesystem.h +++ b/engine/includes/systems/resourcesystem.h @@ -54,6 +54,8 @@ class ENGINE_EXPORT ResourceSystem : public System { void processState(Resource *resource); + void removeObject(Object *object) override; + private: ResourceSystem::Dictionary m_indexMap; diff --git a/engine/src/engine.cpp b/engine/src/engine.cpp index 6024bf992..b57dd6032 100644 --- a/engine/src/engine.cpp +++ b/engine/src/engine.cpp @@ -181,6 +181,15 @@ Engine::Engine(const char *path) { Engine::~Engine() { PROFILE_FUNCTION(); + for(auto it : m_serial) { + delete it; + } + + for(auto it : m_pool) { + delete it->m_system; + delete it; + } + delete m_threadPool; if(m_platform) { diff --git a/engine/src/resources/resource.cpp b/engine/src/resources/resource.cpp index 5bff5648d..4ada51947 100644 --- a/engine/src/resources/resource.cpp +++ b/engine/src/resources/resource.cpp @@ -48,12 +48,6 @@ Resource::Resource(const Resource &origin) : m_referenceCount(origin.m_referenceCount) { } - -Resource::~Resource() { - //assert(m_referenceCount == 0); - - Engine::resourceSystem()->deleteFromCahe(this); -} /*! Subscribes \a callback for \a object to handle resource status. Increases reference count. diff --git a/engine/src/systems/resourcesystem.cpp b/engine/src/systems/resourcesystem.cpp index e25d7db50..4160c1f90 100644 --- a/engine/src/systems/resourcesystem.cpp +++ b/engine/src/systems/resourcesystem.cpp @@ -281,6 +281,12 @@ void ResourceSystem::processState(Resource *resource) { } } +void ResourceSystem::removeObject(Object *object) { + ObjectSystem::removeObject(object); + + deleteFromCahe(static_cast(object)); +} + Resource *ResourceSystem::resource(TString &path) const { { auto it = m_indexMap.find(path);