Files
ZMMO/Source/ZMMO/Data/UI/UIStyleTokens.cpp
Mateus Rodrigues 5d44647170 refactor(ui/panel): TMap<EUIPanelTexture> -> TMap<FName> com PostSerialize migration
FUIStylePanel migra de TMap<EUIPanelTexture, FSlateBrush> (enum legacy) para
TMap<FName, FSlateBrush>. Permite adicionar/remover categorias diretamente
no DT_UI_Styles via dropdown (meta=GetOptions) sem mexer no enum em C++.

PanelBackground, PanelOutline e PanelOutlineEffect viraram *_DEPRECATED.
Versoes novas: PanelBackgroundByName, PanelOutlineByName,
PanelOutlineEffectByName.

PostSerialize migra os legacy -> ByName no PostLoad de cada FUIStyleRow.
Apos o primeiro re-save no editor os deprecated ficam vazios e o codigo
vira no-op. PropertyRedirects em DefaultEngine.ini preservam a leitura
do asset antigo (3 entries: PanelBackground, PanelOutline, PanelOutlineEffect).

Atualiza UIPanel_Base pra ler ByName + DT_UI_Styles, UI_Panel_Master e
UI_PlayerStatus_Window resalvos. Inclui nova textura
T_Panel_Outline_Effect_Square_02.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 19:30:48 -03:00

49 lines
1.2 KiB
C++

#include "UIStyleTokens.h"
#include "UObject/Class.h"
#include "UObject/UnrealType.h"
void FUIStylePanel::PostSerialize(const FArchive& Ar)
{
// Migração v1→v2: TMap<EUIPanelTexture, ...> (legacy) → TMap<FName, ...> (atual).
// Roda no PostLoad de cada FUIStyleRow; depois do primeiro re-save no editor
// os campos *_DEPRECATED ficam vazios e este código vira no-op.
if (!Ar.IsLoading())
{
return;
}
const UEnum* EnumPtr = StaticEnum<EUIPanelTexture>();
if (EnumPtr == nullptr)
{
return;
}
auto MigrateOne = [EnumPtr](
TMap<EUIPanelTexture, FSlateBrush>& Legacy,
TMap<FName, FSlateBrush>& ByName)
{
if (Legacy.IsEmpty())
{
return;
}
for (const TPair<EUIPanelTexture, FSlateBrush>& Pair : Legacy)
{
if (Pair.Key == EUIPanelTexture::None)
{
continue;
}
const FName KeyName(*EnumPtr->GetAuthoredNameStringByValue(static_cast<int64>(Pair.Key)));
if (!ByName.Contains(KeyName))
{
ByName.Add(KeyName, Pair.Value);
}
}
Legacy.Reset();
};
MigrateOne(PanelBackground_DEPRECATED, PanelBackgroundByName);
MigrateOne(PanelOutline_DEPRECATED, PanelOutlineByName);
MigrateOne(PanelOutlineEffect_DEPRECATED, PanelOutlineEffectByName);
}