Files
ZMMO/Source/ZMMO/Game/UI/Widgets/UIPlayerStatus_StatRow.cpp
Mateus Rodrigues 9390ed9da9 feat(ui/status): nova janela com sub-widgets StatRow/BonusRow + cleanup
- 3 novas classes C++ (UUIPlayerStatus_Window/StatRow/BonusRow) substituem
  UZMMOStatusWindowWidget (removida); StatRow/BonusRow sao reutilizaveis
  via BindWidgetOptional + delegate OnPlusClicked(StatId).
- Window bindea no UZMMOAttributeComponent (PlayerState) e popula header
  (CharName, Job via UZMMOJobsSubsystem, BaseLevel/JobLevel) + 14 rows
  (6 primarios em StatRow com botao "+", 8 derivados em BonusRow).
- Fix spam-click do "+": bPlusButtonsLocked desabilita botoes ate
  OnStatAllocReply do server ou proximo snapshot.
- WBPs movidos pra /UI/Screens/PlayerStatus/, material pra /UI/Materials/.
- 58 widgets renomeados seguindo convencao
  (Frame_/Layout_/Panel_/Container_/Border_/Text_/Image_/Spacer_/List_).
- DA_InGameScreenSet auto-atualizado pelo move.
- Remove WBP_StatusWindow inline (legado).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 00:09:28 -03:00

74 lines
1.9 KiB
C++

#include "UIPlayerStatus_StatRow.h"
#include "Components/Button.h"
#include "Components/HorizontalBox.h"
#include "Components/TextBlock.h"
#include "Internationalization/Text.h"
void UUIPlayerStatus_StatRow::SetupStat(int32 InStatId, FText IconLetter, FText DisplayName)
{
StatId = InStatId;
if (Border_StatIconWrap_Label) Border_StatIconWrap_Label->SetText(IconLetter);
if (Text_StatName) Text_StatName->SetText(DisplayName);
}
void UUIPlayerStatus_StatRow::SetValues(int32 Base, int32 Bonus)
{
if (Text_StatBase) Text_StatBase->SetText(FText::AsNumber(Base));
const bool bShowBonus = (Bonus != 0);
const ESlateVisibility BonusVis = bShowBonus ? ESlateVisibility::Visible : ESlateVisibility::Collapsed;
if (Layout_BonusGroup)
{
Layout_BonusGroup->SetVisibility(BonusVis);
}
else
{
if (Text_Sign) Text_Sign->SetVisibility(BonusVis);
if (Text_StatBonus) Text_StatBonus->SetVisibility(BonusVis);
}
if (bShowBonus)
{
if (Text_Sign) Text_Sign->SetText(FText::FromString(Bonus > 0 ? TEXT("+") : TEXT("-")));
if (Text_StatBonus) Text_StatBonus->SetText(FText::AsNumber(FMath::Abs(Bonus)));
}
}
void UUIPlayerStatus_StatRow::SetPlusVisible(bool bVisible)
{
if (Button_PlusBtn)
{
Button_PlusBtn->SetVisibility(bVisible ? ESlateVisibility::Visible : ESlateVisibility::Collapsed);
}
}
void UUIPlayerStatus_StatRow::SetPlusEnabled(bool bEnabled)
{
if (Button_PlusBtn) Button_PlusBtn->SetIsEnabled(bEnabled);
}
void UUIPlayerStatus_StatRow::NativeOnInitialized()
{
Super::NativeOnInitialized();
if (Button_PlusBtn)
{
Button_PlusBtn->OnClicked.AddDynamic(this, &UUIPlayerStatus_StatRow::HandlePlusClicked);
}
}
void UUIPlayerStatus_StatRow::NativeDestruct()
{
if (Button_PlusBtn)
{
Button_PlusBtn->OnClicked.RemoveDynamic(this, &UUIPlayerStatus_StatRow::HandlePlusClicked);
}
Super::NativeDestruct();
}
void UUIPlayerStatus_StatRow::HandlePlusClicked()
{
OnPlusClicked.Broadcast(StatId);
}