Files
ZMMO/Source/ZMMO/Data/UI/UIStyleRow.h
Mateus Rodrigues 166650671f feat(frontend): Fase 1 + 1.5 — ServerSelect dinamico + Lobby (chars por mundo)
ServerSelect (Fase 1):
- UIServerSelectScreen_Base: subscribe OnRawMessage + C_WORLD_LIST_REQUEST
- WBP_ServerCard instanciado dinamicamente em GridPanel CardContainer (2 cols)
- UIServerCard_Base: SetFromEntry + OnCardPressed delegate + UI_Button_Master
- Push real-time S_WORLD_STATUS_UPDATE (opcode 2062) atualiza card in-place
- FZMMOWorldEntry struct, EZMMOWorldState enum no wire (offline/online/maint)
- Sem hardcap de slots — cards usam toda largura via ColumnFill weights

Lobby/CharSelect (Fase 1.5):
- UIUserLobbyScreen_Base + WBP_UserLobby (WidgetSwitcher: lista + create)
- C_CHAR_LIST_REQUEST filtrado por SelectedWorldId do FlowSubsystem
- UICharCard_Base + WBP_CharCard com Select/Delete + Accept/Cancel quando
  delete agendado; Text_DeleteCountdown atualiza em tempo real (timer 1s)
- UICharacterCreatePage_Base + WBP_CharacterCreate (Name + ComboBox class)
- Handlers S_CHAR_SELECT_OK (handoff parse), CHAR_CREATE_OK/REJECT,
  CHAR_DELETE_ACK/ACCEPT_ACK/CANCEL_ACK (refresh lista)

Auxiliares + fixes:
- ARQUITETURA_SERVER_SELECT.md + ARQUITETURA_CHARACTER_MODEL.md
- UIFrontEndFlowSubsystem: SelectedWorldId state + transicao Lobby
- DA_FrontEndScreenSet: Lobby -> WBP_UserLobby_C
- UICheckBox_Base + UICommonText_Base (componentes auxiliares)
- BSB_Button_Transparent.Disabled DrawAs=IMAGE -> NoDraw (fix bg branco)
- WBP_ServerCard layout: HBox para chips Region/Ping/Status, SizeBox 10x10
  no Dot verde (anti-overflow); SelfHitTestInvisible em containers (hover)
2026-05-21 20:06:23 -03:00

97 lines
3.1 KiB
C

#pragma once
#include "CoreMinimal.h"
#include "Engine/DataTable.h"
#include "UIStyleTypes.h"
#include "UIStyleTokens.h"
#include "UIStyleRow.generated.h"
/**
* Struct raiz que agrega todos os tokens de estilo de um tema.
*
* Adicionar membros aqui (fase 2/3) é mudança aditiva e segura para a
* DataTable existente — mas, ao alterar este struct em produção, fazer
* backup de DT_UI_Styles (UHT invalida rows serializadas se a coluna não
* preservar valores). Ver ARQUITETURA.md / docs Epic sobre DataTable.
*/
USTRUCT(BlueprintType)
struct ZMMO_API FUIStyle
{
GENERATED_BODY()
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "UI Style")
FUIStylePalette Palette;
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "UI Style")
FUIStyleSemantic Semantic;
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "UI Style")
FUIStyleText Text;
/**
* Categorias tipográficas nomeadas (data-driven). O autor define as
* chaves aqui no DT_UI_Styles ("Title", "Section", "Body", "Label",
* "Dim", ou customizadas); o UUICommonText_Base escolhe pelo nome
* (dropdown populado a partir destas chaves — sem enum fixo em C++).
*/
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "UI Style")
TMap<FName, FUITextStyle> TextRoles;
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "UI Style")
FUIStyleButton Button;
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "UI Style")
FUIStylePanel Panel;
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "UI Style")
FUIStyleBorders Borders;
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "UI Style")
FUIStyleProgressBar ProgressBar;
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "UI Style")
FUIStyleTooltip Tooltip;
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "UI Style")
FUIStyleSpinner Spinner;
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "UI Style")
FUIStyleCheckBox CheckBox;
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "UI Style")
FUIStyleInput Input;
/**
* Fundo de tela cheia do front-end (ex.: Boot/Login). Brush data-driven:
* a tela aplica no seu Border_Bg via RefreshUIStyle — nunca hard-ref no
* WBP (ARQUITETURA.md §5). Preenchido em DT_UI_Styles.
*/
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "UI Style")
FSlateBrush ScreenBackground;
};
/**
* Linha de DT_UI_Styles. O Row Name é o ThemeId (ex.: "Default", "RPG"),
* espelhando DT_ThemeCalendar e ThemeRegistry — assim a camada de estilo
* é consumidora do ThemeId já resolvido pelo UZMMOThemeSubsystem.
*/
USTRUCT(BlueprintType)
struct ZMMO_API FUIStyleRow : public FTableRowBase
{
GENERATED_BODY()
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "UI Style")
FText DisplayName;
/** Validação tipada de design-time; runtime resolve por ThemeId/Row Name. */
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "UI Style")
EUITheme Theme = EUITheme::None;
/** Ponte para o ThemeId resolvido pelo UZMMOThemeSubsystem. */
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "UI Style")
FName ThemeId;
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "UI Style")
FUIStyle Style;
};