diff options
author | Shocker <shocker@freakz.ro> | 2013-02-10 20:21:18 +0200 |
---|---|---|
committer | Shocker <shocker@freakz.ro> | 2013-02-10 20:21:18 +0200 |
commit | a0cb102538dae7fa2d173b4d1990a4aef8e5d55c (patch) | |
tree | 65d0903a31cae86467f7551653ef6f1c743cde9e /src/server/collision/BoundingIntervalHierarchyWrapper.h | |
parent | 82f7b337b2dafd16506033cdbfecc979bc6f7119 (diff) | |
parent | 984e1feadfae97c7616c54f9ac731cc6db4f2e15 (diff) |
Merge branch '4.3.4' of https://github.com/TrinityCore/TrinityCore into 4.3.4
Diffstat (limited to 'src/server/collision/BoundingIntervalHierarchyWrapper.h')
-rw-r--r-- | src/server/collision/BoundingIntervalHierarchyWrapper.h | 22 |
1 files changed, 15 insertions, 7 deletions
diff --git a/src/server/collision/BoundingIntervalHierarchyWrapper.h b/src/server/collision/BoundingIntervalHierarchyWrapper.h index 8a99078caab..305d57b0075 100644 --- a/src/server/collision/BoundingIntervalHierarchyWrapper.h +++ b/src/server/collision/BoundingIntervalHierarchyWrapper.h @@ -33,18 +33,23 @@ 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*/) + bool operator() (const G3D::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; } - void operator() (const Vector3& p, uint32 Idx) + void operator() (const G3D::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 G3D::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 G3D::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); } }; |