Rearrange FormatDataLibrary to have less module coupling.

This commit is contained in:
2026-02-25 16:49:37 -05:00
parent 199a6bb813
commit 5c69883222
10 changed files with 134 additions and 60 deletions

View File

@@ -1,9 +1,51 @@
#include "FormatDataLibrary.h"
#include "LuaCall.h"
#include "AnimQueue.h"
#include "MovementComponentState.h"
#include "Common.h"
#include "Kismet/KismetTextLibrary.h"
#include "UObject/UObjectIterator.h"
void UlxFormatDataLibrary::Initialize(FSubsystemCollectionBase& Collection)
{
Super::Initialize(Collection);
ScanForConverters();
}
void UlxFormatDataLibrary::ScanForConverters()
{
Converters.Empty();
for (TObjectIterator<UClass> It; It; ++It)
{
UClass* Class = *It;
for (TFieldIterator<UFunction> FuncIt(Class, EFieldIteratorFlags::ExcludeSuper); FuncIt; ++FuncIt)
{
UFunction* Function = *FuncIt;
// Must have an AutoConvertedValue parameter.
if (Function->FindPropertyByName(TEXT("AutoConvertedValue")) == nullptr) continue;
// Must have a Name parameter that is a string.
FProperty* NameProp = Function->FindPropertyByName(TEXT("Name"));
if (NameProp == nullptr) continue;
if (CastField<FStrProperty>(NameProp) == nullptr) continue;
// Must return FFormatArgumentData.
FStructProperty* ReturnProp = CastField<FStructProperty>(Function->GetReturnProperty());
if (ReturnProp == nullptr) continue;
if (ReturnProp->Struct->GetFName() != TEXT("FormatArgumentData")) continue;
// Must have exactly three properties: AutoConvertedValue, Name, and ReturnValue.
int PropCount = 0;
for (TFieldIterator<FProperty> PropIt(Function); PropIt; ++PropIt) PropCount++;
if (PropCount != 3) continue;
Converters.Add(Function);
}
}
for (UFunction* Func : Converters)
{
UE_LOG(LogLuprexIntegration, Display, TEXT("FormatData converter: %s::%s"), *Func->GetOuterUClass()->GetName(), *Func->GetName());
}
}
FFormatArgumentData UlxFormatDataLibrary::FormatArgumentDataBool(bool AutoConvertedValue, const FString &Name)
{
@@ -149,33 +191,6 @@ FFormatArgumentData UlxFormatDataLibrary::FormatArgumentDataTransform(const FTra
return Result;
}
FFormatArgumentData UlxFormatDataLibrary::FormatArgumentDataLuaValues(const UlxLuaValues *AutoConvertedValue, const FString &Name)
{
FFormatArgumentData Result;
Result.ArgumentValueType = EFormatArgumentType::Text;
Result.ArgumentName = Name;
Result.ArgumentValue = FText::FromString(AutoConvertedValue->DebugString());
return Result;
}
FFormatArgumentData UlxFormatDataLibrary::FormatArgumentDataAnimationStep(const FlxAnimationStep &AutoConvertedValue, const FString &Name)
{
FFormatArgumentData Result;
Result.ArgumentValueType = EFormatArgumentType::Text;
Result.ArgumentName = Name;
Result.ArgumentValue = FText::FromString(UlxAnimationStepLibrary::AnimationStepDebugString(AutoConvertedValue));
return Result;
}
FFormatArgumentData UlxFormatDataLibrary::FormatArgumentDataMovementComponentState(const FlxMovementComponentState &AutoConvertedValue, const FString &Name)
{
FFormatArgumentData Result;
Result.ArgumentValueType = EFormatArgumentType::Text;
Result.ArgumentName = Name;
Result.ArgumentValue = FText::FromString(UlxMovementComponentStateLibrary::DebugString(AutoConvertedValue));
return Result;
}
FFormatArgumentData UlxFormatDataLibrary::FormatArgumentDataBlank(const FString &Name)
{
FFormatArgumentData Result;