X-Git-Url: http://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fworld%2Fworld.cpp;h=0daadfc430afe9e56e6be35a2aba9876d4dcd03d;hb=7c9675c5678f94bfbdf96e55f2865c53bd42fe7e;hp=243fb8a81b439655193b21615a84eddc7b70c389;hpb=5a5b12ae26b832dd8493be2d30f97d14aee2268c;p=blank.git diff --git a/src/world/world.cpp b/src/world/world.cpp index 243fb8a..0daadfc 100644 --- a/src/world/world.cpp +++ b/src/world/world.cpp @@ -133,7 +133,9 @@ glm::mat4 Entity::ViewTransform(const glm::ivec3 &reference) const noexcept { Ray Entity::Aim(const ExactLocation::Coarse &chunk_offset) const noexcept { glm::mat4 transform = ViewTransform(chunk_offset); - return Ray{ glm::vec3(transform[3]), -glm::vec3(transform[2]) }; + Ray ray{ glm::vec3(transform[3]), -glm::vec3(transform[2]) }; + ray.Update(); + return ray; } void Entity::Update(World &world, float dt) { @@ -789,8 +791,11 @@ bool World::Intersection( candidates.clear(); - // TODO: convert to coords based iteration and trim based - // on ray direction + // TODO: change this so the test starts at the chunk of the ray's + // origin and "walks" forward until it hits (actually casting + // the ray, so to say). if this performs well (at least, better + // than now), this could also qualify for the chunk test itself + // see Bresenham's line algo or something similar for (Chunk *cur_chunk : *index) { float cur_dist; if (cur_chunk && cur_chunk->Intersection(ray, reference, cur_dist)) { @@ -1072,7 +1077,7 @@ void World::RenderDebug(Viewport &viewport) { PrimitiveMesh debug_mesh; PlainColor &prog = viewport.WorldColorProgram(); for (const Entity &entity : entities) { - debug_buf.OutlineBox(entity.Bounds(), glm::vec4(1.0f, 0.0f, 0.0f, 1.0f)); + debug_buf.OutlineBox(entity.Bounds(), glm::tvec4(255, 0, 0, 255)); debug_mesh.Update(debug_buf); prog.SetM(entity.Transform(players.front().GetEntity().ChunkCoords())); debug_mesh.DrawLines();