public BoxBoxCollisionAlgorithm(PersistentManifold mf,CollisionAlgorithmConstructionInfo ci,CollisionObject body0,CollisionObject body1) : base(ci) { if (m_manifoldPtr == null && m_dispatcher.NeedsCollision(body0,body1)) { m_manifoldPtr = m_dispatcher.GetNewManifold(body0,body1); m_ownManifold = true; } }
public Convex2dConvex2dAlgorithm(PersistentManifold mf,CollisionAlgorithmConstructionInfo ci,CollisionObject body0,CollisionObject body1, ISimplexSolverInterface simplexSolver, IConvexPenetrationDepthSolver pdSolver, int numPerturbationIterations, int minimumPointsPerturbationThreshold) : base(ci,body0,body1) { m_simplexSolver = simplexSolver; m_pdSolver = pdSolver; m_ownManifold = false; m_manifoldPtr = mf; m_lowLevelOfDetail = false; m_numPerturbationIterations = numPerturbationIterations; m_minimumPointsPerturbationThreshold = minimumPointsPerturbationThreshold; }
public virtual void ProcessTriangle(ObjectArray<Vector3> triangle, int partId, int triangleIndex) { //aabb filter is already applied! CollisionAlgorithmConstructionInfo ci = new CollisionAlgorithmConstructionInfo(); ci.SetDispatcher(m_dispatcher); CollisionObject ob = (CollisionObject)m_triBody; ///debug drawing of the overlapping triangles /// if (m_dispatchInfoPtr != null && m_dispatchInfoPtr.getDebugDraw() != null&& ((m_dispatchInfoPtr.getDebugDraw().GetDebugMode() & DebugDrawModes.DBG_DrawWireframe) > 0)) { Vector3 color = new Vector3(1,1,0); Matrix tr = ob.GetWorldTransform(); Vector3[] transformedTriangles = new Vector3[3]; for(int i=0;i<transformedTriangles.Length;++i) { transformedTriangles[i] = Vector3.Transform(triangle[i],tr); } m_dispatchInfoPtr.getDebugDraw().DrawLine(ref transformedTriangles[0], ref transformedTriangles[1], ref color); m_dispatchInfoPtr.getDebugDraw().DrawLine(ref transformedTriangles[1], ref transformedTriangles[2], ref color); m_dispatchInfoPtr.getDebugDraw().DrawLine(ref transformedTriangles[2], ref transformedTriangles[0], ref color); } if (m_convexBody.GetCollisionShape().IsConvex()) { TriangleShape tm = new TriangleShape(triangle[0],triangle[1],triangle[2]); tm.Margin = m_collisionMarginTriangle; CollisionShape tmpShape = ob.GetCollisionShape(); ob.InternalSetTemporaryCollisionShape(tm); CollisionAlgorithm colAlgo = ci.GetDispatcher().FindAlgorithm(m_convexBody,m_triBody,m_manifoldPtr); ///this should use the btDispatcher, so the actual registered algorithm is used // btConvexConvexAlgorithm cvxcvxalgo(m_manifoldPtr,ci,m_convexBody,m_triBody); if (m_resultOut.GetBody0Internal() == m_triBody) { m_resultOut.SetShapeIdentifiersA(partId, triangleIndex); } else { m_resultOut.SetShapeIdentifiersB(partId, triangleIndex); } colAlgo.ProcessCollision(m_convexBody,m_triBody,m_dispatchInfoPtr, m_resultOut); colAlgo.Cleanup(); ci.GetDispatcher().FreeCollisionAlgorithm(colAlgo); colAlgo = null; ob.InternalSetTemporaryCollisionShape( tmpShape); } }
public SphereBoxCollisionAlgorithm(PersistentManifold mf,CollisionAlgorithmConstructionInfo ci,CollisionObject col0,CollisionObject col1, bool isSwapped) : base(ci,col0,col1) { CollisionObject sphereObj = m_isSwapped ? col1 : col0; CollisionObject boxObj = m_isSwapped ? col0 : col1; if (m_manifoldPtr == null && m_dispatcher.NeedsCollision(sphereObj, boxObj)) { m_manifoldPtr = m_dispatcher.GetNewManifold(sphereObj, boxObj); m_ownManifold = true; } }
public override CollisionAlgorithm CreateCollisionAlgorithm(CollisionAlgorithmConstructionInfo ci, CollisionObject body0,CollisionObject body1) { if (!m_swapped) { return new ConvexPlaneCollisionAlgorithm(null,ci,body0,body1,false,m_numPerturbationIterations,m_minimumPointsPerturbationThreshold); } else { return new ConvexPlaneCollisionAlgorithm(null,ci,body0,body1,true,m_numPerturbationIterations,m_minimumPointsPerturbationThreshold); } }
public CompoundCollisionAlgorithm(CollisionAlgorithmConstructionInfo ci, CollisionObject body0, CollisionObject body1, bool isSwapped) : base(ci, body0, body1) { m_isSwapped = isSwapped; m_sharedManifold = ci.GetManifold(); m_ownsManifold = false; CollisionObject colObj = m_isSwapped ? body1 : body0; System.Diagnostics.Debug.Assert(colObj.GetCollisionShape().IsCompound()); CompoundShape compoundShape = (CompoundShape)(colObj.GetCollisionShape()); m_compoundShapeRevision = compoundShape.GetUpdateRevision(); PreallocateChildAlgorithms(body0, body1); }
public ConvexConvexAlgorithm(PersistentManifold mf,CollisionAlgorithmConstructionInfo ci,CollisionObject body0,CollisionObject body1, ISimplexSolverInterface simplexSolver, IConvexPenetrationDepthSolver pdSolver, int numPerturbationIterations, int minimumPointsPerturbationThreshold) : base(ci,body0,body1) { m_simplexSolver = simplexSolver; m_pdSolver = pdSolver; m_ownManifold = false; m_manifoldPtr = mf; m_lowLevelOfDetail = false; #if USE_SEPDISTANCE_UTIL2 m_sepDistance ((static_cast<btConvexShape*>(body0.getCollisionShape())).getAngularMotionDisc(), (static_cast<btConvexShape*>(body1.getCollisionShape())).getAngularMotionDisc()), #endif m_numPerturbationIterations = numPerturbationIterations; m_minimumPointsPerturbationThreshold = minimumPointsPerturbationThreshold; }
public ConvexPlaneCollisionAlgorithm(PersistentManifold mf, CollisionAlgorithmConstructionInfo ci, CollisionObject col0,CollisionObject col1,bool isSwapped,int numPerturbationIterations,int minimumPointsPerturbationThreshold) : base(ci) { m_manifoldPtr = mf; m_ownManifold = false; m_isSwapped = isSwapped; m_numPerturbationIterations = numPerturbationIterations; m_minimumPointsPerturbationThreshold = minimumPointsPerturbationThreshold; CollisionObject convexObj = m_isSwapped? col1 : col0; CollisionObject planeObj = m_isSwapped? col0 : col1; if (m_manifoldPtr == null && m_dispatcher.NeedsCollision(convexObj,planeObj)) { m_manifoldPtr = m_dispatcher.GetNewManifold(convexObj,planeObj); m_ownManifold = true; } }
public override CollisionAlgorithm CreateCollisionAlgorithm(CollisionAlgorithmConstructionInfo ci, CollisionObject body0, CollisionObject body1) { return new ConvexConvexAlgorithm(ci.GetManifold(), ci, body0, body1, m_simplexSolver, m_pdSolver, m_numPerturbationIterations, m_minimumPointsPerturbationThreshold); }
public ActivatingCollisionAlgorithm(CollisionAlgorithmConstructionInfo ci, CollisionObject colObj0, CollisionObject colObj1) : base(ci) { }
public ActivatingCollisionAlgorithm(CollisionAlgorithmConstructionInfo ci) : base(ci) { }
public override CollisionAlgorithm CreateCollisionAlgorithm(CollisionAlgorithmConstructionInfo ci, CollisionObject body0,CollisionObject body1) { return new EmptyAlgorithm(ci); }
public Box2dBox2dCollisionAlgorithm(CollisionAlgorithmConstructionInfo ci) : base(ci) { }
public virtual CollisionAlgorithm CreateCollisionAlgorithm(CollisionAlgorithmConstructionInfo caci, CollisionObject body0, CollisionObject body1) { return null; }
public SphereTriangleCollisionAlgorithm(PersistentManifold mf,CollisionAlgorithmConstructionInfo ci,CollisionObject body0,CollisionObject body1,bool swapped) : base(ci,body0,body1) { m_ownManifold = false; m_manifoldPtr = mf; m_swapped = swapped; }
public override CollisionAlgorithm CreateCollisionAlgorithm(CollisionAlgorithmConstructionInfo ci, CollisionObject body0, CollisionObject body1) { return new Box2dBox2dCollisionAlgorithm(null, ci, body0, body1); }
public virtual void Initialize(CollisionAlgorithmConstructionInfo ci, CollisionObject colObj0, CollisionObject colObj1) { base.Initialize(ci); }
public override void Initialize(CollisionAlgorithmConstructionInfo ci) { base.Initialize(ci); }
public override CollisionAlgorithm CreateCollisionAlgorithm(CollisionAlgorithmConstructionInfo ci, CollisionObject body0,CollisionObject body1) { return new SphereTriangleCollisionAlgorithm(ci.GetManifold(),ci,body0,body1,m_swapped); }
public EmptyAlgorithm(CollisionAlgorithmConstructionInfo ci) { }
public override CollisionAlgorithm CreateCollisionAlgorithm(CollisionAlgorithmConstructionInfo ci, CollisionObject body0, CollisionObject body1) { return new ConvexConcaveCollisionAlgorithm(ci, body0, body1, true); }
public ConvexConcaveCollisionAlgorithm(CollisionAlgorithmConstructionInfo ci,CollisionObject body0,CollisionObject body1,bool isSwapped) : base(ci,body0,body1) { m_isSwapped = isSwapped; m_convexTriangleCallback = new ConvexTriangleCallback(m_dispatcher, body0, body1, isSwapped); }
public SphereSphereCollisionAlgorithm(PersistentManifold mf,CollisionAlgorithmConstructionInfo ci,CollisionObject body0,CollisionObject body1) : base(ci,body0,body1) { }
} // for pool public ActivatingCollisionAlgorithm(CollisionAlgorithmConstructionInfo ci) : base(ci) { }
public virtual CollisionAlgorithm CreateCollisionAlgorithm(CollisionAlgorithmConstructionInfo caci, CollisionObject body0, CollisionObject body1) { return(null); }
public SphereTriangleCollisionAlgorithm(CollisionAlgorithmConstructionInfo ci) : base(ci) { }
public override CollisionAlgorithm CreateCollisionAlgorithm(CollisionAlgorithmConstructionInfo ci, CollisionObject body0, CollisionObject body1) { return new CompoundCollisionAlgorithm(ci, body0, body1,false); }