Files
ZMMO/Source/ZeusAttributes/Public/ZeusHudHpSpWidget.h
Mateus Rodrigues 6a6a28a086 refactor: prefixo ZMMO -> Zeus em classes/módulos C++ do cliente
- Renomeia ~50 classes UCLASS/USTRUCT/UENUM/UINTERFACE pra Zeus*
  (AZeusGameMode, AZeusCharacter, UZeusGameInstance, IZeusEntityInterface,
  UZeusWorldSubsystem, FZeusEntitySnapshot, etc.)
- Encurta AZMMOPlayerCharacter -> AZeusCharacter
- Renomeia módulos satélite ZMMOAttributes -> ZeusAttributes e
  ZMMOJobs -> ZeusJobs (pasta + .Build.cs + .uproject)
- Mantém módulo principal ZMMO (renomeia depois quando jogo ganhar nome)
- DefaultEngine.ini: ActiveClassRedirects ZMMOX -> ZeusX (preserva BPs/assets)
- DefaultGame.ini: sections atualizadas pra ZeusThemeSubsystem/ZeusPlayerState
- Category="ZMMO|..." -> "Zeus|..." em UPROPERTYs
- Preserva LogZMMO, ZMMO_API, /Script/ZMMO., /Game/ZMMO/, classes Target

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-02 17:24:38 -03:00

77 lines
2.8 KiB
C++

#pragma once
#include "Blueprint/UserWidget.h"
#include "CoreMinimal.h"
#include "ZeusAttributeTypes.h"
#include "ZeusHudHpSpWidget.generated.h"
class UProgressBar;
class UTextBlock;
/**
* Sub-widget do HUD: barras de HP/SP + label de level. Sem auto-bind no
* AttributeComponent — o parent (`UZeusHudWidget`) propaga snapshots via
* `ApplySnapshot` / `ApplyHpSpDelta` quando o player local recebe updates.
*
* Composicao do HUD (ver `UZeusHudWidget`):
* WBP_HUD (UZeusHudWidget root)
* |-- HpSpBar (UZeusHudHpSpWidget — este)
* |-- PlayerInfo (futuro — nome/job/level)
* |-- Minimap (futuro)
* |-- QuickBar (futuro — hotkeys)
* |-- Buffs (futuro — icones SC)
* |-- Chat (futuro)
* |-- TargetInfo (futuro — mob/player targetado)
*
* Cada sub-widget tem responsabilidade unica (SRP). O parent (UZeusHudWidget)
* faz binding com AttributeComponent e propaga deltas.
*
* Convencao `meta=(BindWidget)`: o WBP filho deve ter widgets com nomes
* exatos (HpBar, SpBar). `BindWidgetOptional` permite omitir.
*/
UCLASS(Abstract, Blueprintable, BlueprintType)
class ZEUSATTRIBUTES_API UZeusHudHpSpWidget : public UUserWidget
{
GENERATED_BODY()
public:
/** Atualiza todos os campos a partir do snapshot. Chamado pelo UZeusHudWidget. */
UFUNCTION(BlueprintCallable, Category = "Zeus|HUD")
void ApplySnapshot(const FZeusAttributesSnapshot& Snapshot);
/** Atualiza apenas HP/SP (sem mexer no level/text). Otimizacao do tick. */
UFUNCTION(BlueprintCallable, Category = "Zeus|HUD")
void ApplyHpSp(int32 Hp, int32 MaxHp, int32 Sp, int32 MaxSp);
protected:
/**
* Hook BlueprintNativeEvent para skin visual reagir a um snapshot novo
* (cores, animacao de level up, etc.). Impl default em C++ apenas
* atualiza progress bars + textos via BindWidget/BindWidgetOptional.
*/
UFUNCTION(BlueprintNativeEvent, Category = "Zeus|HUD")
void OnSnapshotApplied(const FZeusAttributesSnapshot& Snapshot);
virtual void OnSnapshotApplied_Implementation(const FZeusAttributesSnapshot& Snapshot);
// === BindWidget — devem existir no WBP com EXATAMENTE estes nomes ===
UPROPERTY(BlueprintReadOnly, meta = (BindWidget), Category = "Zeus|HUD")
UProgressBar* HpBar = nullptr;
UPROPERTY(BlueprintReadOnly, meta = (BindWidget), Category = "Zeus|HUD")
UProgressBar* SpBar = nullptr;
UPROPERTY(BlueprintReadOnly, meta = (BindWidgetOptional), Category = "Zeus|HUD")
UTextBlock* HpText = nullptr;
UPROPERTY(BlueprintReadOnly, meta = (BindWidgetOptional), Category = "Zeus|HUD")
UTextBlock* SpText = nullptr;
UPROPERTY(BlueprintReadOnly, meta = (BindWidgetOptional), Category = "Zeus|HUD")
UTextBlock* LevelText = nullptr;
private:
/// Ultimo snapshot recebido (cache pra ApplyHpSp manter MaxHp/MaxSp). */
UPROPERTY(Transient)
FZeusAttributesSnapshot LastSnapshot;
};