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]);  | |||
|  | } |