Files
Unreal_EmberWild/Source/EmberWild/Public/CustomizationOptionWidget.h

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 EMBERWILD_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;
};