]> git.seodisparate.com - jumpartifact.com_demo_0/commitdiff
Minor fixes to 3d_helpers.cc
authorStephen Seo <seo.disparate@gmail.com>
Fri, 18 Aug 2023 04:27:49 +0000 (13:27 +0900)
committerStephen Seo <seo.disparate@gmail.com>
Fri, 18 Aug 2023 04:27:49 +0000 (13:27 +0900)
src/3d_helpers.cc

index 9f413da12bafbb0d2d1e9aa80a2399b2065dfeb4..0f98c11938264f38d668979a7eacdf34097349a6 100644 (file)
@@ -127,7 +127,7 @@ Matrix operator*(const Matrix &a, const Matrix &b) {
 }
 
 bool ray_to_xz_plane(const Ray &ray, float &x_out, float &z_out) {
-  if (ray.direction.y == 0.0F) {
+  if (FloatEquals(ray.direction.y, 0.0F)) {
     return false;
   }
   // y = 0 -> amount to set ray.dir to set ray.pos to zero
@@ -147,7 +147,7 @@ bool ray_to_xz_plane(const Ray &ray, float &x_out, float &z_out) {
 std::optional<Vector3> ray_to_plane(const Ray &ray, const Ray &plane) {
   // Ray dir and plane normal.
   float rd_pn = Vector3DotProduct(ray.direction, plane.direction);
-  if (rd_pn == 0.0F) {
+  if (FloatEquals(rd_pn, 0.0F)) {
     return std::nullopt;
   }
 
@@ -155,6 +155,11 @@ std::optional<Vector3> ray_to_plane(const Ray &ray, const Ray &plane) {
                   Vector3DotProduct(ray.position, plane.direction)) /
                  rd_pn;
 
+  // Negative amount means collision in opposite direction of ray.
+  if (amount < 0.0F) {
+    return std::nullopt;
+  }
+
   // Amount * ray_dir + ray_pos == plane intersection.
   return Vector3{ray.position.x + ray.direction.x * amount,
                  ray.position.y + ray.direction.y * amount,