public static MyCubeGrid TryGetAsComponent(MyEntity entity, out MyCubeBlock block, bool blockManipulatedEntity = true) { block = null; if (MyManipulationTool.IsEntityManipulated(entity) && blockManipulatedEntity) { return(null); } if (entity.MarkedForClose) { return(null); } var grid = entity as MyCubeGrid; if (grid == null) { return(null); } if (grid.GridSizeEnum != MyCubeSize.Small) { return(null); } if (grid.CubeBlocks.Count != 1) { return(null); } if (grid.IsStatic) { return(null); } if (!MyCubeGrid.IsGridInCompleteState(grid)) { return(null); } var enumerator = grid.CubeBlocks.GetEnumerator(); enumerator.MoveNext(); block = enumerator.Current.FatBlock; enumerator.Dispose(); if (block == null) { return(null); } if (!MyDefinitionManager.Static.IsComponentBlock(block.BlockDefinition.Id)) { return(null); } if (block.IsSubBlock) { return(null); } if (block.GetSubBlocks().Count() > 0) { return(null); } if (MyCubeGridSmallToLargeConnection.Static.TestGridSmallToLargeConnection(grid)) { return(null); } return(grid); }
public static MyCubeGrid TryGetAsComponent(MyEntity entity, out MyCubeBlock block, bool blockManipulatedEntity = true, Vector3D?hitPosition = null) { block = null; if (MyManipulationTool.IsEntityManipulated(entity) && blockManipulatedEntity) { return(null); } if (entity.MarkedForClose) { return(null); } var grid = entity as MyCubeGrid; if (grid == null) { return(null); } if (grid.GridSizeEnum != MyCubeSize.Small) { return(null); } MyCubeGrid returnedGrid = null; if (MyFakes.ENABLE_GATHERING_SMALL_BLOCK_FROM_GRID && hitPosition != null) { var gridLocalPos = Vector3D.Transform(hitPosition.Value, grid.PositionComp.WorldMatrixNormalizedInv); Vector3I cubePosition; grid.FixTargetCube(out cubePosition, gridLocalPos / grid.GridSize); MySlimBlock slimBlock = grid.GetCubeBlock(cubePosition); if (slimBlock != null && slimBlock.IsFullIntegrity) { block = slimBlock.FatBlock; } } else { if (grid.CubeBlocks.Count != 1) { return(null); } if (grid.IsStatic) { return(null); } if (!MyCubeGrid.IsGridInCompleteState(grid)) { return(null); } if (MyCubeGridSmallToLargeConnection.Static.TestGridSmallToLargeConnection(grid)) { return(null); } var enumerator = grid.CubeBlocks.GetEnumerator(); enumerator.MoveNext(); block = enumerator.Current.FatBlock; enumerator.Dispose(); returnedGrid = grid; } if (block == null) { return(null); } if (!MyDefinitionManager.Static.IsComponentBlock(block.BlockDefinition.Id)) { return(null); } if (block.IsSubBlock) { return(null); } var subBlocks = block.GetSubBlocks(); if (subBlocks.HasValue && subBlocks.Count() > 0) { return(null); } return(returnedGrid); }