|
@@ -87,6 +87,7 @@ void NarrowPhaseQuery::CastRay(const RRayCast &inRay, const RayCastSettings &inR
|
|
{
|
|
{
|
|
public:
|
|
public:
|
|
MyCollector(const RRayCast &inRay, const RayCastSettings &inRayCastSettings, CastRayCollector &ioCollector, const BodyLockInterface &inBodyLockInterface, const BodyFilter &inBodyFilter, const ShapeFilter &inShapeFilter) :
|
|
MyCollector(const RRayCast &inRay, const RayCastSettings &inRayCastSettings, CastRayCollector &ioCollector, const BodyLockInterface &inBodyLockInterface, const BodyFilter &inBodyFilter, const ShapeFilter &inShapeFilter) :
|
|
|
|
+ RayCastBodyCollector(ioCollector),
|
|
mRay(inRay),
|
|
mRay(inRay),
|
|
mRayCastSettings(inRayCastSettings),
|
|
mRayCastSettings(inRayCastSettings),
|
|
mCollector(ioCollector),
|
|
mCollector(ioCollector),
|
|
@@ -94,7 +95,6 @@ void NarrowPhaseQuery::CastRay(const RRayCast &inRay, const RayCastSettings &inR
|
|
mBodyFilter(inBodyFilter),
|
|
mBodyFilter(inBodyFilter),
|
|
mShapeFilter(inShapeFilter)
|
|
mShapeFilter(inShapeFilter)
|
|
{
|
|
{
|
|
- UpdateEarlyOutFraction(ioCollector.GetEarlyOutFraction());
|
|
|
|
}
|
|
}
|
|
|
|
|
|
virtual void AddHit(const ResultType &inResult) override
|
|
virtual void AddHit(const ResultType &inResult) override
|
|
@@ -153,6 +153,7 @@ void NarrowPhaseQuery::CollidePoint(RVec3Arg inPoint, CollidePointCollector &ioC
|
|
{
|
|
{
|
|
public:
|
|
public:
|
|
MyCollector(RVec3Arg inPoint, CollidePointCollector &ioCollector, const BodyLockInterface &inBodyLockInterface, const BodyFilter &inBodyFilter, const ShapeFilter &inShapeFilter) :
|
|
MyCollector(RVec3Arg inPoint, CollidePointCollector &ioCollector, const BodyLockInterface &inBodyLockInterface, const BodyFilter &inBodyFilter, const ShapeFilter &inShapeFilter) :
|
|
|
|
+ CollideShapeBodyCollector(ioCollector),
|
|
mPoint(inPoint),
|
|
mPoint(inPoint),
|
|
mCollector(ioCollector),
|
|
mCollector(ioCollector),
|
|
mBodyLockInterface(inBodyLockInterface),
|
|
mBodyLockInterface(inBodyLockInterface),
|
|
@@ -214,6 +215,7 @@ void NarrowPhaseQuery::CollideShape(const Shape *inShape, Vec3Arg inShapeScale,
|
|
{
|
|
{
|
|
public:
|
|
public:
|
|
MyCollector(const Shape *inShape, Vec3Arg inShapeScale, RMat44Arg inCenterOfMassTransform, const CollideShapeSettings &inCollideShapeSettings, RVec3Arg inBaseOffset, CollideShapeCollector &ioCollector, const BodyLockInterface &inBodyLockInterface, const BodyFilter &inBodyFilter, const ShapeFilter &inShapeFilter) :
|
|
MyCollector(const Shape *inShape, Vec3Arg inShapeScale, RMat44Arg inCenterOfMassTransform, const CollideShapeSettings &inCollideShapeSettings, RVec3Arg inBaseOffset, CollideShapeCollector &ioCollector, const BodyLockInterface &inBodyLockInterface, const BodyFilter &inBodyFilter, const ShapeFilter &inShapeFilter) :
|
|
|
|
+ CollideShapeBodyCollector(ioCollector),
|
|
mShape(inShape),
|
|
mShape(inShape),
|
|
mShapeScale(inShapeScale),
|
|
mShapeScale(inShapeScale),
|
|
mCenterOfMassTransform(inCenterOfMassTransform),
|
|
mCenterOfMassTransform(inCenterOfMassTransform),
|
|
@@ -285,19 +287,9 @@ void NarrowPhaseQuery::CastShape(const RShapeCast &inShapeCast, const ShapeCastS
|
|
|
|
|
|
class MyCollector : public CastShapeBodyCollector
|
|
class MyCollector : public CastShapeBodyCollector
|
|
{
|
|
{
|
|
- private:
|
|
|
|
- /// Update early out fraction based on narrow phase collector
|
|
|
|
- inline void PropagateEarlyOutFraction()
|
|
|
|
- {
|
|
|
|
- // The CastShapeCollector uses negative values for penetration depth so we want to clamp to the smallest positive number to keep receiving deeper hits
|
|
|
|
- if (mCollector.ShouldEarlyOut())
|
|
|
|
- ForceEarlyOut();
|
|
|
|
- else
|
|
|
|
- UpdateEarlyOutFraction(max(FLT_MIN, mCollector.GetEarlyOutFraction()));
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
public:
|
|
public:
|
|
MyCollector(const RShapeCast &inShapeCast, const ShapeCastSettings &inShapeCastSettings, RVec3Arg inBaseOffset, CastShapeCollector &ioCollector, const BodyLockInterface &inBodyLockInterface, const BodyFilter &inBodyFilter, const ShapeFilter &inShapeFilter) :
|
|
MyCollector(const RShapeCast &inShapeCast, const ShapeCastSettings &inShapeCastSettings, RVec3Arg inBaseOffset, CastShapeCollector &ioCollector, const BodyLockInterface &inBodyLockInterface, const BodyFilter &inBodyFilter, const ShapeFilter &inShapeFilter) :
|
|
|
|
+ CastShapeBodyCollector(ioCollector),
|
|
mShapeCast(inShapeCast),
|
|
mShapeCast(inShapeCast),
|
|
mShapeCastSettings(inShapeCastSettings),
|
|
mShapeCastSettings(inShapeCastSettings),
|
|
mBaseOffset(inBaseOffset),
|
|
mBaseOffset(inBaseOffset),
|
|
@@ -306,7 +298,6 @@ void NarrowPhaseQuery::CastShape(const RShapeCast &inShapeCast, const ShapeCastS
|
|
mBodyFilter(inBodyFilter),
|
|
mBodyFilter(inBodyFilter),
|
|
mShapeFilter(inShapeFilter)
|
|
mShapeFilter(inShapeFilter)
|
|
{
|
|
{
|
|
- PropagateEarlyOutFraction();
|
|
|
|
}
|
|
}
|
|
|
|
|
|
virtual void AddHit(const ResultType &inResult) override
|
|
virtual void AddHit(const ResultType &inResult) override
|
|
@@ -338,7 +329,7 @@ void NarrowPhaseQuery::CastShape(const RShapeCast &inShapeCast, const ShapeCastS
|
|
ts.CastShape(mShapeCast, mShapeCastSettings, mBaseOffset, mCollector, mShapeFilter);
|
|
ts.CastShape(mShapeCast, mShapeCastSettings, mBaseOffset, mCollector, mShapeFilter);
|
|
|
|
|
|
// Update early out fraction based on narrow phase collector
|
|
// Update early out fraction based on narrow phase collector
|
|
- PropagateEarlyOutFraction();
|
|
|
|
|
|
+ UpdateEarlyOutFraction(mCollector.GetEarlyOutFraction());
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -364,6 +355,7 @@ void NarrowPhaseQuery::CollectTransformedShapes(const AABox &inBox, TransformedS
|
|
{
|
|
{
|
|
public:
|
|
public:
|
|
MyCollector(const AABox &inBox, TransformedShapeCollector &ioCollector, const BodyLockInterface &inBodyLockInterface, const BodyFilter &inBodyFilter, const ShapeFilter &inShapeFilter) :
|
|
MyCollector(const AABox &inBox, TransformedShapeCollector &ioCollector, const BodyLockInterface &inBodyLockInterface, const BodyFilter &inBodyFilter, const ShapeFilter &inShapeFilter) :
|
|
|
|
+ CollideShapeBodyCollector(ioCollector),
|
|
mBox(inBox),
|
|
mBox(inBox),
|
|
mCollector(ioCollector),
|
|
mCollector(ioCollector),
|
|
mBodyLockInterface(inBodyLockInterface),
|
|
mBodyLockInterface(inBodyLockInterface),
|