public GridBlock GetHighestGravityBlock(OrientedBoundingBox boundingBox) { GridBlockCollection gridBlockCollection = GetBlocksNearBoundingBox(boundingBox); for (Int32 i = gridBlockCollection.Count - 1; i > 0; i--) { if (gridBlockCollection[i].LowBoxTopZ < gridBlockCollection[i - 1].LowBoxTopZ) { gridBlockCollection.RemoveAt(i); } else { gridBlockCollection.RemoveAt(i - 1); } } return(gridBlockCollection[0]); }
public GridBlockCollection GetBlocksAroundLine(Vector3 startPoint, Vector3 endPoint) { GridBlockCollection gridBlockCollection = new GridBlockCollection(false); Vector3 currentPoint = startPoint; Vector3 direction = Vector3.Normalize(endPoint - startPoint); Single originalDistance = Vector3.Distance(currentPoint, endPoint); while (Vector3.Distance(startPoint, currentPoint) < originalDistance) { GridBlock block = GetBlockByLocation(currentPoint.X, currentPoint.Y); if (block != null && !gridBlockCollection.Contains(block)) { gridBlockCollection.Add(block); } currentPoint += direction; } for (Int32 i = gridBlockCollection.Count - 1; i >= 0; i--) { GridBlock block = gridBlockCollection[i]; if (block == null) { continue; } if (block.ContainerBox == null) { continue; } if (block.ContainerBox.LineInBox(startPoint, endPoint)) { continue; } gridBlockCollection.RemoveAt(i); } return(gridBlockCollection); }