Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
 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;
     }
 }