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