ClosestNotUsRayResultCallback.h:
Code: Select all
#ifndef CLOSESTNOTUSRAYRESULTCALLBACK_H
#define CLOSESTNOTUSRAYRESULTCALLBACK_H
#include <btBulletCollisionCommon.h>
class ClosestNotUsRayResultCallback : public btCollisionWorld::ClosestRayResultCallback
{
public:
ClosestNotUsRayResultCallback(const btVector3 &rayFromWorld, const btVector3 &rayToWorld, const btCollisionObjectArray &exclude);
btScalar addSingleResult(btCollisionWorld::LocalRayResult &rayResult, bool normalInWorldSpace);
private:
const btCollisionObjectArray *p_exclude;
};
#endif
Code: Select all
#include "ClosestNotUsRayResultCallback.h"
ClosestNotUsRayResultCallback::ClosestNotUsRayResultCallback(const btVector3 &rayFromWorld, const btVector3 &rayToWorld, const btCollisionObjectArray &exclude) : btCollisionWorld::ClosestRayResultCallback(rayFromWorld, rayToWorld), p_exclude(&exclude)
{}
btScalar ClosestNotUsRayResultCallback::addSingleResult(btCollisionWorld::LocalRayResult &rayResult, bool normalInWorldSpace)
{
int found = 0;
if (p_exclude->size() > 0)
found = p_exclude->findBinarySearch(rayResult.m_collisionObject);
if (found == p_exclude->size())
return btCollisionWorld::ClosestRayResultCallback::addSingleResult(rayResult, normalInWorldSpace);
else
return 1.0f;
}