// 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 SURVIVAL_PROJET_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 LabelText; UPROPERTY(meta = (BindWidget)) TObjectPtr KeyButton; UPROPERTY(meta = (BindWidget)) TObjectPtr 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; };