private void GetSurroundingBlocksFromStaticGrids(MySlimBlock block, MyCubeSize cubeSizeEnum, HashSet <MySlimBlock> outBlocks) { outBlocks.Clear(); BoundingBoxD aabbForNeighbors = new BoundingBoxD((Vector3D)(block.Min * block.CubeGrid.GridSize), (Vector3D)(block.Max * block.CubeGrid.GridSize)); BoundingBoxD box = new BoundingBoxD((Vector3D)((block.Min * block.CubeGrid.GridSize) - (block.CubeGrid.GridSize / 2f)), (block.Max * block.CubeGrid.GridSize) + (block.CubeGrid.GridSize / 2f)); if (block.FatBlock != null) { Matrix matrix; box = block.FatBlock.Model.BoundingBox; block.FatBlock.Orientation.GetMatrix(out matrix); box = box.TransformFast(matrix); box.Translate(box.Center); } box.Inflate((double)0.125); BoundingBoxD boundingBox = box.TransformFast(block.CubeGrid.WorldMatrix); List <VRage.Game.Entity.MyEntity> foundElements = new List <VRage.Game.Entity.MyEntity>(); Sandbox.Game.Entities.MyEntities.GetElementsInBox(ref boundingBox, foundElements); for (int i = 0; i < foundElements.Count; i++) { MyCubeGrid objA = foundElements[i] as MyCubeGrid; if (((objA != null) && (objA.IsStatic && (!ReferenceEquals(objA, block.CubeGrid) && (objA.EnableSmallToLargeConnections && objA.SmallToLargeConnectionsInitialized)))) && (objA.GridSizeEnum == cubeSizeEnum)) { m_tmpSlimBlocksList.Clear(); objA.GetBlocksIntersectingOBB(box, block.CubeGrid.WorldMatrix, m_tmpSlimBlocksList); CheckNeighborBlocks(block, aabbForNeighbors, objA, m_tmpSlimBlocksList); foreach (MySlimBlock block2 in m_tmpSlimBlocksList) { if (block2.FatBlock == null) { outBlocks.Add(block2); continue; } if (!(block2.FatBlock is MyFracturedBlock) && !block2.FatBlock.Components.Has <MyFractureComponentBase>()) { if (block2.FatBlock is MyCompoundCubeBlock) { foreach (MySlimBlock block3 in (block2.FatBlock as MyCompoundCubeBlock).GetBlocks()) { if (!block3.FatBlock.Components.Has <MyFractureComponentBase>()) { outBlocks.Add(block3); } } continue; } outBlocks.Add(block2); } } m_tmpSlimBlocksList.Clear(); } } foundElements.Clear(); }