106 lines
3.7 KiB
C++
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
|