RealtimeStyleTransferRuntime/Source/LyraGame/Settings/Screens/LyraSafeZoneEditor.cpp

106 lines
3.7 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#include "LyraSafeZoneEditor.h"
#include "CommonButtonBase.h"
#include "Widgets/Layout/SSafeZone.h"
#include "Settings/LyraSettingsLocal.h"
#include "Components/WidgetSwitcher.h"
#include "CommonRichTextBlock.h"
#include "GameSetting.h"
#include "GameSettingValueScalar.h"
#include "CommonUIUtils.h"
#define LOCTEXT_NAMESPACE "Lyra"
namespace SafeZoneEditor
{
const float JoystickDeadZone = 0.2f;
const float SafeZoneChangeSpeed = 0.1f;
}
ULyraSafeZoneEditor::ULyraSafeZoneEditor(const FObjectInitializer& Initializer)
: Super(Initializer)
{
Visibility = ESlateVisibility::Visible;
bIsFocusable = true;
}
void ULyraSafeZoneEditor::NativeOnInitialized()
{
Super::NativeOnInitialized();
Switcher_SafeZoneMessage->SetActiveWidget(RichText_Default);
}
void ULyraSafeZoneEditor::NativeOnActivated()
{
Super::NativeOnActivated();
SSafeZone::SetGlobalSafeZoneScale(ULyraSettingsLocal::Get()->GetSafeZone());
Button_Done->OnClicked().AddUObject(this, &ULyraSafeZoneEditor::HandleDoneClicked);
Button_Back->SetVisibility((bCanCancel)? ESlateVisibility::Visible : ESlateVisibility::Collapsed);
if (bCanCancel)
{
Button_Back->OnClicked().AddUObject(this, &ULyraSafeZoneEditor::HandleBackClicked);
}
}
bool ULyraSafeZoneEditor::ExecuteActionForSetting_Implementation(FGameplayTag ActionTag, UGameSetting* InSetting)
{
TArray<UGameSetting*> ChildSettings = InSetting ? InSetting->GetChildSettings() : TArray<UGameSetting*>();
if (ChildSettings.Num() > 0 && ChildSettings[0])
{
ValueSetting = Cast<UGameSettingValueScalar>(ChildSettings[0]);
}
return true;
}
FReply ULyraSafeZoneEditor::NativeOnAnalogValueChanged(const FGeometry& InGeometry, const FAnalogInputEvent& InAnalogEvent)
{
if (InAnalogEvent.GetKey() == EKeys::Gamepad_LeftY && FMath::Abs(InAnalogEvent.GetAnalogValue()) >= SafeZoneEditor::JoystickDeadZone)
{
const float SafeZoneMultiplier = FMath::Clamp(SSafeZone::GetGlobalSafeZoneScale().Get(1.0f) + InAnalogEvent.GetAnalogValue() * SafeZoneEditor::SafeZoneChangeSpeed, 0.0f, 1.0f);
SSafeZone::SetGlobalSafeZoneScale(SafeZoneMultiplier >= 0 ? SafeZoneMultiplier : 0);
return FReply::Handled();
}
return Super::NativeOnAnalogValueChanged(InGeometry, InAnalogEvent);
}
FReply ULyraSafeZoneEditor::NativeOnMouseWheel(const FGeometry& InGeometry, const FPointerEvent& InMouseEvent)
{
const float SafeZoneMultiplier = FMath::Clamp(SSafeZone::GetGlobalSafeZoneScale().Get(1.0f) + InMouseEvent.GetWheelDelta() * SafeZoneEditor::SafeZoneChangeSpeed, 0.0f, 1.0f);
SSafeZone::SetGlobalSafeZoneScale(SafeZoneMultiplier >= 0 ? SafeZoneMultiplier : 0);
return FReply::Handled();
}
void ULyraSafeZoneEditor::HandleInputModeChanged(ECommonInputType InInputType)
{
const FText KeyName = InInputType == ECommonInputType::Gamepad ? LOCTEXT("SafeZone_KeyToPress_Gamepad", "Left Stick") : LOCTEXT("SafeZone_KeyToPress_Mouse", "Mouse Wheel");
RichText_Default->SetText(FText::Format(LOCTEXT("SafeZoneEditorInstructions", "Use <text color=\"FFFFFFFF\" fontface=\"black\">{0}</> to adjust the corners so it lines up with the edges of your display."), KeyName));
}
void ULyraSafeZoneEditor::HandleBackClicked()
{
DeactivateWidget();
SSafeZone::SetGlobalSafeZoneScale(ULyraSettingsLocal::Get()->GetSafeZone());
}
void ULyraSafeZoneEditor::HandleDoneClicked()
{
if (ValueSetting.IsValid())
{
ValueSetting.Get()->SetValue(SSafeZone::GetGlobalSafeZoneScale().Get(1.0f));
}
else
{
ULyraSettingsLocal::Get()->SetSafeZone(SSafeZone::GetGlobalSafeZoneScale().Get(1.0f));
}
OnSafeZoneSet.Broadcast();
DeactivateWidget();
}
#undef LOCTEXT_NAMESPACE