// 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(nullptr, TexturePath)) { Brush.SetResourceObject(Texture); } return Brush; } } UPHYAttributeRowWidget::UPHYAttributeRowWidget(const FObjectInitializer& ObjectInitializer) : Super(ObjectInitializer) { } TSharedRef 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(this, TEXT("WidgetTree"), RF_Transient); } if (WidgetTree->RootWidget && RowBorder && RowBox && LabelText && ValueText && UpgradeButton && UpgradeText) { return; } RowBorder = WidgetTree->ConstructWidget(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::StaticClass(), TEXT("RowBox")); RowBorder->SetContent(RowBox); LabelText = WidgetTree->ConstructWidget(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::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::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::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); } }