Files
ZMMO/Source/ZMMO/Game/UI/FrontEnd/UICharCard_Base.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

92 lines
3.2 KiB
C++

#pragma once
#include "CoreMinimal.h"
#include "Blueprint/UserWidget.h"
#include "ZeusCharSummary.h"
#include "UICharCard_Base.generated.h"
class UCommonTextBlock;
class UBorder;
class UUIButton_Base;
class UWidget;
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FZeusOnCharCardSelected, FString, CharId);
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FZeusOnCharCardDeleteRequest, FString, CharId);
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FZeusOnCharCardDeleteAccept, FString, CharId);
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FZeusOnCharCardDeleteCancel, FString, CharId);
/**
* Card de personagem (instanciado dinamicamente pelo Lobby/CharSelect).
*
* Quando `Summary.DeleteScheduledAtMs > 0`, o card alterna os botoes:
* - Btn_Select → escondido
* - Btn_Delete → escondido
* - Btn_AcceptDelete → visivel (efetiva o delete depois da janela)
* - Btn_CancelDelete → visivel (cancela o agendamento)
*
* Visibilidade so e alterada se os widgets opcionais estiverem bindados —
* o WBP pode optar por mostrar/esconder via BP override.
*/
UCLASS(Abstract, Blueprintable)
class ZMMO_API UUICharCard_Base : public UUserWidget
{
GENERATED_BODY()
public:
UFUNCTION(BlueprintCallable, Category = "Zeus|CharCard")
void SetFromSummary(const FZeusCharSummary& InSummary);
UPROPERTY(BlueprintReadOnly, Category = "Zeus|CharCard")
FZeusCharSummary Summary;
UPROPERTY(BlueprintAssignable, Category = "Zeus|CharCard")
FZeusOnCharCardSelected OnCardSelected;
UPROPERTY(BlueprintAssignable, Category = "Zeus|CharCard")
FZeusOnCharCardDeleteRequest OnCardDeleteRequest;
UPROPERTY(BlueprintAssignable, Category = "Zeus|CharCard")
FZeusOnCharCardDeleteAccept OnCardDeleteAccept;
UPROPERTY(BlueprintAssignable, Category = "Zeus|CharCard")
FZeusOnCharCardDeleteCancel OnCardDeleteCancel;
/**
* Hook BP — chamado apos SetFromSummary aplicar valores. Util pra
* ajustar visual quando delete esta agendado (badges, cores, etc).
*/
UFUNCTION(BlueprintImplementableEvent, Category = "Zeus|CharCard")
void OnSummaryApplied(bool bIsDeleteScheduled);
protected:
virtual void NativeConstruct() override;
virtual void NativeDestruct() override;
void HandleSelectClicked();
void HandleDeleteClicked();
void HandleAcceptDeleteClicked();
void HandleCancelDeleteClicked();
/** Re-renderiza o texto do countdown (chamado pelo timer 1s). */
UFUNCTION()
void TickCountdown();
void StartCountdownTimer();
void StopCountdownTimer();
UPROPERTY(meta = (BindWidgetOptional)) TObjectPtr<UBorder> Card_Bg;
UPROPERTY(meta = (BindWidgetOptional)) TObjectPtr<UCommonTextBlock> Text_Name;
UPROPERTY(meta = (BindWidgetOptional)) TObjectPtr<UCommonTextBlock> Text_Level;
UPROPERTY(meta = (BindWidgetOptional)) TObjectPtr<UCommonTextBlock> Text_Class;
UPROPERTY(meta = (BindWidget)) TObjectPtr<UUIButton_Base> Btn_Select;
UPROPERTY(meta = (BindWidgetOptional)) TObjectPtr<UUIButton_Base> Btn_Delete;
UPROPERTY(meta = (BindWidgetOptional)) TObjectPtr<UUIButton_Base> Btn_AcceptDelete;
UPROPERTY(meta = (BindWidgetOptional)) TObjectPtr<UUIButton_Base> Btn_CancelDelete;
UPROPERTY(meta = (BindWidgetOptional)) TObjectPtr<UCommonTextBlock> Text_DeleteCountdown;
private:
bool bBound = false;
FTimerHandle CountdownTimerHandle;
};