LifePlay-Revival/Source/LifePlay/LPKeyboardSubsystem.h

69 lines
2.3 KiB
C
Raw Permalink Normal View History

// Menu Clavier dans les reglages (MainMenu, liste SettingsScrollBox).
//
// Les touches du jeu sont les ActionMappings et AxisMappings de DefaultInput.ini, lus par BPs/PC.
// Ce sous-systeme ajoute un bouton « Clavier » dans cette liste et ouvre un panneau pour les
// changer. Le resultat est ecrit dans Saved/Config/Windows/LPKeyboard.ini de cette version,
// pas dans GameSettings.sav : les sauvegardes et le jeu 4.27 ne sont pas touches.
// Input.ini est le cache du moteur : il le supprime en quittant quand le diff est vide.
// Aucun Blueprint n'est modifie. Sans la liste des reglages, le bouton n'est pas ajoute.
#pragma once
#include "CoreMinimal.h"
#include "Containers/Ticker.h"
#include "InputCoreTypes.h"
#include "Subsystems/GameInstanceSubsystem.h"
#include "Widgets/SWidget.h"
#include "LPKeyboardSubsystem.generated.h"
class UScrollBox;
UCLASS()
class LIFEPLAY_API ULPKeyboardSubsystem : public UGameInstanceSubsystem
{
GENERATED_BODY()
public:
virtual void Initialize(FSubsystemCollectionBase& Collection) override;
virtual void Deinitialize() override;
UFUNCTION()
void OpenKeyboardMenu();
TSharedRef<SWidget> TakeEmbeddedPage();
void CloseKeyboardMenu();
void BeginWait(FName Name, bool bAxis, float Scale, FKey OldKey, bool bShift, bool bCtrl, bool bAlt, bool bCmd, bool bAdd);
void CancelWait();
bool CommitKey(const FKey& Key, bool bShift, bool bCtrl, bool bAlt, bool bCmd);
void RemoveBinding(FName Name, bool bAxis, float Scale, FKey Key, bool bShift, bool bCtrl, bool bAlt, bool bCmd);
void ResetToDefault();
bool IsWaiting() const { return bWaiting; }
bool IsMenuOpen() const;
const FString& GetStatus() const { return Status; }
void RefreshMenu();
private:
bool Tick(float DeltaTime);
void AttachButton(UScrollBox* Scroll);
void ApplyToPlayer() const;
bool LoadSaved() const;
void SaveSaved() const;
bool LoadDefaults(TArray<struct FInputActionKeyMapping>& Actions, TArray<struct FInputAxisKeyMapping>& Axes) const;
FTSTicker::FDelegateHandle TickHandle;
bool bLoggedMissing = false;
bool bWaiting = false;
bool bWaitAdd = false;
bool bWaitAxis = false;
float WaitScale = 0.f;
FName WaitName;
FKey WaitOldKey;
bool bWaitShift = false;
bool bWaitCtrl = false;
bool bWaitAlt = false;
bool bWaitCmd = false;
FString Status;
};