From: Daniel Karbach Date: Mon, 9 Nov 2015 16:45:37 +0000 (+0100) Subject: index chunk access in entity/world intersection test X-Git-Url: https://git.localhorst.tv/?a=commitdiff_plain;h=f40ef0f5cc3d451c3789112e760719abb393ac03;p=blank.git index chunk access in entity/world intersection test the cache is your friend --- 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;