protected override void UpdatePastePosition()
        {
            m_pastePositionPrevious = m_pastePosition;


            if (MyCubeBuilder.Static.HitInfo.HasValue)
            {
                m_pastePosition = MyCubeBuilder.Static.HitInfo.Value.Position;
            }
            else
            {
                m_pastePosition = MyCubeBuilder.Static.FreePlacementTarget;
            }

            double gridSize = MyDefinitionManager.Static.GetCubeSize(CopiedGrids[0].GridSizeEnum);

            MyCoordinateSystem.CoordSystemData localCoordData = MyCoordinateSystem.Static.SnapWorldPosToClosestGrid(ref m_pastePosition, gridSize, m_settings.StaticGridAlignToCenter);

            EnableStationRotation = MyCubeBuilder.Static.DynamicMode;

            if (MyCubeBuilder.Static.DynamicMode)
            {
                this.AlignClipboardToGravity();

                m_visible        = true;
                IsSnapped        = false;
                m_lastVoxelState = false;
            }
            else if (RemoveBlock != null)
            {
                m_pastePosition = Vector3D.Transform(m_addPos * RemoveBlock.CubeGrid.GridSize, RemoveBlock.CubeGrid.WorldMatrix);

                if (!IsSnapped && RemoveBlock.CubeGrid.IsStatic)
                {
                    m_pasteOrientationAngle = 0.0f;
                    m_pasteDirForward       = RemoveBlock.CubeGrid.WorldMatrix.Forward;
                    m_pasteDirUp            = RemoveBlock.CubeGrid.WorldMatrix.Up;
                }

                IsSnapped        = true;
                m_lastVoxelState = false;
            }
            else if (MyFakes.ENABLE_BLOCK_PLACEMENT_ON_VOXEL && m_hitEntity is MyVoxelBase)
            {
                if (MyCoordinateSystem.Static.LocalCoordExist)
                {
                    m_pastePosition = localCoordData.SnappedTransform.Position;
                    if (!m_lastVoxelState)
                    {
                        this.AlignRotationToCoordSys();
                    }
                }

                IsSnapped        = true;
                m_lastVoxelState = true;
            }
        }
예제 #2
0
        protected override void UpdatePastePosition()
        {
            base.m_pastePositionPrevious = base.m_pastePosition;
            if (MyCubeBuilder.Static.HitInfo != null)
            {
                base.m_pastePosition = MyCubeBuilder.Static.HitInfo.Value.Position;
            }
            else
            {
                base.m_pastePosition = MyCubeBuilder.Static.FreePlacementTarget;
            }
            double cubeSize = MyDefinitionManager.Static.GetCubeSize(base.CopiedGrids[0].GridSizeEnum);
            long?  id       = null;

            MyCoordinateSystem.CoordSystemData data = MyCoordinateSystem.Static.SnapWorldPosToClosestGrid(ref base.m_pastePosition, cubeSize, base.m_settings.StaticGridAlignToCenter, id);
            base.EnableStationRotation = MyCubeBuilder.Static.DynamicMode;
            if (MyCubeBuilder.Static.DynamicMode)
            {
                base.AlignClipboardToGravity();
                base.m_visible        = true;
                base.IsSnapped        = false;
                this.m_lastVoxelState = false;
            }
            else if (this.RemoveBlock != null)
            {
                base.m_pastePosition = Vector3D.Transform((Vector3)(this.m_addPos * this.RemoveBlock.CubeGrid.GridSize), this.RemoveBlock.CubeGrid.WorldMatrix);
                if (!base.IsSnapped && this.RemoveBlock.CubeGrid.IsStatic)
                {
                    base.m_pasteOrientationAngle = 0f;
                    base.m_pasteDirForward       = (Vector3)this.RemoveBlock.CubeGrid.WorldMatrix.Forward;
                    base.m_pasteDirUp            = (Vector3)this.RemoveBlock.CubeGrid.WorldMatrix.Up;
                }
                base.IsSnapped        = true;
                this.m_lastVoxelState = false;
            }
            else if (MyFakes.ENABLE_BLOCK_PLACEMENT_ON_VOXEL && (base.m_hitEntity is MyVoxelBase))
            {
                if (MyCoordinateSystem.Static.LocalCoordExist)
                {
                    base.m_pastePosition = data.SnappedTransform.Position;
                    if (!this.m_lastVoxelState)
                    {
                        base.AlignRotationToCoordSys();
                    }
                }
                base.IsSnapped        = true;
                this.m_lastVoxelState = true;
            }
        }