141 lines
5.1 KiB
C++
141 lines
5.1 KiB
C++
// Copyright Epic Games, Inc. All Rights Reserved.
|
|
|
|
#include "UI/PHYAttributeRowWidget.h"
|
|
|
|
#include UE_INLINE_GENERATED_CPP_BY_NAME(PHYAttributeRowWidget)
|
|
|
|
#include "Blueprint/WidgetTree.h"
|
|
#include "Components/Border.h"
|
|
#include "Components/Button.h"
|
|
#include "Components/HorizontalBox.h"
|
|
#include "Components/HorizontalBoxSlot.h"
|
|
#include "Components/TextBlock.h"
|
|
#include "Engine/Texture2D.h"
|
|
#include "Fonts/SlateFontInfo.h"
|
|
#include "Styling/CoreStyle.h"
|
|
#include "Styling/SlateBrush.h"
|
|
#include "Styling/SlateTypes.h"
|
|
#include "Widgets/SWidget.h"
|
|
|
|
namespace
|
|
{
|
|
const TCHAR* const AttributeRowTexturePath = TEXT("/Game/AGame/UI/Attributes/Textures/T_PHY_UI_RowStrip.T_PHY_UI_RowStrip");
|
|
const TCHAR* const AttributeRowCinnabarTexturePath = TEXT("/Game/AGame/UI/Attributes/Textures/T_PHY_UI_CinnabarTab.T_PHY_UI_CinnabarTab");
|
|
|
|
FSlateBrush MakeAttributeRowBrush(const TCHAR* TexturePath, const FVector2D ImageSize, const FLinearColor Tint, const ESlateBrushDrawType::Type DrawAs = ESlateBrushDrawType::Box, const FMargin Margin = FMargin(0.08f))
|
|
{
|
|
FSlateBrush Brush;
|
|
Brush.DrawAs = DrawAs;
|
|
Brush.Margin = Margin;
|
|
Brush.ImageSize = ImageSize;
|
|
Brush.TintColor = FSlateColor(Tint);
|
|
if (UTexture2D* Texture = LoadObject<UTexture2D>(nullptr, TexturePath))
|
|
{
|
|
Brush.SetResourceObject(Texture);
|
|
}
|
|
return Brush;
|
|
}
|
|
}
|
|
|
|
UPHYAttributeRowWidget::UPHYAttributeRowWidget(const FObjectInitializer& ObjectInitializer)
|
|
: Super(ObjectInitializer)
|
|
{
|
|
}
|
|
|
|
TSharedRef<SWidget> UPHYAttributeRowWidget::RebuildWidget()
|
|
{
|
|
BuildNativeWidgetTree();
|
|
return Super::RebuildWidget();
|
|
}
|
|
|
|
void UPHYAttributeRowWidget::SynchronizeProperties()
|
|
{
|
|
Super::SynchronizeProperties();
|
|
UpdateRowWidgets();
|
|
}
|
|
|
|
void UPHYAttributeRowWidget::SetRow(FText InLabel, FText InValue, const bool bInCanUpgrade)
|
|
{
|
|
Label = MoveTemp(InLabel);
|
|
Value = MoveTemp(InValue);
|
|
bCanUpgrade = bInCanUpgrade;
|
|
UpdateRowWidgets();
|
|
}
|
|
|
|
void UPHYAttributeRowWidget::BuildNativeWidgetTree()
|
|
{
|
|
if (!WidgetTree)
|
|
{
|
|
WidgetTree = NewObject<UWidgetTree>(this, TEXT("WidgetTree"), RF_Transient);
|
|
}
|
|
|
|
if (WidgetTree->RootWidget && RowBorder && RowBox && LabelText && ValueText && UpgradeButton && UpgradeText)
|
|
{
|
|
return;
|
|
}
|
|
|
|
RowBorder = WidgetTree->ConstructWidget<UBorder>(UBorder::StaticClass(), TEXT("RowBorder"));
|
|
RowBorder->SetBrush(MakeAttributeRowBrush(AttributeRowTexturePath, FVector2D(512.0f, 64.0f), FLinearColor(1.0f, 0.98f, 0.90f, 0.78f)));
|
|
RowBorder->SetPadding(FMargin(11.0f, 5.0f));
|
|
WidgetTree->RootWidget = RowBorder;
|
|
|
|
RowBox = WidgetTree->ConstructWidget<UHorizontalBox>(UHorizontalBox::StaticClass(), TEXT("RowBox"));
|
|
RowBorder->SetContent(RowBox);
|
|
|
|
LabelText = WidgetTree->ConstructWidget<UTextBlock>(UTextBlock::StaticClass(), TEXT("LabelText"));
|
|
LabelText->SetFont(FSlateFontInfo(FCoreStyle::GetDefaultFont(), 16));
|
|
LabelText->SetColorAndOpacity(FSlateColor(FLinearColor(0.31f, 0.25f, 0.16f, 1.0f)));
|
|
if (UHorizontalBoxSlot* LabelSlot = RowBox->AddChildToHorizontalBox(LabelText))
|
|
{
|
|
LabelSlot->SetSize(FSlateChildSize(ESlateSizeRule::Fill));
|
|
LabelSlot->SetPadding(FMargin(0.0f, 3.0f, 10.0f, 3.0f));
|
|
LabelSlot->SetVerticalAlignment(VAlign_Center);
|
|
}
|
|
|
|
ValueText = WidgetTree->ConstructWidget<UTextBlock>(UTextBlock::StaticClass(), TEXT("ValueText"));
|
|
ValueText->SetFont(FSlateFontInfo(FCoreStyle::GetDefaultFont(), 16));
|
|
ValueText->SetColorAndOpacity(FSlateColor(FLinearColor(0.08f, 0.36f, 0.28f, 1.0f)));
|
|
if (UHorizontalBoxSlot* ValueSlot = RowBox->AddChildToHorizontalBox(ValueText))
|
|
{
|
|
ValueSlot->SetSize(FSlateChildSize(ESlateSizeRule::Automatic));
|
|
ValueSlot->SetPadding(FMargin(0.0f, 3.0f, 12.0f, 3.0f));
|
|
ValueSlot->SetVerticalAlignment(VAlign_Center);
|
|
}
|
|
|
|
UpgradeButton = WidgetTree->ConstructWidget<UButton>(UButton::StaticClass(), TEXT("UpgradeButton"));
|
|
FButtonStyle UpgradeButtonStyle;
|
|
UpgradeButtonStyle.SetNormal(MakeAttributeRowBrush(AttributeRowCinnabarTexturePath, FVector2D(34.0f, 34.0f), FLinearColor(0.20f, 0.35f, 0.31f, 0.96f)));
|
|
UpgradeButtonStyle.SetHovered(MakeAttributeRowBrush(AttributeRowCinnabarTexturePath, FVector2D(34.0f, 34.0f), FLinearColor(0.27f, 0.48f, 0.42f, 1.0f)));
|
|
UpgradeButtonStyle.SetPressed(MakeAttributeRowBrush(AttributeRowCinnabarTexturePath, FVector2D(34.0f, 34.0f), FLinearColor(0.74f, 0.24f, 0.13f, 1.0f)));
|
|
UpgradeButton->SetStyle(UpgradeButtonStyle);
|
|
UpgradeText = WidgetTree->ConstructWidget<UTextBlock>(UTextBlock::StaticClass(), TEXT("UpgradeText"));
|
|
UpgradeText->SetText(FText::FromString(TEXT("+")));
|
|
UpgradeText->SetFont(FSlateFontInfo(FCoreStyle::GetDefaultFont(), 20));
|
|
UpgradeText->SetColorAndOpacity(FSlateColor(FLinearColor(0.98f, 0.92f, 0.78f, 1.0f)));
|
|
UpgradeButton->SetContent(UpgradeText);
|
|
if (UHorizontalBoxSlot* UpgradeSlot = RowBox->AddChildToHorizontalBox(UpgradeButton))
|
|
{
|
|
UpgradeSlot->SetSize(FSlateChildSize(ESlateSizeRule::Automatic));
|
|
UpgradeSlot->SetPadding(FMargin(0.0f, 3.0f, 0.0f, 3.0f));
|
|
UpgradeSlot->SetVerticalAlignment(VAlign_Center);
|
|
}
|
|
|
|
UpdateRowWidgets();
|
|
}
|
|
|
|
void UPHYAttributeRowWidget::UpdateRowWidgets()
|
|
{
|
|
if (LabelText)
|
|
{
|
|
LabelText->SetText(Label);
|
|
}
|
|
if (ValueText)
|
|
{
|
|
ValueText->SetText(Value);
|
|
}
|
|
if (UpgradeButton)
|
|
{
|
|
UpgradeButton->SetVisibility(bCanUpgrade ? ESlateVisibility::Visible : ESlateVisibility::Collapsed);
|
|
}
|
|
}
|