diff --git a/Plugins/UEWingman/Source/UEWingman/Private/WingProperty.cpp b/Plugins/UEWingman/Source/UEWingman/Private/WingProperty.cpp index 8fb7c449..c4001481 100644 --- a/Plugins/UEWingman/Source/UEWingman/Private/WingProperty.cpp +++ b/Plugins/UEWingman/Source/UEWingman/Private/WingProperty.cpp @@ -29,31 +29,6 @@ FString FWingProperty::GetText() const return Result; } -bool FWingProperty::TryParseEnum(UEnum* Enum, const FString& Text, int64 &OutValue) -{ - int Index = Enum->GetIndexByNameString(Text); - if (Index == INDEX_NONE) - { - FString Prefix = Enum->GenerateEnumPrefix(); - if (!Prefix.IsEmpty()) - { - Index = Enum->GetIndexByNameString(Prefix + TEXT("_") + Text); - } - } - if (Index == INDEX_NONE) - { - UWingServer::Printf(TEXT("ERROR: '%s' is not a valid value for %s\n"), - *Text, *Enum->GetName()); - OutValue = 0; - return false; - } - else - { - OutValue = Enum->GetValueByIndex(Index); - return true; - } -} - bool FWingProperty::SetText(const FString &Value) { void* ValuePtr = Prop->ContainerPtrToValuePtr(Container); @@ -66,23 +41,23 @@ bool FWingProperty::SetText(const FString &Value) if (IsPinTypeProperty(Prop)) return UWingTypes::TextToType(Value, *static_cast(ValuePtr)); - // Byte Enum types get parsed by TryParseEnum, above. + // Byte Enum types. if (FByteProperty* ByteProp = CastField(Prop)) { if (UEnum* Enum = ByteProp->Enum) { int64 EnumValue; - if (!TryParseEnum(Enum, Value, EnumValue)) return false; + if (!WingUtils::StringToEnum(Enum, Value, EnumValue)) return false; ByteProp->SetPropertyValue(ValuePtr, (uint8)EnumValue); return true; } } - // Regular Enum types get parsed by TryParseEnum, above. + // Regular Enum types. if (FEnumProperty* EnumProp = CastField(Prop)) { int64 EnumValue; - if (!TryParseEnum(EnumProp->GetEnum(), Value, EnumValue)) return false; + if (!WingUtils::StringToEnum(EnumProp->GetEnum(), Value, EnumValue)) return false; EnumProp->GetUnderlyingProperty()->SetIntPropertyValue(ValuePtr, EnumValue); return true; } diff --git a/Plugins/UEWingman/Source/UEWingman/Private/WingUtils.cpp b/Plugins/UEWingman/Source/UEWingman/Private/WingUtils.cpp index aa101047..2eb1134d 100644 --- a/Plugins/UEWingman/Source/UEWingman/Private/WingUtils.cpp +++ b/Plugins/UEWingman/Source/UEWingman/Private/WingUtils.cpp @@ -267,22 +267,27 @@ FString WingUtils::WrapText(const FString& Text, int32 ColLimit, const FString& // Enum helpers // ============================================================ -FString WingUtils::EnumToString(UEnum* Enum, int64 Value, const FString& Prefix) +FString WingUtils::EnumToString(UEnum* Enum, int64 Value) { - FString Full = Enum->GetNameStringByValue(Value); - if (!Prefix.IsEmpty() && Full.StartsWith(Prefix)) - return Full.Mid(Prefix.Len()); - return Full; + return Enum->GetNameStringByValue(Value); } -bool WingUtils::StringToEnum(UEnum* Enum, const FString& Str, int64& OutValue, const FString& Prefix) +bool WingUtils::StringToEnum(UEnum* Enum, const FString& Str, int64& OutValue) { - OutValue = Enum->GetValueByNameString(Prefix + Str); - if (OutValue == INDEX_NONE) + int32 Index = Enum->GetIndexByNameString(Str); + if (Index == INDEX_NONE) { - UWingServer::Printf(TEXT("ERROR: Invalid value '%s' for %s\n"), *Str, *Enum->GetName()); + FString Prefix = Enum->GenerateEnumPrefix(); + if (!Prefix.IsEmpty()) + Index = Enum->GetIndexByNameString(Prefix + TEXT("_") + Str); + } + if (Index == INDEX_NONE) + { + UWingServer::Printf(TEXT("ERROR: '%s' is not a valid value for %s\n"), *Str, *Enum->GetName()); + OutValue = 0; return false; } + OutValue = Enum->GetValueByIndex(Index); return true; } diff --git a/Plugins/UEWingman/Source/UEWingman/Public/WingProperty.h b/Plugins/UEWingman/Source/UEWingman/Public/WingProperty.h index 79e0cc71..ea48fe78 100644 --- a/Plugins/UEWingman/Source/UEWingman/Public/WingProperty.h +++ b/Plugins/UEWingman/Source/UEWingman/Public/WingProperty.h @@ -27,7 +27,6 @@ struct FWingProperty static FWingProperty FindOneExactMatch(const TArray& Props, const FString& Name); private: - bool TryParseEnum(UEnum* Enum, const FString& Text, int64 &OutValue); static void Collect(UStruct* StructType, void* Container, TArray &Props, EPropertyFlags Flags); static void Collect(UObject* Container, TArray &Props, EPropertyFlags Flags); }; diff --git a/Plugins/UEWingman/Source/UEWingman/Public/WingUtils.h b/Plugins/UEWingman/Source/UEWingman/Public/WingUtils.h index 081918ba..e39108c8 100644 --- a/Plugins/UEWingman/Source/UEWingman/Public/WingUtils.h +++ b/Plugins/UEWingman/Source/UEWingman/Public/WingUtils.h @@ -128,20 +128,20 @@ public: static FString FormatNodeTitle(const UEdGraphNode *Node); // ----- Enum helpers ----- - static FString EnumToString(UEnum* Enum, int64 Value, const FString& Prefix = FString()); - static bool StringToEnum(UEnum* Enum, const FString& Str, int64& OutValue, const FString& Prefix = FString()); + static FString EnumToString(UEnum* Enum, int64 Value); + static bool StringToEnum(UEnum* Enum, const FString& Str, int64& OutValue); template - static FString EnumToString(TEnumAsByte Value, const FString& Prefix = FString()) - { return EnumToString(StaticEnum(), (int64)Value, Prefix); } + static FString EnumToString(TEnumAsByte Value) + { return EnumToString(StaticEnum(), (int64)Value); } template - static FString EnumToString(T Value, const FString& Prefix = FString()) - { return EnumToString(StaticEnum(), (int64)Value, Prefix); } + static FString EnumToString(T Value) + { return EnumToString(StaticEnum(), (int64)Value); } template - static bool StringToEnum(const FString& Str, T& OutValue, const FString& Prefix = FString()) - { int64 V; if (!StringToEnum(StaticEnum(), Str, V, Prefix)) return false; OutValue = (T)V; return true; } + static bool StringToEnum(const FString& Str, T& OutValue) + { int64 V; if (!StringToEnum(StaticEnum(), Str, V)) return false; OutValue = (T)V; return true; } // ----- Blueprint helpers ----- static TArray AllGraphs(UBlueprint* BP);