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