// Copyright Epic Games, Inc. All Rights Reserved. #include "LyraBrightnessEditor.h" #include "CommonButtonBase.h" #include "CommonRichTextBlock.h" #include "Components/SlateWrapperTypes.h" #include "Components/WidgetSwitcher.h" #include "Containers/Array.h" #include "GameSetting.h" #include "GameSettingValueScalar.h" #include "GameplayTagContainer.h" #include "Input/Events.h" #include "InputCoreTypes.h" #include "Internationalization/Internationalization.h" #include "Internationalization/Text.h" #include "Math/UnrealMathUtility.h" #include "Misc/Optional.h" #include "Settings/LyraSettingsLocal.h" #include "Templates/Casts.h" #include "UObject/WeakObjectPtr.h" #include "Widgets/Layout/SSafeZone.h" struct FGeometry; #define LOCTEXT_NAMESPACE "Lyra" namespace BrightnessEditor { const float JoystickDeadZone = 0.2f; const float SafeZoneChangeSpeed = 0.1f; } ULyraBrightnessEditor::ULyraBrightnessEditor(const FObjectInitializer& Initializer) : Super(Initializer) { SetVisibility(ESlateVisibility::Visible); bIsFocusable = true; } void ULyraBrightnessEditor::NativeOnInitialized() { Super::NativeOnInitialized(); Switcher_SafeZoneMessage->SetActiveWidget(RichText_Default); } void ULyraBrightnessEditor::NativeOnActivated() { Super::NativeOnActivated(); SSafeZone::SetGlobalSafeZoneScale(ULyraSettingsLocal::Get()->GetSafeZone()); Button_Done->OnClicked().AddUObject(this, &ThisClass::HandleDoneClicked); Button_Back->SetVisibility((bCanCancel)? ESlateVisibility::Visible : ESlateVisibility::Collapsed); if (bCanCancel) { Button_Back->OnClicked().AddUObject(this, &ThisClass::HandleBackClicked); } } bool ULyraBrightnessEditor::ExecuteActionForSetting_Implementation(FGameplayTag ActionTag, UGameSetting* InSetting) { TArray ChildSettings = InSetting ? InSetting->GetChildSettings() : TArray(); if (ChildSettings.Num() > 0 && ChildSettings[0]) { ValueSetting = Cast(ChildSettings[0]); } return true; } FReply ULyraBrightnessEditor::NativeOnAnalogValueChanged(const FGeometry& InGeometry, const FAnalogInputEvent& InAnalogEvent) { if (InAnalogEvent.GetKey() == EKeys::Gamepad_LeftY && FMath::Abs(InAnalogEvent.GetAnalogValue()) >= BrightnessEditor::JoystickDeadZone) { const float SafeZoneMultiplier = FMath::Clamp(SSafeZone::GetGlobalSafeZoneScale().Get(1.0f) + InAnalogEvent.GetAnalogValue() * BrightnessEditor::SafeZoneChangeSpeed, 0.0f, 1.0f); SSafeZone::SetGlobalSafeZoneScale(SafeZoneMultiplier >= 0 ? SafeZoneMultiplier : 0); return FReply::Handled(); } return Super::NativeOnAnalogValueChanged(InGeometry, InAnalogEvent); } FReply ULyraBrightnessEditor::NativeOnMouseWheel(const FGeometry& InGeometry, const FPointerEvent& InMouseEvent) { const float SafeZoneMultiplier = FMath::Clamp(SSafeZone::GetGlobalSafeZoneScale().Get(1.0f) + InMouseEvent.GetWheelDelta() * BrightnessEditor::SafeZoneChangeSpeed, 0.0f, 1.0f); SSafeZone::SetGlobalSafeZoneScale(SafeZoneMultiplier >= 0 ? SafeZoneMultiplier : 0); return FReply::Handled(); } void ULyraBrightnessEditor::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("BrightnessAdjustInstructions", "Use {0} to adjust the brightness"), KeyName)); } void ULyraBrightnessEditor::HandleBackClicked() { DeactivateWidget(); SSafeZone::SetGlobalSafeZoneScale(ULyraSettingsLocal::Get()->GetSafeZone()); } void ULyraBrightnessEditor::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