Rearrange FormatDataLibrary to have less module coupling.
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user