public static ProximityDetector makeSphere(SpatialVectorDouble center, double radius, bool handleParticles = false) { ProximityDetector detector = new ProximityDetector(EnumShapeType.SPHERE, center, new SpatialVectorDouble(new double[] { radius })); detector.cachedKDop = KDopUtilities.makeAabbKDopByCenterAndRadius(center, radius); detector.handleParticles = handleParticles; return(detector); }
public void addProximityDetector(ProximityDetector detector) { // make sure the bounding volumes are up to date // PERFORMANCE< we recalc the bounding volumes for bounding volume "dirty" objects to save some cycles > transformOnlyDirtyObjects(); recalcBoundingVolumesForDirtyObjects(); // do this to add all objects and particles which overlap IEnumerable <ProximityDetector> listOfOneProximityDetector = new ProximityDetector[] { detector }; ProximityHelper.checkProximityDetectorsAndFireEventsForParticles(listOfOneProximityDetector, particles); ProximityHelper.checkProximityDetectorsAndFireEventsForObjects(listOfOneProximityDetector, physicsAndMeshPairs.Select(v => v.physicsComponent)); privateProximityDetectors.Add(detector); }
static bool checkParticleOverlap(ProximityDetector detector, PhysicsComponent particle) { return(detector.cachedKDop.checkIntersectPosition(particle.position)); }
static bool checkObjectOverlap(ProximityDetector detector, PhysicsComponent object_) { return(!KDop.checkIntersectAabb(object_.boundingVolume.kdop, detector.cachedKDop)); }
static bool checkParticleExitingExitOfObject(ProximityDetector detector, PhysicsComponent particle) { return(!detector.cachedKDop.checkIntersectPosition(particle.position)); }
public void removeProximityDetector(ProximityDetector detector) { // TODO< fire EXIT event for all contained objects and particles > privateProximityDetectors.Remove(detector); }