96 lines
3.2 KiB
C++
96 lines
3.2 KiB
C++
// 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<UButton> OptionButton;
|
|
|
|
/** Porte la vignette en mode piece, la couleur en mode couleur. */
|
|
UPROPERTY(meta = (BindWidget))
|
|
TObjectPtr<UImage> 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<UTextBlock> IndexText;
|
|
|
|
/** Le cadre de selection. Optionnel : on peut le rendre autrement. */
|
|
UPROPERTY(meta = (BindWidgetOptional))
|
|
TObjectPtr<UBorder> 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;
|
|
};
|