From f40ef0f5cc3d451c3789112e760719abb393ac03 Mon Sep 17 00:00:00 2001 From: Daniel Karbach Date: Mon, 9 Nov 2015 17:45:37 +0100 Subject: [PATCH] index chunk access in entity/world intersection test the cache is your friend --- src/world/world.cpp | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/src/world/world.cpp b/src/world/world.cpp index 5e3420d..b07d05a 100644 --- a/src/world/world.cpp +++ b/src/world/world.cpp @@ -524,15 +524,18 @@ bool World::Intersection(const Entity &e, const EntityState &s, std::vector 1) { - // chunk is not one of the 3x3x3 surrounding the entity - // since there's no entity which can extent over 16 blocks, they can be skipped - continue; - } - if (cur_chunk.Intersection(e, M, cur_chunk.Transform(reference), col)) { - any = true; + for (ExactLocation::Coarse pos(begin); pos.z < end.y; ++pos.z) { + for (pos.y = begin.y; pos.y < end.y; ++pos.y) { + for (pos.x = begin.x; pos.x < end.x; ++pos.x) { + Chunk *chunk = chunks.Get(pos); + if (chunk && chunk->Intersection(e, M, chunk->Transform(reference), col)) { + any = true; + } + } } } return any; -- 2.39.2