74 lines
2.3 KiB
C++
74 lines
2.3 KiB
C++
// Fill out your copyright notice in the Description page of Project Settings.
|
|
|
|
#pragma once
|
|
|
|
#include "CoreMinimal.h"
|
|
#include "Blueprint/UserWidget.h"
|
|
#include "InputCoreTypes.h"
|
|
#include "SettingKeyRowWidget.generated.h"
|
|
|
|
class UButton;
|
|
class UTextBlock;
|
|
|
|
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FOnSettingKeyRebindRequested, FName, MappingName);
|
|
|
|
/**
|
|
* Une ligne de remappage : un libelle, et un bouton portant la touche actuelle.
|
|
*
|
|
* Widget distinct de USettingRowWidget et non un mode de plus : une touche n'est
|
|
* pas un index dans une liste de paliers, il n'y a ni fleches ni curseur, et
|
|
* l'interaction est d'une autre nature -- on ouvre un voile de capture.
|
|
*
|
|
* Elle ne sait pas remapper. Elle previent via OnRebindRequested et c'est
|
|
* l'onglet qui pilote, comme partout ailleurs dans les reglages.
|
|
*
|
|
* Classe Abstract : on cree un WBP_SettingKeyRow qui en herite.
|
|
*/
|
|
UCLASS(Abstract)
|
|
class EMBERWILD_API USettingKeyRowWidget : public UUserWidget
|
|
{
|
|
GENERATED_BODY()
|
|
|
|
public:
|
|
virtual void NativeOnInitialized() override;
|
|
|
|
UPROPERTY(BlueprintAssignable, Category = "Reglages")
|
|
FOnSettingKeyRebindRequested OnRebindRequested;
|
|
|
|
/** Pose le libelle et la touche. Le nom de mapping est renvoye tel quel au clic. */
|
|
UFUNCTION(BlueprintCallable, Category = "Reglages")
|
|
void Setup(FName InMappingName, const FText& Label, const FKey& Key);
|
|
|
|
/** Met a jour la seule touche affichee. */
|
|
UFUNCTION(BlueprintCallable, Category = "Reglages")
|
|
void SetKey(const FKey& Key);
|
|
|
|
UFUNCTION(BlueprintPure, Category = "Reglages")
|
|
FName GetMappingName() const { return MappingName; }
|
|
|
|
protected:
|
|
UPROPERTY(meta = (BindWidget))
|
|
TObjectPtr<UTextBlock> LabelText;
|
|
|
|
UPROPERTY(meta = (BindWidget))
|
|
TObjectPtr<UButton> KeyButton;
|
|
|
|
UPROPERTY(meta = (BindWidget))
|
|
TObjectPtr<UTextBlock> KeyText;
|
|
|
|
/** Couleur du texte quand l'action n'a plus aucune touche. */
|
|
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Reglages")
|
|
FLinearColor UnboundColor = FLinearColor(0.9f, 0.2f, 0.2f);
|
|
|
|
/** Couleur normale. Reprise telle quelle a la premiere affectation valide. */
|
|
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Reglages")
|
|
FLinearColor BoundColor = FLinearColor::White;
|
|
|
|
private:
|
|
UFUNCTION()
|
|
void HandleKeyButtonClicked();
|
|
|
|
/** Identifiant Enhanced Input du mapping, pas le libelle affiche. */
|
|
FName MappingName = NAME_None;
|
|
};
|