Last active
December 11, 2015 09:48
-
-
Save DDuarte/4582139 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff --git a/src/server/collision/BoundingIntervalHierarchyWrapper.h b/src/server/collision/BoundingIntervalHierarchyWrapper.h | |
index 8a99078..315f300 100644 | |
--- a/src/server/collision/BoundingIntervalHierarchyWrapper.h | |
+++ b/src/server/collision/BoundingIntervalHierarchyWrapper.h | |
@@ -33,11 +33,14 @@ class BIHWrap | |
{ | |
const T* const* objects; | |
RayCallback& _callback; | |
+ uint32 objects_size; | |
- MDLCallback(RayCallback& callback, const T* const* objects_array ) : objects(objects_array), _callback(callback) {} | |
+ MDLCallback(RayCallback& callback, const T* const* objects_array, uint32 objects_size ) : objects(objects_array), _callback(callback), objects_size(objects_size) {} | |
bool operator() (const Ray& ray, uint32 Idx, float& MaxDist, bool /*stopAtFirst*/) | |
{ | |
+ if (Idx >= objects_size) | |
+ return false; | |
if (const T* obj = objects[Idx]) | |
return _callback(ray, *obj, MaxDist/*, stopAtFirst*/); | |
return false; | |
@@ -45,6 +48,8 @@ class BIHWrap | |
void operator() (const Vector3& p, uint32 Idx) | |
{ | |
+ if (Idx >= objects_size) | |
+ return false; | |
if (const T* obj = objects[Idx]) | |
_callback(p, *obj); | |
} | |
@@ -87,21 +92,24 @@ public: | |
m_objects.fastClear(); | |
m_obj2Idx.getKeys(m_objects); | |
m_objects_to_push.getMembers(m_objects); | |
+ //assert that m_obj2Idx has all the keys | |
m_tree.build(m_objects, BoundsFunc::getBounds2); | |
} | |
template<typename RayCallback> | |
- void intersectRay(const Ray& ray, RayCallback& intersectCallback, float& maxDist) const | |
+ void intersectRay(const Ray& ray, RayCallback& intersectCallback, float& maxDist) | |
{ | |
- MDLCallback<RayCallback> temp_cb(intersectCallback, m_objects.getCArray()); | |
+ balance(); | |
+ MDLCallback<RayCallback> temp_cb(intersectCallback, m_objects.getCArray(), m_objects.size()); | |
m_tree.intersectRay(ray, temp_cb, maxDist, true); | |
} | |
template<typename IsectCallback> | |
- void intersectPoint(const Vector3& point, IsectCallback& intersectCallback) const | |
+ void intersectPoint(const Vector3& point, IsectCallback& intersectCallback) | |
{ | |
- MDLCallback<IsectCallback> callback(intersectCallback, m_objects.getCArray()); | |
+ balance(); | |
+ MDLCallback<IsectCallback> callback(intersectCallback, m_objects.getCArray(), m_objects.size()); | |
m_tree.intersectPoint(point, callback); | |
} | |
}; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment