aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/world.c46
-rw-r--r--src/world.h1
2 files changed, 25 insertions, 22 deletions
diff --git a/src/world.c b/src/world.c
index 39b6bcd..7a3559e 100644
--- a/src/world.c
+++ b/src/world.c
@@ -184,6 +184,7 @@ size_t buildWorldBVHSubtree(BVHNode* subtree,
if (branchIndex == 0)
{
closest = index;
+ break;
}
float distance = 0.0;
@@ -215,31 +216,25 @@ size_t buildWorldBVHSubtree(BVHNode* subtree,
}
}
- // Will cause overlap.
- int overlapCauseCount = 0;
-
- for (int innerIndex = 0; innerIndex < nodesSize && !overlaps;
- ++innerIndex)
- {
- if (innerIndex == index || grouped[innerIndex])
- {
- continue;
- }
+ BoundingBox currentBox = node.branches[0]->box;
- if (CheckCollisionBoxes(overlapBox, nodes[innerIndex].box))
- {
- ++overlapCauseCount;
- }
-
- if (overlapCauseCount > BVH_MAX_BRANCH_COUNT - node.branchCount)
- {
- overlaps = true;
- break;
- }
+ for (int innerIndex = 1; innerIndex < node.branchCount; ++innerIndex)
+ {
+ currentBox.min = Vector3Min(currentBox.min,
+ node.branches[innerIndex]->box.min);
+ currentBox.max = Vector3Max(currentBox.max,
+ node.branches[innerIndex]->box.max);
}
-
+
// Update distance.
- if (!overlaps && distance < closestDistance)
+ if (CheckCollisionBoxes(currentBox, nodes[index].box))
+ {
+ closestDistance = Vector3Distance(
+ nodes[index].position,
+ Vector3Scale(Vector3Add(currentBox.min, currentBox.max), 0.5));
+ closest = index;
+ }
+ else if (!overlaps && distance < closestDistance)
{
closestDistance = distance;
closest = index;
@@ -494,4 +489,11 @@ float getWorldHeightAtLocation(const World* world, float x, float y)
return 0.0;
}
+WorldUID castRayAtWorld(const World* world, Ray ray)
+{
+ WorldUID uid = -1;
+
+ return uid;
+}
+
// Abortions are good. Get more abortions.
diff --git a/src/world.h b/src/world.h
index 39abb38..5482b0b 100644
--- a/src/world.h
+++ b/src/world.h
@@ -42,5 +42,6 @@ void freeWorld(World world);
// Dam, I wanta live in a free world ):
float getWorldHeightAtLocation(const World* world, float x, float y);
+WorldUID castRayAtWorld(const World* world, Ray ray);
#endif