LifePlay-Revival/Source/LifePlay/LPSettingsSubsystem.h
2026-10-21 09:36:04 +02:00

76 lines
2.4 KiB
C++

// Reglages par onglets, et entree Settings de l'ecran titre (entre Mod Manager et Donate).
//
// Les lignes existent deja dans MainMenu.SettingsScrollBox (cases et curseurs du Blueprint).
// Ce sous-systeme ne les recree pas : il les montre ou les cache selon l'onglet.
// General, Audio, Video, Keyboard (la liste des touches), Lewd, puis Misc.
// Aucun Blueprint n'est modifie.
#pragma once
#include "CoreMinimal.h"
#include "Containers/Ticker.h"
#include "Subsystems/GameInstanceSubsystem.h"
#include "LPSettingsSubsystem.generated.h"
class UButton;
class UCanvasPanel;
class UGameInstance;
class UHorizontalBox;
class UNativeWidgetHost;
class UScrollBox;
class UTextBlock;
class UVerticalBox;
class UWidget;
UCLASS()
class LIFEPLAY_API ULPSettingsSubsystem : public UGameInstanceSubsystem
{
GENERATED_BODY()
public:
virtual void Initialize(FSubsystemCollectionBase& Collection) override;
virtual void Deinitialize() override;
UFUNCTION()
void ShowAudio();
UFUNCTION()
void ShowVideo();
UFUNCTION()
void ShowLewd();
UFUNCTION()
void ShowGeneral();
UFUNCTION()
void ShowKeyboard();
UFUNCTION()
void ShowMisc();
UFUNCTION()
void OpenSettings();
// Lot SET1-V1b. Liste des reglages (MainMenu.SettingsScrollBox) de l'instance de MainMenu qui est a l'ecran, nulle s'il
// n'y en a aucune. Partagee avec les sous-systemes qui ajoutent des lignes a cette liste (couleur, video, controle des
// mods) : une ancienne instance, retiree du viewport et pas encore collectee, garde sa liste en memoire et ne doit pas
// recevoir leurs lignes a la place de l'instance affichee. Current : liste deja suivie par l'appelant, elle departage
// deux listes a l'ecran ; peut etre nulle.
static UScrollBox* FindOnScreenSettingsList(const UGameInstance* GI, const UScrollBox* Current = nullptr);
private:
bool Tick(float DeltaTime);
void PlaceSettingsButton();
void EnsureTabs(UScrollBox* Scroll);
void SelectTab(int32 Index);
void ApplyRows();
FTSTicker::FDelegateHandle TickHandle;
int32 ActiveTab = 0;
int32 LastChildCount = -1;
bool bKeyboardPage = false;
bool bControlsHardened = false;
TWeakObjectPtr<UButton> SourceSettings;
TWeakObjectPtr<UVerticalBox> OrderedMenu;
TWeakObjectPtr<UScrollBox> SettingsList;
TWeakObjectPtr<UHorizontalBox> TabBar;
TWeakObjectPtr<UNativeWidgetHost> KeyboardHost;
TArray<TWeakObjectPtr<UTextBlock>> TabLabels;
};