Files
UnrealEngine/Engine/Source/Editor/UnrealEd/Private/EditorDragTools.cpp
2025-05-18 13:04:45 +08:00

69 lines
1.9 KiB
C++

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