public bool MoveNext() { if (objectArrayPtr == IntPtr.Zero) { return(false); } //checkSlow(IsInAsyncLoadingThread() || int32(InternalExclusionFlags & EInternalObjectFlags::AsyncLoading)); //@todo UE4 check this for LHS on Index on consoles currentObject = null; while (++index < Native_FUObjectArray.GetObjectArrayNum(objectArrayPtr)) { UObject obj = GCHelper.Find(Native_FUObjectArray.GetObjectAtIndex(objectArrayPtr, index)); if (obj != null) { if (!obj.HasAnyFlags(exclusionFlags) || (unrealClass != null && unrealClass != uobjectClass && !obj.IsA(unrealClass)) || obj.HasAnyInternalFlags(internalExclusionFlags)) { continue; } currentObject = obj; return(true); } } return(false); }
public FObjectIterator(UClass unrealClass, bool onlyGCedObjects = false, EObjectFlags additionalExclusionFlags = EObjectFlags.NoFlags, EInternalObjectFlags internalExclusionFlags = EInternalObjectFlags.None) { objectArrayPtr = Native_FUObjectArray.GetGUObjectArray(); index = -1; this.unrealClass = unrealClass; this.exclusionFlags = additionalExclusionFlags; this.internalExclusionFlags = internalExclusionFlags; if (this.unrealClass == UClass.GetClass <UObject>()) { // Set to null to avoid additional UClass checks if this already the UObject class this.unrealClass = null; } }