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; 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; }
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); }