private unsafe void DebugDrawShape(string blockName, HkShape shape, MatrixD worldMatrix) { float num = 1.05f; float num2 = 0.02f; if (MyPerGameSettings.Game == GameEnum.SE_GAME) { num2 = 0.1f; } switch (shape.ShapeType) { case HkShapeType.Box: MyRenderProxy.DebugDrawOBB(MatrixD.CreateScale((((HkBoxShape)shape).HalfExtents * 2f) + new Vector3(num2)) * worldMatrix, Color.Red, 0f, true, false, true, false); return; case HkShapeType.Capsule: case HkShapeType.TriSampledHeightFieldCollection: case HkShapeType.TriSampledHeightFieldBvTree: break; case HkShapeType.ConvexVertices: { GeometryCenterPair pair; HkConvexVerticesShape shape7 = (HkConvexVerticesShape)shape; if (!this.m_cachedGeometry.TryGetValue(blockName, out pair)) { Vector3 vector; HkGeometry geometry = new HkGeometry(); shape7.GetGeometry(geometry, out vector); GeometryCenterPair pair1 = new GeometryCenterPair(); pair1.Geometry = geometry; pair1.Center = vector; pair = pair1; if (!string.IsNullOrEmpty(blockName)) { this.m_cachedGeometry.Add(blockName, pair); } } Vector3D vectord = Vector3D.Transform(pair.Center, worldMatrix.GetOrientation()); MatrixD xd = worldMatrix; xd = MatrixD.CreateScale((double)num) * xd; MatrixD *xdPtr1 = (MatrixD *)ref xd; xdPtr1.Translation -= vectord * (num - 1f); this.DrawGeometry(pair.Geometry, xd, Color.Olive, false, false); break; } case HkShapeType.List: { HkShapeContainerIterator iterator = ((HkListShape)shape).GetIterator(); int num3 = 0; while (iterator.IsValid) { num3++; this.DebugDrawShape(blockName + num3, iterator.CurrentValue, worldMatrix); iterator.Next(); } return; } case HkShapeType.Mopp: { HkMoppBvTreeShape shape4 = (HkMoppBvTreeShape)shape; this.DebugDrawShape(blockName, (HkShape)shape4.ShapeCollection, worldMatrix); return; } case HkShapeType.ConvexTranslate: { HkConvexTranslateShape shape6 = (HkConvexTranslateShape)shape; this.DebugDrawShape(blockName, (HkShape)shape6.ChildShape, Matrix.CreateTranslation(shape6.Translation) * worldMatrix); return; } case HkShapeType.ConvexTransform: { HkConvexTransformShape shape5 = (HkConvexTransformShape)shape; this.DebugDrawShape(blockName, (HkShape)shape5.ChildShape, shape5.Transform * worldMatrix); return; } default: return; } }
private void DebugDrawShape(string blockName, HkShape shape, MatrixD worldMatrix) { float expandRatio = 1.05f; float expandSize = 0.02f; if (MyPerGameSettings.Game == GameEnum.SE_GAME) expandSize = 0.1f; switch (shape.ShapeType) { case Havok.HkShapeType.Box: Havok.HkBoxShape box = (HkBoxShape) shape; MyRenderProxy.DebugDrawOBB(MatrixD.CreateScale(box.HalfExtents * 2 + new Vector3(expandSize)) * worldMatrix, Color.Red, 0, true, false); break; case Havok.HkShapeType.List: var listShape = (HkListShape)shape; var iterator = listShape.GetIterator(); int shapeIndex = 0; while (iterator.IsValid) { DebugDrawShape(blockName + shapeIndex++, iterator.CurrentValue, worldMatrix); iterator.Next(); } break; case HkShapeType.Mopp: var compoundShape = (HkMoppBvTreeShape)shape; DebugDrawShape(blockName, compoundShape.ShapeCollection, worldMatrix); break; case HkShapeType.ConvexTransform: var transformShape = (HkConvexTransformShape)shape; DebugDrawShape(blockName, transformShape.ChildShape, transformShape.Transform * worldMatrix); break; case HkShapeType.ConvexTranslate: var translateShape = (HkConvexTranslateShape)shape; DebugDrawShape(blockName, (HkShape)translateShape.ChildShape, Matrix.CreateTranslation(translateShape.Translation) * worldMatrix); break; case HkShapeType.ConvexVertices: var convexShape = (HkConvexVerticesShape)shape; GeometryCenterPair geometryCenterPair; ProfilerShort.Begin("MyExternalPathfinfing.m_cachedGeometry.TryGetValue"); if (!m_cachedGeometry.TryGetValue(blockName, out geometryCenterPair)) { HkGeometry debugGeometry = new HkGeometry(); Vector3 center; convexShape.GetGeometry(debugGeometry, out center); geometryCenterPair = new GeometryCenterPair() { Geometry = debugGeometry, Center = center }; if (!string.IsNullOrEmpty(blockName)) m_cachedGeometry.Add(blockName, geometryCenterPair); } ProfilerShort.End(); Vector3D transformedCenter = Vector3D.Transform(geometryCenterPair.Center, worldMatrix.GetOrientation()); var matrix = worldMatrix; matrix = MatrixD.CreateScale(expandRatio) * matrix; matrix.Translation -= transformedCenter * (expandRatio - 1); DrawGeometry(geometryCenterPair.Geometry, matrix, Color.Olive); break; default: // For breakpoint. Don't judge me :( break; } }