Files
ZMMO/Source/ZMMO/Game/UI/Widgets/UIButton_Base.h
Mateus Rodrigues ab74ef8b17 feat(ui): fundacao CommonUI + UUIButton_Base (Abstract)
Habilita CommonUI como base da UI do ZMMO (decisao de arquitetura): modulos CommonUI/CommonInput no Build.cs + include path Game/UI/Widgets; CommonGameViewportClient no DefaultEngine.ini. Adiciona EUIButtonVariant (Primary/Secondary/Danger/Ghost). Cria UUIButton_Base (UCLASS Abstract : UCommonButtonBase): CommonUI cuida de input/foco/click; o C++ resolve os tokens via UZMMOThemeSubsystem::GetActiveUIStyle() e reage a OnThemeChanged; entrega ao WBP por BP_ApplyUIStyle (split contrato C++ / visual Blueprint). CommonInput data/settings deferido p/ a fiacao de input.

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

60 lines
2.0 KiB
C++

#pragma once
#include "CoreMinimal.h"
#include "CommonButtonBase.h"
#include "UI/UIStyleTypes.h"
#include "UI/UIStyleTokens.h"
#include "UIButton_Base.generated.h"
/**
* Botão base do ZMMO. Camada de fundação (não instanciável direto — padrão
* "_Abstract" do Hyper, mas em C++).
*
* Divisão de responsabilidade (ARQUITETURA.md §3.3, exceção de UI):
* - CommonUI (UCommonButtonBase): input teclado/gamepad, foco, click.
* - Este C++: resolve QUAIS tokens usar (variante + tema via
* UZMMOThemeSubsystem::GetActiveUIStyle()) e reage à troca de tema.
* - O WBP que herda (UI_Button_Master): decide COMO pintar, recebendo os
* tokens resolvidos em BP_ApplyUIStyle.
*
* Hierarquia esperada: UUIButton_Base (C++ Abstract)
* → UI_Button_Base (WBP abstrato) → UI_Button_Master → UI_Button_<Feature>.
*/
UCLASS(Abstract, Blueprintable)
class ZMMO_API UUIButton_Base : public UCommonButtonBase
{
GENERATED_BODY()
public:
/** Variante visual; o designer escolhe no WBP/instância. */
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "UI Style")
EUIButtonVariant Variant = EUIButtonVariant::Primary;
/** Re-resolve os tokens do tema ativo e reaplica (chama BP_ApplyUIStyle). */
UFUNCTION(BlueprintCallable, Category = "UI Style")
void RefreshUIStyle();
protected:
virtual void NativePreConstruct() override;
virtual void NativeConstruct() override;
virtual void NativeDestruct() override;
/**
* Implementado no WBP: aplica os tokens resolvidos nos widgets visuais
* (Border/Text/etc.) que só o Blueprint conhece.
*/
UFUNCTION(BlueprintImplementableEvent, Category = "UI Style",
meta = (DisplayName = "Apply UI Style"))
void BP_ApplyUIStyle(const FUIStyleButton& Button, const FUIStyleButtonVariant& VariantStyle);
/** Seleciona o sub-struct da variante atual dentro de FUIStyleButton. */
const FUIStyleButtonVariant& ResolveVariant(const FUIStyleButton& Button) const;
private:
UFUNCTION()
void HandleThemeChanged(FName NewThemeId);
/** Evita rebind duplicado do delegate OnThemeChanged. */
bool bThemeBound = false;
};