- 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>
83 lines
4.6 KiB
C++
83 lines
4.6 KiB
C++
#pragma once
|
|
|
|
#include "CoreMinimal.h"
|
|
#include "CommonActivatableWidget.h"
|
|
#include "ZMMOAttributeTypes.h"
|
|
#include "UIPlayerStatus_Window.generated.h"
|
|
|
|
class UButton;
|
|
class UTextBlock;
|
|
class UUIPlayerStatus_BonusRow;
|
|
class UUIPlayerStatus_StatRow;
|
|
class UZMMOAttributeComponent;
|
|
|
|
/**
|
|
* Janela de Status do player — composta por instâncias dos sub-widgets
|
|
* UUIPlayerStatus_StatRow (6 primários) e UUIPlayerStatus_BonusRow (8 derivados).
|
|
*
|
|
* Consome o UZMMOAttributeComponent do PlayerState e a pipeline de
|
|
* C_STAT_ALLOC (RequestStatAlloc → server valida → OnStatAllocReply).
|
|
*
|
|
* Pareada com o WBP UI_PlayerStatus_Window. Os 14 rows são BindWidgetOptional
|
|
* pra suportar variantes (ex.: HUD compacto sem CRIT/ASPD).
|
|
*/
|
|
UCLASS(Abstract, Blueprintable, BlueprintType)
|
|
class ZMMO_API UUIPlayerStatus_Window : public UCommonActivatableWidget
|
|
{
|
|
GENERATED_BODY()
|
|
|
|
public:
|
|
UUIPlayerStatus_Window(const FObjectInitializer& ObjectInitializer);
|
|
|
|
protected:
|
|
virtual void NativeOnActivated() override;
|
|
virtual void NativeOnDeactivated() override;
|
|
virtual TOptional<FUIInputConfig> GetDesiredInputConfig() const override;
|
|
|
|
UPROPERTY(BlueprintReadOnly, meta = (BindWidgetOptional), Category = "Zeus|Status") TObjectPtr<UTextBlock> TitleText;
|
|
UPROPERTY(BlueprintReadOnly, meta = (BindWidgetOptional), Category = "Zeus|Status") TObjectPtr<UTextBlock> StatusPointText;
|
|
|
|
// Header: identidade do char.
|
|
UPROPERTY(BlueprintReadOnly, meta = (BindWidgetOptional), Category = "Zeus|Status|Header") TObjectPtr<UTextBlock> Text_CharName;
|
|
UPROPERTY(BlueprintReadOnly, meta = (BindWidgetOptional), Category = "Zeus|Status|Header") TObjectPtr<UTextBlock> Text_Job;
|
|
UPROPERTY(BlueprintReadOnly, meta = (BindWidgetOptional), Category = "Zeus|Status|Header") TObjectPtr<UTextBlock> Text_BaseLevel_Value;
|
|
UPROPERTY(BlueprintReadOnly, meta = (BindWidgetOptional), Category = "Zeus|Status|Header") TObjectPtr<UTextBlock> Text_JobLevel_Value;
|
|
|
|
UPROPERTY(BlueprintReadOnly, meta = (BindWidgetOptional), Category = "Zeus|Status") TObjectPtr<UUIPlayerStatus_StatRow> Row_Str;
|
|
UPROPERTY(BlueprintReadOnly, meta = (BindWidgetOptional), Category = "Zeus|Status") TObjectPtr<UUIPlayerStatus_StatRow> Row_Agi;
|
|
UPROPERTY(BlueprintReadOnly, meta = (BindWidgetOptional), Category = "Zeus|Status") TObjectPtr<UUIPlayerStatus_StatRow> Row_Vit;
|
|
UPROPERTY(BlueprintReadOnly, meta = (BindWidgetOptional), Category = "Zeus|Status") TObjectPtr<UUIPlayerStatus_StatRow> Row_Int;
|
|
UPROPERTY(BlueprintReadOnly, meta = (BindWidgetOptional), Category = "Zeus|Status") TObjectPtr<UUIPlayerStatus_StatRow> Row_Dex;
|
|
UPROPERTY(BlueprintReadOnly, meta = (BindWidgetOptional), Category = "Zeus|Status") TObjectPtr<UUIPlayerStatus_StatRow> Row_Luk;
|
|
|
|
UPROPERTY(BlueprintReadOnly, meta = (BindWidgetOptional), Category = "Zeus|Status|Derived") TObjectPtr<UUIPlayerStatus_BonusRow> Row_Atk;
|
|
UPROPERTY(BlueprintReadOnly, meta = (BindWidgetOptional), Category = "Zeus|Status|Derived") TObjectPtr<UUIPlayerStatus_BonusRow> Row_Matk;
|
|
UPROPERTY(BlueprintReadOnly, meta = (BindWidgetOptional), Category = "Zeus|Status|Derived") TObjectPtr<UUIPlayerStatus_BonusRow> Row_Def;
|
|
UPROPERTY(BlueprintReadOnly, meta = (BindWidgetOptional), Category = "Zeus|Status|Derived") TObjectPtr<UUIPlayerStatus_BonusRow> Row_Mdef;
|
|
UPROPERTY(BlueprintReadOnly, meta = (BindWidgetOptional), Category = "Zeus|Status|Derived") TObjectPtr<UUIPlayerStatus_BonusRow> Row_Hit;
|
|
UPROPERTY(BlueprintReadOnly, meta = (BindWidgetOptional), Category = "Zeus|Status|Derived") TObjectPtr<UUIPlayerStatus_BonusRow> Row_Flee;
|
|
UPROPERTY(BlueprintReadOnly, meta = (BindWidgetOptional), Category = "Zeus|Status|Derived") TObjectPtr<UUIPlayerStatus_BonusRow> Row_Crit;
|
|
UPROPERTY(BlueprintReadOnly, meta = (BindWidgetOptional), Category = "Zeus|Status|Derived") TObjectPtr<UUIPlayerStatus_BonusRow> Row_Aspd;
|
|
|
|
UPROPERTY(BlueprintReadOnly, meta = (BindWidgetOptional), Category = "Zeus|Status") TObjectPtr<UButton> CloseBtn;
|
|
|
|
private:
|
|
void BindToLocalPlayer();
|
|
void UnbindFromComponent();
|
|
void RefreshFromSnapshot(const FZMMOAttributesSnapshot& Snap);
|
|
void SetAllPrimaryRowsPlusEnabled(bool bEnabled);
|
|
void BindRow(UUIPlayerStatus_StatRow* Row, int32 StatId, const TCHAR* IconLetter, const TCHAR* DisplayName);
|
|
|
|
UFUNCTION() void HandleAttributesChanged(const FZMMOAttributesSnapshot& Snapshot);
|
|
UFUNCTION() void HandleStatAllocReply(bool bAccepted, int32 Reason);
|
|
UFUNCTION() void HandleRowPlusClicked(int32 StatId);
|
|
UFUNCTION() void OnCloseClicked();
|
|
|
|
UPROPERTY(Transient)
|
|
TWeakObjectPtr<UZMMOAttributeComponent> BoundComponent;
|
|
|
|
/** Trava local pra evitar spam-click: vira true ao clicar, false ao
|
|
* receber StatAllocReply (ou snapshot novo, o que vier primeiro). */
|
|
bool bPlusButtonsLocked = false;
|
|
};
|