public void AddChildShape(ref IndexedMatrix localTransform, CollisionShape shape) { m_updateRevision++; //m_childTransforms.push_back(localTransform); //m_childShapes.push_back(shape); CompoundShapeChild child = new CompoundShapeChild(); child.m_transform = localTransform; child.m_childShape = shape; child.m_childShapeType = shape.GetShapeType(); child.m_childMargin = shape.GetMargin(); //extend the local aabbMin/aabbMax IndexedVector3 localAabbMin; IndexedVector3 localAabbMax; shape.GetAabb(ref localTransform, out localAabbMin, out localAabbMax); MathUtil.VectorMin(ref localAabbMin, ref m_localAabbMin); MathUtil.VectorMax(ref localAabbMax, ref m_localAabbMax); if (m_dynamicAabbTree != null) { DbvtAabbMm bounds = DbvtAabbMm.FromMM(ref localAabbMin, ref localAabbMax); int index = m_children.Count; child.m_treeNode = m_dynamicAabbTree.Insert(ref bounds, (object)index); } m_children.Add(child); }
public override bool Equals(object obj) { CompoundShapeChild other = (CompoundShapeChild)obj; return(m_transform == other.m_transform && m_childShape == other.m_childShape && m_childShapeType == other.m_childShapeType && m_childMargin == other.m_childMargin); }
public void CreateAabbTreeFromChildren() { if (m_dynamicAabbTree == null) { m_dynamicAabbTree = new Dbvt(); for (int index = 0; index < m_children.Count; index++) { CompoundShapeChild child = m_children[index]; //extend the local aabbMin/aabbMax IndexedVector3 localAabbMin, localAabbMax; child.m_childShape.GetAabb(ref child.m_transform, out localAabbMin, out localAabbMax); DbvtAabbMm bounds = DbvtAabbMm.FromMM(ref localAabbMin, ref localAabbMax); child.m_treeNode = m_dynamicAabbTree.Insert(ref bounds, (object)index); } } }