(Feat) Add Animation Fps Charater
This commit is contained in:
@@ -0,0 +1,88 @@
|
||||
// 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);
|
||||
}
|
||||
Reference in New Issue
Block a user