Files
PHY/Source/PHY/Public/UI/PHYAttributeGroupWidget.h

64 lines
1.7 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "CoreMinimal.h"
#include "Blueprint/UserWidget.h"
#include "PHYAttributeGroupWidget.generated.h"
class UPHYAttributeRowWidget;
class UTextBlock;
class UVerticalBox;
/**
* @brief 属性分组子控件。
*
* 每个分组负责一个标题和若干属性行,例如攻击能力、防御能力、元素抗性。
*/
UCLASS(BlueprintType, Blueprintable)
class PHY_API UPHYAttributeGroupWidget : public UUserWidget
{
GENERATED_BODY()
public:
/** @brief 构造属性分组控件。 */
UPHYAttributeGroupWidget(const FObjectInitializer& ObjectInitializer = FObjectInitializer::Get());
/** @brief 构建原生分组 WidgetTree。 */
virtual TSharedRef<SWidget> RebuildWidget() override;
/** @brief 同步分组显示。 */
virtual void SynchronizeProperties() override;
/** @brief 设置分组标题。 */
UFUNCTION(BlueprintCallable, Category="PHY|UI|Attributes")
void SetGroupTitle(FText InGroupTitle);
/** @brief 清理当前分组内所有属性行。 */
UFUNCTION(BlueprintCallable, Category="PHY|UI|Attributes")
void ClearRows();
/** @brief 添加一行属性。 */
UFUNCTION(BlueprintCallable, Category="PHY|UI|Attributes")
UPHYAttributeRowWidget* AddRow(FText Label, FText Value, bool bCanUpgrade = false);
protected:
/** @brief 构造原生分组树。 */
void BuildNativeWidgetTree();
/** @brief 刷新分组标题。 */
void UpdateGroupWidgets();
/** @brief 分组标题。 */
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category="PHY|UI|Attributes")
FText GroupTitle;
/** @brief 标题文本。 */
UPROPERTY(Transient)
TObjectPtr<UTextBlock> TitleText;
/** @brief 属性行容器。 */
UPROPERTY(Transient)
TObjectPtr<UVerticalBox> RowsBox;
};