Contains the various factories that are used by default in the engine.
        static NarrowPhaseHelper()
        {
            Factories = new NarrowPhaseSystems.Factories();
            collisionManagers = new Dictionary<TypePair, NarrowPhasePairFactory>();
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable<BoxShape>), typeof(ConvexCollidable<BoxShape>)), Factories.BoxBox);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable<BoxShape>), typeof(ConvexCollidable<SphereShape>)), Factories.BoxSphere);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable<SphereShape>), typeof(ConvexCollidable<SphereShape>)), Factories.SphereSphere);

            collisionManagers.Add(new TypePair(typeof(ConvexCollidable<BoxShape>), typeof(ConvexCollidable<TriangleShape>)), Factories.TriangleConvex);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable<SphereShape>), typeof(ConvexCollidable<TriangleShape>)), Factories.TriangleConvex);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable<CapsuleShape>), typeof(ConvexCollidable<TriangleShape>)), Factories.TriangleConvex);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable<TriangleShape>), typeof(ConvexCollidable<TriangleShape>)), Factories.TriangleConvex);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable<CylinderShape>), typeof(ConvexCollidable<TriangleShape>)), Factories.TriangleConvex);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable<ConeShape>), typeof(ConvexCollidable<TriangleShape>)), Factories.TriangleConvex);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable<TransformableShape>), typeof(ConvexCollidable<TriangleShape>)), Factories.TriangleConvex);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable<MinkowskiSumShape>), typeof(ConvexCollidable<TriangleShape>)), Factories.TriangleConvex);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable<WrappedShape>), typeof(ConvexCollidable<TriangleShape>)), Factories.TriangleConvex);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable<ConvexHullShape>), typeof(ConvexCollidable<TriangleShape>)), Factories.TriangleConvex);

            collisionManagers.Add(new TypePair(typeof(ConvexCollidable<BoxShape>), typeof(StaticMesh)), Factories.StaticMeshConvex);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable<SphereShape>), typeof(StaticMesh)), Factories.StaticMeshSphere);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable<CapsuleShape>), typeof(StaticMesh)), Factories.StaticMeshConvex);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable<TriangleShape>), typeof(StaticMesh)), Factories.StaticMeshConvex);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable<CylinderShape>), typeof(StaticMesh)), Factories.StaticMeshConvex);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable<ConeShape>), typeof(StaticMesh)), Factories.StaticMeshConvex);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable<TransformableShape>), typeof(StaticMesh)), Factories.StaticMeshConvex);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable<MinkowskiSumShape>), typeof(StaticMesh)), Factories.StaticMeshConvex);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable<WrappedShape>), typeof(StaticMesh)), Factories.StaticMeshConvex);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable<ConvexHullShape>), typeof(StaticMesh)), Factories.StaticMeshConvex);
            collisionManagers.Add(new TypePair(typeof(TriangleCollidable), typeof(StaticMesh)), Factories.StaticMeshConvex);

            collisionManagers.Add(new TypePair(typeof(ConvexCollidable<BoxShape>), typeof(Terrain)), Factories.TerrainConvex);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable<SphereShape>), typeof(Terrain)), Factories.TerrainSphere);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable<CapsuleShape>), typeof(Terrain)), Factories.TerrainConvex);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable<TriangleShape>), typeof(Terrain)), Factories.TerrainConvex);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable<CylinderShape>), typeof(Terrain)), Factories.TerrainConvex);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable<ConeShape>), typeof(Terrain)), Factories.TerrainConvex);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable<TransformableShape>), typeof(Terrain)), Factories.TerrainConvex);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable<MinkowskiSumShape>), typeof(Terrain)), Factories.TerrainConvex);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable<WrappedShape>), typeof(Terrain)), Factories.TerrainConvex);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable<ConvexHullShape>), typeof(Terrain)), Factories.TerrainConvex);
            collisionManagers.Add(new TypePair(typeof(TriangleCollidable), typeof(Terrain)), Factories.TerrainConvex);

            collisionManagers.Add(new TypePair(typeof(ConvexCollidable<BoxShape>), typeof(InstancedMesh)), Factories.InstancedMeshConvex);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable<SphereShape>), typeof(InstancedMesh)), Factories.InstancedMeshSphere);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable<CapsuleShape>), typeof(InstancedMesh)), Factories.InstancedMeshConvex);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable<TriangleShape>), typeof(InstancedMesh)), Factories.InstancedMeshConvex);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable<CylinderShape>), typeof(InstancedMesh)), Factories.InstancedMeshConvex);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable<ConeShape>), typeof(InstancedMesh)), Factories.InstancedMeshConvex);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable<TransformableShape>), typeof(InstancedMesh)), Factories.InstancedMeshConvex);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable<MinkowskiSumShape>), typeof(InstancedMesh)), Factories.InstancedMeshConvex);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable<WrappedShape>), typeof(InstancedMesh)), Factories.InstancedMeshConvex);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable<ConvexHullShape>), typeof(InstancedMesh)), Factories.InstancedMeshConvex);
            collisionManagers.Add(new TypePair(typeof(TriangleCollidable), typeof(InstancedMesh)), Factories.InstancedMeshConvex);

            collisionManagers.Add(new TypePair(typeof(ConvexCollidable<BoxShape>), typeof(CompoundCollidable)), Factories.CompoundConvex);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable<SphereShape>), typeof(CompoundCollidable)), Factories.CompoundConvex);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable<CapsuleShape>), typeof(CompoundCollidable)), Factories.CompoundConvex);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable<TriangleShape>), typeof(CompoundCollidable)), Factories.CompoundConvex);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable<CylinderShape>), typeof(CompoundCollidable)), Factories.CompoundConvex);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable<ConeShape>), typeof(CompoundCollidable)), Factories.CompoundConvex);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable<TransformableShape>), typeof(CompoundCollidable)), Factories.CompoundConvex);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable<MinkowskiSumShape>), typeof(CompoundCollidable)), Factories.CompoundConvex);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable<WrappedShape>), typeof(CompoundCollidable)), Factories.CompoundConvex);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable<ConvexHullShape>), typeof(CompoundCollidable)), Factories.CompoundConvex);
            collisionManagers.Add(new TypePair(typeof(TriangleCollidable), typeof(CompoundCollidable)), Factories.CompoundConvex);

            collisionManagers.Add(new TypePair(typeof(CompoundCollidable), typeof(CompoundCollidable)), Factories.CompoundCompound);
            collisionManagers.Add(new TypePair(typeof(CompoundCollidable), typeof(StaticMesh)), Factories.CompoundStaticMesh);
            collisionManagers.Add(new TypePair(typeof(CompoundCollidable), typeof(Terrain)), Factories.CompoundTerrain);
            collisionManagers.Add(new TypePair(typeof(CompoundCollidable), typeof(InstancedMesh)), Factories.CompoundInstancedMesh);

            collisionManagers.Add(new TypePair(typeof(ConvexCollidable<BoxShape>), typeof(MobileMeshCollidable)), Factories.MobileMeshConvex);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable<SphereShape>), typeof(MobileMeshCollidable)), Factories.MobileMeshSphere);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable<CapsuleShape>), typeof(MobileMeshCollidable)), Factories.MobileMeshConvex);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable<TriangleShape>), typeof(MobileMeshCollidable)), Factories.MobileMeshTriangle);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable<CylinderShape>), typeof(MobileMeshCollidable)), Factories.MobileMeshConvex);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable<ConeShape>), typeof(MobileMeshCollidable)), Factories.MobileMeshConvex);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable<TransformableShape>), typeof(MobileMeshCollidable)), Factories.MobileMeshConvex);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable<MinkowskiSumShape>), typeof(MobileMeshCollidable)), Factories.MobileMeshConvex);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable<WrappedShape>), typeof(MobileMeshCollidable)), Factories.MobileMeshConvex);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable<ConvexHullShape>), typeof(MobileMeshCollidable)), Factories.MobileMeshConvex);

            collisionManagers.Add(new TypePair(typeof(CompoundCollidable), typeof(MobileMeshCollidable)), Factories.CompoundMobileMesh);
            collisionManagers.Add(new TypePair(typeof(MobileMeshCollidable), typeof(StaticMesh)), Factories.MobileMeshStaticMesh);
            collisionManagers.Add(new TypePair(typeof(MobileMeshCollidable), typeof(InstancedMesh)), Factories.MobileMeshInstancedMesh);
            collisionManagers.Add(new TypePair(typeof(MobileMeshCollidable), typeof(Terrain)), Factories.MobileMeshTerrain);
            collisionManagers.Add(new TypePair(typeof(MobileMeshCollidable), typeof(MobileMeshCollidable)), Factories.MobileMeshMobileMesh);
            collisionManagers.Add(new TypePair(typeof(MobileMeshCollidable), typeof(TriangleCollidable)), Factories.MobileMeshTriangle);

            collisionManagers.Add(new TypePair(typeof(ConvexCollidable<BoxShape>), typeof(StaticGroup)), Factories.StaticGroupConvex);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable<SphereShape>), typeof(StaticGroup)), Factories.StaticGroupConvex);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable<CapsuleShape>), typeof(StaticGroup)), Factories.StaticGroupConvex);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable<TriangleShape>), typeof(StaticGroup)), Factories.StaticGroupConvex);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable<CylinderShape>), typeof(StaticGroup)), Factories.StaticGroupConvex);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable<ConeShape>), typeof(StaticGroup)), Factories.StaticGroupConvex);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable<TransformableShape>), typeof(StaticGroup)), Factories.StaticGroupConvex);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable<MinkowskiSumShape>), typeof(StaticGroup)), Factories.StaticGroupConvex);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable<WrappedShape>), typeof(StaticGroup)), Factories.StaticGroupConvex);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable<ConvexHullShape>), typeof(StaticGroup)), Factories.StaticGroupConvex);
            collisionManagers.Add(new TypePair(typeof(TriangleCollidable), typeof(StaticGroup)), Factories.StaticGroupConvex);

            collisionManagers.Add(new TypePair(typeof(CompoundCollidable), typeof(StaticGroup)), Factories.StaticGroupCompound);
            collisionManagers.Add(new TypePair(typeof(MobileMeshCollidable), typeof(StaticGroup)), Factories.StaticGroupMobileMesh);

            collisionManagers.Add(new TypePair(typeof(DetectorVolume), typeof(ConvexCollidable<BoxShape>)), Factories.DetectorVolumeConvex);
            collisionManagers.Add(new TypePair(typeof(DetectorVolume), typeof(ConvexCollidable<SphereShape>)), Factories.DetectorVolumeConvex);
            collisionManagers.Add(new TypePair(typeof(DetectorVolume), typeof(ConvexCollidable<CapsuleShape>)), Factories.DetectorVolumeConvex);
            collisionManagers.Add(new TypePair(typeof(DetectorVolume), typeof(ConvexCollidable<TriangleShape>)), Factories.DetectorVolumeConvex);
            collisionManagers.Add(new TypePair(typeof(DetectorVolume), typeof(ConvexCollidable<CylinderShape>)), Factories.DetectorVolumeConvex);
            collisionManagers.Add(new TypePair(typeof(DetectorVolume), typeof(ConvexCollidable<ConeShape>)), Factories.DetectorVolumeConvex);
            collisionManagers.Add(new TypePair(typeof(DetectorVolume), typeof(ConvexCollidable<TransformableShape>)), Factories.DetectorVolumeConvex);
            collisionManagers.Add(new TypePair(typeof(DetectorVolume), typeof(ConvexCollidable<MinkowskiSumShape>)), Factories.DetectorVolumeConvex);
            collisionManagers.Add(new TypePair(typeof(DetectorVolume), typeof(ConvexCollidable<WrappedShape>)), Factories.DetectorVolumeConvex);
            collisionManagers.Add(new TypePair(typeof(DetectorVolume), typeof(ConvexCollidable<ConvexHullShape>)), Factories.DetectorVolumeConvex);
            collisionManagers.Add(new TypePair(typeof(DetectorVolume), typeof(TriangleCollidable)), Factories.DetectorVolumeConvex);

            collisionManagers.Add(new TypePair(typeof(DetectorVolume), typeof(MobileMeshCollidable)), Factories.DetectorVolumeMobileMesh);
            collisionManagers.Add(new TypePair(typeof(DetectorVolume), typeof(CompoundCollidable)), Factories.DetectorVolumeCompound);

        }
        static NarrowPhaseHelper()
        {
            Factories         = new NarrowPhaseSystems.Factories();
            collisionManagers = new Dictionary <TypePair, NarrowPhasePairFactory>();
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable <BoxShape>), typeof(ConvexCollidable <BoxShape>)), Factories.BoxBox);
            //collisionManagers.Add(new TypePair(typeof(ConvexCollidable<BoxShape>), typeof(ConvexCollidable<SphereShape>)), Factories.BoxSphere);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable <SphereShape>), typeof(ConvexCollidable <SphereShape>)), Factories.SphereSphere);

            collisionManagers.Add(new TypePair(typeof(ConvexCollidable <BoxShape>), typeof(ConvexCollidable <TriangleShape>)), Factories.TriangleConvex);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable <SphereShape>), typeof(ConvexCollidable <TriangleShape>)), Factories.TriangleConvex);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable <CapsuleShape>), typeof(ConvexCollidable <TriangleShape>)), Factories.TriangleConvex);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable <TriangleShape>), typeof(ConvexCollidable <TriangleShape>)), Factories.TriangleConvex);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable <CylinderShape>), typeof(ConvexCollidable <TriangleShape>)), Factories.TriangleConvex);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable <ConeShape>), typeof(ConvexCollidable <TriangleShape>)), Factories.TriangleConvex);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable <TransformableShape>), typeof(ConvexCollidable <TriangleShape>)), Factories.TriangleConvex);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable <MinkowskiSumShape>), typeof(ConvexCollidable <TriangleShape>)), Factories.TriangleConvex);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable <WrappedShape>), typeof(ConvexCollidable <TriangleShape>)), Factories.TriangleConvex);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable <ConvexHullShape>), typeof(ConvexCollidable <TriangleShape>)), Factories.TriangleConvex);

            collisionManagers.Add(new TypePair(typeof(ConvexCollidable <BoxShape>), typeof(StaticMesh)), Factories.StaticMeshConvex);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable <SphereShape>), typeof(StaticMesh)), Factories.StaticMeshSphere);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable <CapsuleShape>), typeof(StaticMesh)), Factories.StaticMeshConvex);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable <TriangleShape>), typeof(StaticMesh)), Factories.StaticMeshConvex);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable <CylinderShape>), typeof(StaticMesh)), Factories.StaticMeshConvex);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable <ConeShape>), typeof(StaticMesh)), Factories.StaticMeshConvex);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable <TransformableShape>), typeof(StaticMesh)), Factories.StaticMeshConvex);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable <MinkowskiSumShape>), typeof(StaticMesh)), Factories.StaticMeshConvex);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable <WrappedShape>), typeof(StaticMesh)), Factories.StaticMeshConvex);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable <ConvexHullShape>), typeof(StaticMesh)), Factories.StaticMeshConvex);
            collisionManagers.Add(new TypePair(typeof(TriangleCollidable), typeof(StaticMesh)), Factories.StaticMeshConvex);

            collisionManagers.Add(new TypePair(typeof(ConvexCollidable <BoxShape>), typeof(Terrain)), Factories.TerrainConvex);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable <SphereShape>), typeof(Terrain)), Factories.TerrainSphere);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable <CapsuleShape>), typeof(Terrain)), Factories.TerrainConvex);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable <TriangleShape>), typeof(Terrain)), Factories.TerrainConvex);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable <CylinderShape>), typeof(Terrain)), Factories.TerrainConvex);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable <ConeShape>), typeof(Terrain)), Factories.TerrainConvex);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable <TransformableShape>), typeof(Terrain)), Factories.TerrainConvex);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable <MinkowskiSumShape>), typeof(Terrain)), Factories.TerrainConvex);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable <WrappedShape>), typeof(Terrain)), Factories.TerrainConvex);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable <ConvexHullShape>), typeof(Terrain)), Factories.TerrainConvex);
            collisionManagers.Add(new TypePair(typeof(TriangleCollidable), typeof(Terrain)), Factories.TerrainConvex);

            collisionManagers.Add(new TypePair(typeof(ConvexCollidable <BoxShape>), typeof(InstancedMesh)), Factories.InstancedMeshConvex);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable <SphereShape>), typeof(InstancedMesh)), Factories.InstancedMeshSphere);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable <CapsuleShape>), typeof(InstancedMesh)), Factories.InstancedMeshConvex);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable <TriangleShape>), typeof(InstancedMesh)), Factories.InstancedMeshConvex);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable <CylinderShape>), typeof(InstancedMesh)), Factories.InstancedMeshConvex);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable <ConeShape>), typeof(InstancedMesh)), Factories.InstancedMeshConvex);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable <TransformableShape>), typeof(InstancedMesh)), Factories.InstancedMeshConvex);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable <MinkowskiSumShape>), typeof(InstancedMesh)), Factories.InstancedMeshConvex);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable <WrappedShape>), typeof(InstancedMesh)), Factories.InstancedMeshConvex);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable <ConvexHullShape>), typeof(InstancedMesh)), Factories.InstancedMeshConvex);
            collisionManagers.Add(new TypePair(typeof(TriangleCollidable), typeof(InstancedMesh)), Factories.InstancedMeshConvex);

            collisionManagers.Add(new TypePair(typeof(ConvexCollidable <BoxShape>), typeof(CompoundCollidable)), Factories.CompoundConvex);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable <SphereShape>), typeof(CompoundCollidable)), Factories.CompoundConvex);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable <CapsuleShape>), typeof(CompoundCollidable)), Factories.CompoundConvex);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable <TriangleShape>), typeof(CompoundCollidable)), Factories.CompoundConvex);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable <CylinderShape>), typeof(CompoundCollidable)), Factories.CompoundConvex);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable <ConeShape>), typeof(CompoundCollidable)), Factories.CompoundConvex);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable <TransformableShape>), typeof(CompoundCollidable)), Factories.CompoundConvex);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable <MinkowskiSumShape>), typeof(CompoundCollidable)), Factories.CompoundConvex);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable <WrappedShape>), typeof(CompoundCollidable)), Factories.CompoundConvex);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable <ConvexHullShape>), typeof(CompoundCollidable)), Factories.CompoundConvex);
            collisionManagers.Add(new TypePair(typeof(TriangleCollidable), typeof(CompoundCollidable)), Factories.CompoundConvex);

            collisionManagers.Add(new TypePair(typeof(CompoundCollidable), typeof(CompoundCollidable)), Factories.CompoundCompound);
            collisionManagers.Add(new TypePair(typeof(CompoundCollidable), typeof(StaticMesh)), Factories.CompoundStaticMesh);
            collisionManagers.Add(new TypePair(typeof(CompoundCollidable), typeof(Terrain)), Factories.CompoundTerrain);
            collisionManagers.Add(new TypePair(typeof(CompoundCollidable), typeof(InstancedMesh)), Factories.CompoundInstancedMesh);

            collisionManagers.Add(new TypePair(typeof(ConvexCollidable <BoxShape>), typeof(MobileMeshCollidable)), Factories.MobileMeshConvex);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable <SphereShape>), typeof(MobileMeshCollidable)), Factories.MobileMeshSphere);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable <CapsuleShape>), typeof(MobileMeshCollidable)), Factories.MobileMeshConvex);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable <TriangleShape>), typeof(MobileMeshCollidable)), Factories.MobileMeshTriangle);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable <CylinderShape>), typeof(MobileMeshCollidable)), Factories.MobileMeshConvex);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable <ConeShape>), typeof(MobileMeshCollidable)), Factories.MobileMeshConvex);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable <TransformableShape>), typeof(MobileMeshCollidable)), Factories.MobileMeshConvex);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable <MinkowskiSumShape>), typeof(MobileMeshCollidable)), Factories.MobileMeshConvex);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable <WrappedShape>), typeof(MobileMeshCollidable)), Factories.MobileMeshConvex);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable <ConvexHullShape>), typeof(MobileMeshCollidable)), Factories.MobileMeshConvex);

            collisionManagers.Add(new TypePair(typeof(CompoundCollidable), typeof(MobileMeshCollidable)), Factories.CompoundMobileMesh);
            collisionManagers.Add(new TypePair(typeof(MobileMeshCollidable), typeof(StaticMesh)), Factories.MobileMeshStaticMesh);
            collisionManagers.Add(new TypePair(typeof(MobileMeshCollidable), typeof(InstancedMesh)), Factories.MobileMeshInstancedMesh);
            collisionManagers.Add(new TypePair(typeof(MobileMeshCollidable), typeof(Terrain)), Factories.MobileMeshTerrain);
            collisionManagers.Add(new TypePair(typeof(MobileMeshCollidable), typeof(MobileMeshCollidable)), Factories.MobileMeshMobileMesh);
            collisionManagers.Add(new TypePair(typeof(MobileMeshCollidable), typeof(TriangleCollidable)), Factories.MobileMeshTriangle);

            collisionManagers.Add(new TypePair(typeof(ConvexCollidable <BoxShape>), typeof(StaticGroup)), Factories.StaticGroupConvex);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable <SphereShape>), typeof(StaticGroup)), Factories.StaticGroupConvex);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable <CapsuleShape>), typeof(StaticGroup)), Factories.StaticGroupConvex);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable <TriangleShape>), typeof(StaticGroup)), Factories.StaticGroupConvex);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable <CylinderShape>), typeof(StaticGroup)), Factories.StaticGroupConvex);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable <ConeShape>), typeof(StaticGroup)), Factories.StaticGroupConvex);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable <TransformableShape>), typeof(StaticGroup)), Factories.StaticGroupConvex);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable <MinkowskiSumShape>), typeof(StaticGroup)), Factories.StaticGroupConvex);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable <WrappedShape>), typeof(StaticGroup)), Factories.StaticGroupConvex);
            collisionManagers.Add(new TypePair(typeof(ConvexCollidable <ConvexHullShape>), typeof(StaticGroup)), Factories.StaticGroupConvex);
            collisionManagers.Add(new TypePair(typeof(TriangleCollidable), typeof(StaticGroup)), Factories.StaticGroupConvex);

            collisionManagers.Add(new TypePair(typeof(CompoundCollidable), typeof(StaticGroup)), Factories.StaticGroupCompound);
            collisionManagers.Add(new TypePair(typeof(MobileMeshCollidable), typeof(StaticGroup)), Factories.StaticGroupMobileMesh);

            collisionManagers.Add(new TypePair(typeof(DetectorVolume), typeof(ConvexCollidable <BoxShape>)), Factories.DetectorVolumeConvex);
            collisionManagers.Add(new TypePair(typeof(DetectorVolume), typeof(ConvexCollidable <SphereShape>)), Factories.DetectorVolumeConvex);
            collisionManagers.Add(new TypePair(typeof(DetectorVolume), typeof(ConvexCollidable <CapsuleShape>)), Factories.DetectorVolumeConvex);
            collisionManagers.Add(new TypePair(typeof(DetectorVolume), typeof(ConvexCollidable <TriangleShape>)), Factories.DetectorVolumeConvex);
            collisionManagers.Add(new TypePair(typeof(DetectorVolume), typeof(ConvexCollidable <CylinderShape>)), Factories.DetectorVolumeConvex);
            collisionManagers.Add(new TypePair(typeof(DetectorVolume), typeof(ConvexCollidable <ConeShape>)), Factories.DetectorVolumeConvex);
            collisionManagers.Add(new TypePair(typeof(DetectorVolume), typeof(ConvexCollidable <TransformableShape>)), Factories.DetectorVolumeConvex);
            collisionManagers.Add(new TypePair(typeof(DetectorVolume), typeof(ConvexCollidable <MinkowskiSumShape>)), Factories.DetectorVolumeConvex);
            collisionManagers.Add(new TypePair(typeof(DetectorVolume), typeof(ConvexCollidable <WrappedShape>)), Factories.DetectorVolumeConvex);
            collisionManagers.Add(new TypePair(typeof(DetectorVolume), typeof(ConvexCollidable <ConvexHullShape>)), Factories.DetectorVolumeConvex);
            collisionManagers.Add(new TypePair(typeof(DetectorVolume), typeof(TriangleCollidable)), Factories.DetectorVolumeConvex);

            collisionManagers.Add(new TypePair(typeof(DetectorVolume), typeof(MobileMeshCollidable)), Factories.DetectorVolumeMobileMesh);
            collisionManagers.Add(new TypePair(typeof(DetectorVolume), typeof(CompoundCollidable)), Factories.DetectorVolumeCompound);
        }