// Fill out your copyright notice in the Description page of Project Settings. #pragma once #include "CoreMinimal.h" #include "Blueprint/UserWidget.h" #include "CustomizationOptionWidget.generated.h" class UBorder; class UButton; class UImage; class UTextBlock; class UTexture2D; DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FOnCustomizationOptionClicked, int32, OptionIndex); /** * Une case de la grille de customisation. * * La MEME classe sert les vignettes de pieces et les pastilles de couleur : * dans les deux cas c'est un bouton carre qui porte un visuel et sait s'il est * selectionne. Deux widgets auraient eu la meme logique de selection a tenir a * jour en double, pour la seule difference d'afficher une texture plutot qu'un * aplat. * * Classe Abstract : on cree un WBP_CustomizationOption qui en herite. */ UCLASS(Abstract) class SURVIVAL_PROJET_API UCustomizationOptionWidget : public UUserWidget { GENERATED_BODY() public: virtual void NativeOnInitialized() override; /** Previent d'un clic du joueur, jamais d'un rafraichissement. */ UPROPERTY(BlueprintAssignable, Category = "Customization") FOnCustomizationOptionClicked OnOptionClicked; /** * Mode piece : affiche la vignette du catalogue. * * @param Icon peut etre nul -- la case retombe alors sur son numero. Une * option sans vignette doit rester choisissable, sinon le catalogue * est inutilisable tant que les trente-six textures ne sont pas * rendues, et on veut justement les capturer depuis cet ecran. */ UFUNCTION(BlueprintCallable, Category = "Customization") void SetupAsPart(int32 InIndex, UTexture2D* Icon); /** Mode couleur : la pastille EST le visuel, aucune texture necessaire. */ UFUNCTION(BlueprintCallable, Category = "Customization") void SetupAsColor(int32 InIndex, const FLinearColor& Color); /** Encadre la case si elle porte le choix courant. */ UFUNCTION(BlueprintCallable, Category = "Customization") void SetSelected(bool bInSelected); UFUNCTION(BlueprintPure, Category = "Customization") int32 GetOptionIndex() const { return OptionIndex; } protected: UPROPERTY(meta = (BindWidget)) TObjectPtr OptionButton; /** Porte la vignette en mode piece, la couleur en mode couleur. */ UPROPERTY(meta = (BindWidget)) TObjectPtr OptionImage; /** * Le numero de repli, montre uniquement quand une piece n'a pas de * vignette. BindWidgetOptional : un WBP qui s'en passe reste valide, il * affichera simplement des cases vides. */ UPROPERTY(meta = (BindWidgetOptional)) TObjectPtr IndexText; /** Le cadre de selection. Optionnel : on peut le rendre autrement. */ UPROPERTY(meta = (BindWidgetOptional)) TObjectPtr SelectionBorder; /** Couleur du cadre quand la case porte le choix courant. */ UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Customization") FLinearColor SelectedBorderColor = FLinearColor(1.f, 0.78f, 0.35f, 1.f); /** Couleur du cadre au repos. Transparente par defaut : il disparait. */ UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Customization") FLinearColor UnselectedBorderColor = FLinearColor(1.f, 1.f, 1.f, 0.f); private: UFUNCTION() void HandleButtonClicked(); int32 OptionIndex = 0; };