From 1898a95f8983a66c47cc9be90fbe9bafe0d9f288 Mon Sep 17 00:00:00 2001 From: John Charlton Date: Fri, 23 Nov 2018 17:31:29 +0000 Subject: [PATCH] Inactive agents not included in collision computation --- steerlib/include/interfaces/ObstacleInterface.h | 2 ++ steerlib/include/interfaces/SpatialDatabaseItem.h | 3 +++ steerlib/include/testcaseio/TestCaseIOPrivate.h | 5 +++++ steerlib/src/AgentMetricsCollector.cpp | 5 ++++- 4 files changed, 14 insertions(+), 1 deletion(-) diff --git a/steerlib/include/interfaces/ObstacleInterface.h b/steerlib/include/interfaces/ObstacleInterface.h index 0302747..2c13a46 100644 --- a/steerlib/include/interfaces/ObstacleInterface.h +++ b/steerlib/include/interfaces/ObstacleInterface.h @@ -40,6 +40,8 @@ namespace SteerLib { virtual float computePenetration(const Util::Point & p, float radius) = 0; virtual std::pair,std::vector > getStaticGeometry() = 0; virtual std::vector get2DStaticGeometry() = 0; + //always active + bool enabled() const { return true; } public: ObstacleInterface *nextObstacle_; diff --git a/steerlib/include/interfaces/SpatialDatabaseItem.h b/steerlib/include/interfaces/SpatialDatabaseItem.h index f20af6a..b24c7c9 100644 --- a/steerlib/include/interfaces/SpatialDatabaseItem.h +++ b/steerlib/include/interfaces/SpatialDatabaseItem.h @@ -49,6 +49,9 @@ namespace SteerLib { // virtual bool overlaps(const SteerLib::SpatialDatabaseItemPtr item) = 0; /// Returns the amount of penetration that a circle has if it overlaps, or 0.0 if there is no overlap. virtual float computePenetration(const Util::Point & p, float radius) = 0; + + ///Returns false if item should not be included in spatial database calculation + virtual bool enabled() const = 0; }; typedef SpatialDatabaseItem* SpatialDatabaseItemPtr; diff --git a/steerlib/include/testcaseio/TestCaseIOPrivate.h b/steerlib/include/testcaseio/TestCaseIOPrivate.h index a1fb1d3..e2292c8 100644 --- a/steerlib/include/testcaseio/TestCaseIOPrivate.h +++ b/steerlib/include/testcaseio/TestCaseIOPrivate.h @@ -77,12 +77,17 @@ namespace SteerLib { virtual bool intersects(const Util::Ray &r, float &t) { return Util::rayIntersectsCircle2D(position, radius, r, t); } virtual bool overlaps(const Util::Point & p, float r) { return Util::circleOverlapsCircle2D(position, radius, p, r); } virtual float computePenetration(const Util::Point & p, float r) { return Util::computeCircleCirclePenetration2D(position, radius, p, r); } + //always active + bool enabled() const { return true; } //@} }; /// Temporary obstacle information used by the TestCaseReader internally during parsing and initialization. class STEERLIB_API RawObstacleInfo : public SpatialDatabaseItem { public: + //always active + bool enabled() const { return true; } + bool isObstacleRandom; Util::AxisAlignedBox obstacleBounds; diff --git a/steerlib/src/AgentMetricsCollector.cpp b/steerlib/src/AgentMetricsCollector.cpp index fa10990..c5eb69d 100644 --- a/steerlib/src/AgentMetricsCollector.cpp +++ b/steerlib/src/AgentMetricsCollector.cpp @@ -226,7 +226,10 @@ void AgentMetricsCollector::_updateCollisionStats(SpatialDataBaseInterface * gri for (neighbor = neighbors.begin(); neighbor != neighbors.end(); ++neighbor) { - + //dont include those items who are not active + if (!(*neighbor)->enabled()) + continue; + // this way, collisionKey will be unique across all objects in the spatial database. // MUBBASIR -- THIS CAUSES A COMPILE PROBLEM ON HAMMERHEAD