Files
the-cycle/src/Prospect.Unreal/Core/Objects/UObjectBaseUtility.cs
T
2022-01-18 03:13:56 +01:00

85 lines
1.9 KiB
C#

using System.Runtime.CompilerServices;
namespace Prospect.Unreal.Core.Objects;
public class UObjectBaseUtility : UObjectBase
{
/*
* Flags
*/
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public void SetFlags(EObjectFlags newFlags)
{
SetFlagsTo(GetFlags() | newFlags);
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public void ClearFlags(EObjectFlags newFlags)
{
SetFlagsTo(GetFlags() | ~newFlags);
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public bool HasAnyFlags(EObjectFlags flagsToCheck)
{
return (GetFlags() & flagsToCheck) != 0;
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public bool HasAllFlags(EObjectFlags flagsToCheck)
{
return (GetFlags() & flagsToCheck) == flagsToCheck;
}
/*
* Marks
*/
public bool IsUnreachable()
{
// TODO: GUObjectArray
return false;
}
public bool IsPendingKill()
{
// TODO: GUObjectArray
return false;
}
/*
* Outer & Package
*/
public UObject? GetTypedOuter(UClass target)
{
UObject? result = null;
for (var nextOuter = GetOuter(); result == null && nextOuter != null; nextOuter = nextOuter.GetOuter())
{
if (nextOuter.IsA(target))
{
result = nextOuter;
}
}
return result;
}
public T? GetTypedOuter<T>() where T : UObject
{
return (T?)GetTypedOuter(GUClassArray.StaticClass<T>());
}
/*
* Class
*/
public bool IsChildOfWorkaround(UClass objClass, UClass testClass)
{
return objClass.IsChildOf(testClass);
}
public bool IsA(UClass someBase)
{
var someBaseClass = someBase;
var thisClass = GetClass();
return IsChildOfWorkaround(thisClass, someBaseClass);
}
}