]> git.localhorst.tv Git - blank.git/blobdiff - src/world/world.cpp
initialize entity fields
[blank.git] / src / world / world.cpp
index bf68a9eca412f295c977e486c465e0794025366a..b9d9db79711e7b0318b1f622ce080c3301ee8080 100644 (file)
@@ -46,6 +46,9 @@ Entity::Entity() noexcept
 , bounds()
 , radius(0.0f)
 , state()
+, model_transform(1.0f)
+, view_transform(1.0f)
+, speed(0.0f)
 , heading(0.0f, 0.0f, -1.0f)
 , max_vel(5.0f)
 , max_force(25.0f)
@@ -133,7 +136,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 +794,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)) {