104 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			104 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
#include "UnrealSharpUtils.h"
 | 
						|
 | 
						|
#include "UnrealSharpUtilities.h"
 | 
						|
#include "Logging/StructuredLog.h"
 | 
						|
 | 
						|
FName FCSUnrealSharpUtils::GetNamespace(const UObject* Object)
 | 
						|
{
 | 
						|
	FName PackageName = GetModuleName(Object);
 | 
						|
	return GetNamespace(PackageName);
 | 
						|
}
 | 
						|
 | 
						|
FName FCSUnrealSharpUtils::GetNamespace(const FName PackageName)
 | 
						|
{
 | 
						|
	return *FString::Printf(TEXT("%s.%s"), TEXT("UnrealSharp"), *PackageName.ToString());
 | 
						|
}
 | 
						|
 | 
						|
FName FCSUnrealSharpUtils::GetNativeFullName(const UField* Object)
 | 
						|
{
 | 
						|
	FName Namespace = GetNamespace(Object);
 | 
						|
	return *FString::Printf(TEXT("%s.%s"), *Namespace.ToString(), *Object->GetName());
 | 
						|
}
 | 
						|
 | 
						|
void FCSUnrealSharpUtils::PurgeMetaData(const UObject* Object)
 | 
						|
{
 | 
						|
#if WITH_METADATA
 | 
						|
	if (!IsValid(Object))
 | 
						|
	{
 | 
						|
		UE_LOGFMT(LogUnrealSharpUtilities, Error, "Tried to purge metadata of an invalid object");
 | 
						|
		return;
 | 
						|
	}
 | 
						|
 | 
						|
	UPackage* Owner = Object->GetOutermost();
 | 
						|
#if ENGINE_MINOR_VERSION >= 6
 | 
						|
	if (TMap<FName, FString>* MetaData = Owner->GetMetaData().GetMapForObject(Object))
 | 
						|
#else
 | 
						|
	if (TMap<FName, FString>* MetaData = Owner->GetMetaData()->GetMapForObject(Object))
 | 
						|
#endif
 | 
						|
	{
 | 
						|
		MetaData->Empty();
 | 
						|
	}
 | 
						|
#endif
 | 
						|
}
 | 
						|
 | 
						|
FName FCSUnrealSharpUtils::GetModuleName(const UObject* Object)
 | 
						|
{
 | 
						|
	return FPackageName::GetShortFName(Object->GetPackage()->GetFName());
 | 
						|
}
 | 
						|
 | 
						|
bool FCSUnrealSharpUtils::IsStandalonePIE()
 | 
						|
{
 | 
						|
#if WITH_EDITOR
 | 
						|
	return !GIsEditor;
 | 
						|
#else
 | 
						|
		return false;
 | 
						|
#endif
 | 
						|
}
 | 
						|
 | 
						|
void FCSUnrealSharpUtils::PurgeStruct(UStruct* Struct)
 | 
						|
{
 | 
						|
	if (!IsValid(Struct))
 | 
						|
	{
 | 
						|
		UE_LOG(LogUnrealSharpUtilities, Warning, TEXT("Tried to purge an invalid struct: %s"), *GetNameSafe(Struct));
 | 
						|
		return;
 | 
						|
	}
 | 
						|
 | 
						|
	PurgeMetaData(Struct);
 | 
						|
 | 
						|
	Struct->PropertyLink = nullptr;
 | 
						|
	Struct->DestructorLink = nullptr;
 | 
						|
	Struct->ChildProperties = nullptr;
 | 
						|
	Struct->Children = nullptr;
 | 
						|
	Struct->PropertiesSize = 0;
 | 
						|
	Struct->MinAlignment = 0;
 | 
						|
	Struct->RefLink = nullptr;
 | 
						|
}
 | 
						|
 | 
						|
FGuid FCSUnrealSharpUtils::ConstructGUIDFromName(const FName& Name)
 | 
						|
{
 | 
						|
	return ConstructGUIDFromString(Name.ToString());
 | 
						|
}
 | 
						|
 | 
						|
FString FCSUnrealSharpUtils::MakeQuotedPath(const FString& Path)
 | 
						|
{
 | 
						|
	if (Path.IsEmpty())
 | 
						|
	{
 | 
						|
		return TEXT("");
 | 
						|
	}
 | 
						|
 | 
						|
	if (Path.StartsWith(TEXT("\"")) && Path.EndsWith(TEXT("\"")))
 | 
						|
	{
 | 
						|
		return Path;
 | 
						|
	}
 | 
						|
 | 
						|
	return FString::Printf(TEXT("\"%s\""), *Path);
 | 
						|
}
 | 
						|
 | 
						|
FGuid FCSUnrealSharpUtils::ConstructGUIDFromString(const FString& Name)
 | 
						|
{
 | 
						|
	const uint32 BufferLength = Name.Len() * sizeof(Name[0]);
 | 
						|
	uint32 HashBuffer[5];
 | 
						|
	FSHA1::HashBuffer(*Name, BufferLength, reinterpret_cast<uint8*>(HashBuffer));
 | 
						|
	return FGuid(HashBuffer[1], HashBuffer[2], HashBuffer[3], HashBuffer[4]); 
 | 
						|
}
 |