// Copyright Epic Games, Inc. All Rights Reserved. /*============================================================================= EditorConstraints.cpp: Editor movement constraints. =============================================================================*/ #include "CoreMinimal.h" #include "Settings/LevelEditorViewportSettings.h" #include "Editor/EditorEngine.h" #include "Editor.h" #include "EditorSupportDelegates.h" float UEditorEngine::GetGridSize() { const TArray& PosGridSizes = GetCurrentPositionGridArray(); const int32 CurrentPosGridSize = GetDefault()->CurrentPosGridSize; float PosVal = 0.0001f; if (PosGridSizes.IsValidIndex(CurrentPosGridSize)) { PosVal = PosGridSizes[CurrentPosGridSize]; } return PosVal; } bool UEditorEngine::IsGridSizePowerOfTwo() const { const ULevelEditorViewportSettings* ViewportSettings = GetDefault(); return ViewportSettings->bUsePowerOf2SnapSize; } void UEditorEngine::SetGridSize(int32 InIndex) { FinishAllSnaps(); ULevelEditorViewportSettings* ViewportSettings = GetMutableDefault(); ViewportSettings->CurrentPosGridSize = FMath::Clamp(InIndex, 0, GetCurrentPositionGridArray().Num() - 1); ViewportSettings->PostEditChange(); FEditorDelegates::OnGridSnappingChanged.Broadcast(GetDefault()->GridEnabled, GetGridSize()); RedrawLevelEditingViewports(); FEditorSupportDelegates::UpdateUI.Broadcast(); } void UEditorEngine::GridSizeIncrement() { const ULevelEditorViewportSettings* ViewportSettings = GetDefault(); SetGridSize(ViewportSettings->CurrentPosGridSize + 1); } void UEditorEngine::GridSizeDecrement() { const ULevelEditorViewportSettings* ViewportSettings = GetDefault(); SetGridSize(ViewportSettings->CurrentPosGridSize - 1); } const TArray& UEditorEngine::GetCurrentPositionGridArray() const { const ULevelEditorViewportSettings* ViewportSettings = GetDefault(); return (ViewportSettings->bUsePowerOf2SnapSize) ? ViewportSettings->Pow2GridSizes : ViewportSettings->DecimalGridSizes; } const TArray& UEditorEngine::GetCurrentIntervalGridArray() const { const ULevelEditorViewportSettings* ViewportSettings = GetDefault(); return (ViewportSettings->bUsePowerOf2SnapSize ? ViewportSettings->Pow2GridIntervals : ViewportSettings->DecimalGridIntervals); } FRotator UEditorEngine::GetRotGridSize() { const TArray RotGridSizes = GetCurrentRotationGridArray(); const int32 CurrentRotGridSize = GetDefault()->CurrentRotGridSize; float RotVal = 0.0001f; if (RotGridSizes.IsValidIndex(CurrentRotGridSize)) { RotVal = RotGridSizes[CurrentRotGridSize]; } return FRotator(RotVal, RotVal, RotVal); } void UEditorEngine::SetRotGridSize(int32 InIndex, ERotationGridMode InGridMode) { FinishAllSnaps(); const TArray RotGridSizes = GetCurrentRotationGridArray(); ULevelEditorViewportSettings* ViewportSettings = GetMutableDefault(); ViewportSettings->CurrentRotGridMode = InGridMode; ViewportSettings->CurrentRotGridSize = FMath::Clamp(InIndex, 0, RotGridSizes.Num() - 1); ViewportSettings->PostEditChange(); RedrawLevelEditingViewports(); FEditorSupportDelegates::UpdateUI.Broadcast(); } void UEditorEngine::RotGridSizeIncrement() { const ULevelEditorViewportSettings* ViewportSettings = GetDefault(); SetRotGridSize(ViewportSettings->CurrentRotGridSize + 1, ViewportSettings->CurrentRotGridMode); } void UEditorEngine::RotGridSizeDecrement() { const ULevelEditorViewportSettings* ViewportSettings = GetDefault(); SetRotGridSize(ViewportSettings->CurrentRotGridSize - 1, ViewportSettings->CurrentRotGridMode); } const TArray& UEditorEngine::GetCurrentRotationGridArray() const { const ULevelEditorViewportSettings* ViewportSettings = GetDefault(); return (ViewportSettings->CurrentRotGridMode == GridMode_Common) ? ViewportSettings->CommonRotGridSizes : ViewportSettings->DivisionsOf360RotGridSizes; } float UEditorEngine::GetScaleGridSize() { const ULevelEditorViewportSettings* ViewportSettings = GetDefault(); float ScaleVal = 0.0001f; if (ViewportSettings->ScalingGridSizes.IsValidIndex(ViewportSettings->CurrentScalingGridSize)) { ScaleVal = ViewportSettings->ScalingGridSizes[ViewportSettings->CurrentScalingGridSize]; } return ScaleVal; } void UEditorEngine::SetScaleGridSize(int32 InIndex) { FinishAllSnaps(); ULevelEditorViewportSettings* ViewportSettings = GetMutableDefault(); ViewportSettings->CurrentScalingGridSize = FMath::Clamp(InIndex, 0, ViewportSettings->ScalingGridSizes.Num() - 1); ViewportSettings->PostEditChange(); RedrawLevelEditingViewports(); FEditorSupportDelegates::UpdateUI.Broadcast(); } float UEditorEngine::GetGridInterval() { const TArray& GridIntervals = GetCurrentIntervalGridArray(); int32 CurrentIndex = GetDefault()->CurrentPosGridSize; if (CurrentIndex >= GridIntervals.Num()) { CurrentIndex = GridIntervals.Num() - 1; } float IntervalValue = 1.0f; if (GridIntervals.IsValidIndex(CurrentIndex)) { IntervalValue = GridIntervals[CurrentIndex]; } return IntervalValue; }