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>
60 lines
2.0 KiB
C++
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;
|
|
};
|