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);
        }
Beispiel #2
0
        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);
        }