// Copyright Epic Games, Inc. All Rights Reserved. #include "EditorDragTools.h" #include "InputCoreTypes.h" #include "EditorViewportClient.h" #include "Editor.h" #include "SnappingUtils.h" /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // // FDragTool // /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// FDragTool::FDragTool(FEditorModeTools* InModeTools) : bConvertDelta(true), ModeTools(InModeTools), Start(FVector::ZeroVector), End(FVector::ZeroVector), EndWk(FVector::ZeroVector), bUseSnapping(false), bIsDragging(false) { } void FDragTool::AddDelta(const FVector& InDelta) { EndWk += InDelta; End = EndWk; // Snap to constraints. if (bUseSnapping) { const float GridSize = GEditor->GetGridSize(); const FVector GridBase(GridSize, GridSize, GridSize); FSnappingUtils::SnapPointToGrid(End, GridBase); } } void FDragTool::StartDrag(FEditorViewportClient* InViewportClient, const FVector& InStart, const FVector2D& StartScreen) { Start = InStart; bIsDragging = true; // Snap to constraints. if (bUseSnapping) { const float GridSize = GEditor->GetGridSize(); const FVector GridBase(GridSize, GridSize, GridSize); FSnappingUtils::SnapPointToGrid(Start, GridBase); } End = EndWk = Start; // Store button state when the drag began. bAltDown = InViewportClient->IsAltPressed(); bShiftDown = InViewportClient->IsShiftPressed(); bControlDown = InViewportClient->IsCtrlPressed(); bLeftMouseButtonDown = InViewportClient->Viewport->KeyState(EKeys::LeftMouseButton); bRightMouseButtonDown = InViewportClient->Viewport->KeyState(EKeys::RightMouseButton); bMiddleMouseButtonDown = InViewportClient->Viewport->KeyState(EKeys::MiddleMouseButton); } void FDragTool::EndDrag() { Start = End = EndWk = FVector::ZeroVector; bIsDragging = false; }