Files
Unreal_EmberWild/Source/Survival_projet/Private/CustomizationOptionWidget.cpp
T
2026-08-11 15:23:10 +02:00

89 lines
2.6 KiB
C++

// Fill out your copyright notice in the Description page of Project Settings.
#include "CustomizationOptionWidget.h"
#include "Components/Border.h"
#include "Components/Button.h"
#include "Components/Image.h"
#include "Components/TextBlock.h"
#include "Engine/Texture2D.h"
void UCustomizationOptionWidget::NativeOnInitialized()
{
Super::NativeOnInitialized();
if (OptionButton)
{
OptionButton->OnClicked.AddDynamic(this, &UCustomizationOptionWidget::HandleButtonClicked);
}
SetSelected(false);
}
void UCustomizationOptionWidget::SetupAsPart(int32 InIndex, UTexture2D* Icon)
{
OptionIndex = InIndex;
if (OptionImage)
{
// Le blanc et pas la couleur d'origine : SetupAsColor a pu teinter
// cette image lors d'un passage precedent, et la case est recyclee.
// Sans cette remise a plat, une vignette heriterait de la teinte de la
// pastille qui occupait la meme case avant elle.
OptionImage->SetColorAndOpacity(FLinearColor::White);
OptionImage->SetBrushFromTexture(Icon);
OptionImage->SetVisibility(Icon ? ESlateVisibility::Visible : ESlateVisibility::Collapsed);
}
if (IndexText)
{
// Le numero ne sert que de repli. Affiche a cote d'une vignette, il la
// salirait ; affiche seul, il rend la case utilisable.
IndexText->SetText(FText::AsNumber(InIndex + 1));
IndexText->SetVisibility(Icon ? ESlateVisibility::Collapsed : ESlateVisibility::HitTestInvisible);
}
}
void UCustomizationOptionWidget::SetupAsColor(int32 InIndex, const FLinearColor& Color)
{
OptionIndex = InIndex;
if (OptionImage)
{
// Aucune texture assignee : le pinceau par defaut d'une UImage est un
// aplat blanc, que la teinte suffit a colorer. C'est ce qui permet a
// une pastille de n'avoir besoin d'aucun asset.
OptionImage->SetBrushFromTexture(nullptr);
OptionImage->SetColorAndOpacity(Color);
OptionImage->SetVisibility(ESlateVisibility::Visible);
}
if (IndexText)
{
IndexText->SetVisibility(ESlateVisibility::Collapsed);
}
}
void UCustomizationOptionWidget::SetSelected(bool bInSelected)
{
if (SelectionBorder)
{
SelectionBorder->SetBrushColor(bInSelected ? SelectedBorderColor : UnselectedBorderColor);
}
// La case deja choisie n'est plus cliquable : re-cliquer une option active
// ne ferait rien, et un bouton qui ne fait rien laisse croire que le clic
// n'a pas ete pris. Le style Disabled du bouton la marque au passage --
// c'est un second signal de selection, gratuit, en plus du cadre.
if (OptionButton)
{
OptionButton->SetIsEnabled(!bInSelected);
}
}
void UCustomizationOptionWidget::HandleButtonClicked()
{
OnOptionClicked.Broadcast(OptionIndex);
}