86 lines
3.6 KiB
C++
86 lines
3.6 KiB
C++
// 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();
|
|
/** KEY2 (KEY2-SPEC-01 § 4) : prereglage QWERTY ou AZERTY du deplacement et d'ActionPanel, puis Layout enregistre. */
|
|
void ApplyLayout(const FString& LayoutName);
|
|
/** KEY2 (§ 7) : clic gauche seul refuse pendant une capture (la capture continue). */
|
|
void RefuseLeftClick();
|
|
/** KEY2 (§ 7) : molette (MouseScrollUp, MouseScrollDown) pour les actions seulement. */
|
|
bool CommitWheel(bool bUp, bool bShift, bool bCtrl, bool bAlt, bool bCmd);
|
|
/** KEY2 (§ 8b) : « Move couple with » ; vrai = Arrows only (CoupleDrag=Keys), lu par LPCameraModeSubsystem. */
|
|
bool IsCoupleDragByKeys() const { return bCoupleDragKeys; }
|
|
void SetCoupleDragByKeys(bool bKeys);
|
|
/** Disposition enregistree : QWERTY, AZERTY ou Custom. */
|
|
const FString& GetLayout() const { return Layout; }
|
|
|
|
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();
|
|
void SaveSaved() const;
|
|
bool LoadDefaults(TArray<struct FInputActionKeyMapping>& Actions, TArray<struct FInputAxisKeyMapping>& Axes) const;
|
|
/** KEY2 (§ 4, etapes 1 a 3, sans ApplyToPlayer) : retire le groupe et les memes touches ailleurs, ajoute le prereglage. */
|
|
void ApplyPreset(bool bAzerty, TArray<FString>& Cleared);
|
|
/** Ligne d'etat a l'ouverture du panneau (ActionPanel sans touche : invite a choisir une disposition). */
|
|
FString IdleStatus() 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;
|
|
/** Section [LPKeyboard] de LPKeyboard.ini (KEY2) : Layout=QWERTY|AZERTY|Custom, CoupleDrag=Mouse|Keys. */
|
|
FString Layout = TEXT("QWERTY");
|
|
bool bCoupleDragKeys = false;
|
|
};
|