Commit bc2ff507 authored by Libor Moravčík's avatar Libor Moravčík
Browse files

Colliders cache and Colliders Dirty Cache are now erased upon world unregister...

Colliders cache and Colliders Dirty Cache are now erased upon world unregister and created on world register in BroadDetector. Fixed order of base method call in 'reigster_world' overrides
parent 6a698149
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -612,8 +612,8 @@ bool AABBTree::raycast(com::Folder *world, geometry::Ray const & ray, RayCastRes

void AABBTree::register_world(com::Folder *world)
{
	BroadDetector::register_world(world);
	m_data.insert({world, {nullptr, {}, {}, nullptr, {}}});
	BroadDetector::register_world(world);
}

void AABBTree::unregister_world(com::Folder *world)
+4 −20
Original line number Diff line number Diff line
@@ -40,33 +40,17 @@ void BroadDetector::register_world(com::Folder *world)
	auto collider_removed = [this, world](utils::IStorage *cache, Collider *collider) { this->remove_collider(world, collider); };

	utils::FileCache<Collider> *colliders_cache = nullptr;
	if (world->contains("colliders.cache"))
	{
		colliders_cache = dynamic_cast<utils::FileCache<Collider> *>(world->find("colliders.cache"));
	}
	else
	{
		colliders_cache = phx::cache_system()->insert_file_cache<Collider>("colliders.cache", world, world, false, collider_accept, collider_stored, collider_removed, nullptr);
	}

	utils::FileCache<Collider> *colliders_dirty_cache = nullptr;
	if (world->contains("colliders_dirty.cache"))
	{
		colliders_dirty_cache = dynamic_cast<utils::FileCache<Collider> *>(world->find("colliders_dirty.cache"));
	}
	else
	{
	colliders_cache = phx::cache_system()->insert_file_cache<Collider>("colliders.cache", world, world, false, collider_accept, collider_stored, collider_removed, nullptr);
	colliders_dirty_cache = phx::cache_system()->insert_file_cache<Collider>("colliders_dirty.cache", world, world, false, collider_accept_dirty, nullptr, nullptr, nullptr);
	}

	m_world_colliders.insert({world, {colliders_cache, colliders_dirty_cache}});
}

void BroadDetector::unregister_world(com::Folder *world)
{
	ASSUMPTION(m_world_colliders.contains(world) == true);
	cache_colliders(world)->clear();
	cache_colliders_dirty(world)->clear();
	phx::cache_system()->erase_cache(world, "colliders.cache");
	phx::cache_system()->erase_cache(world, "colliders_dirty.cache");
	m_world_colliders.erase(world);
}

+1 −1
Original line number Diff line number Diff line
@@ -384,8 +384,8 @@ bool SweepAndPrune::raycast(com::Folder *world, geometry::Ray const &ray, RayCas

void SweepAndPrune::register_world(com::Folder *world)
{
	BroadDetector::register_world(world);
	m_data.insert({world, {{nullptr, nullptr, nullptr}, {}, {}, {}}});
	BroadDetector::register_world(world);
}

void SweepAndPrune::unregister_world(com::Folder *world)