private static void OnPostWorldCleanup(IntPtr world, bool sessionEnded, bool cleanupResources) { // At this point UGameInstance::WorldContext should have been set to nullptr. While WorldContext being nullptr // doesn't mean the UGameInstance is nessesarily "destroyed" but there isn't any code which reinitializes // UGameInstance by calling UGameInstance::InitializeStandalone / UGameInstance::InitializeForMinimalNetRPC // // UEditorEngine::TeardownPlaySession() // { // UGameInstance::Shutdown(); - sets this->WorldContext = nullptr // PlayWorld->CleanupWorld(); - called shortly after Shutdown() // { // // These delegates are the first available delegates we can use after UGameInstance state is invalidated // FWorldDelegates::OnWorldCleanup // FWorldDelegates::OnPostWorldCleanup // } // } // TODO: Only call this on types which override this function IntPtr gameInstance = Native_UWorld.GetGameInstance(world); foreach (StaticVar staticVar in Vars) { if (gameInstance != IntPtr.Zero) { staticVar.OnGameInstanceShutdown(gameInstance); } staticVar.OnWorldDestroyed(world); } }
public T Set(UObject worldContextObject, T value) { IntPtr gameInstance = Native_UWorld.GetGameInstance(worldContextObject.Address); if (gameInstance != IntPtr.Zero) { values[gameInstance] = value; } return(value); }
public virtual bool Clear(UObject worldContextObject) { IntPtr gameInstance = Native_UWorld.GetGameInstance(worldContextObject.Address); if (gameInstance != IntPtr.Zero) { return(values.Remove(gameInstance)); } return(false); }
public virtual bool HasValue() { IntPtr world = GetDefaultWorld(); if (world != IntPtr.Zero) { IntPtr gameInstance = Native_UWorld.GetGameInstance(world); return(gameInstance != IntPtr.Zero && values.ContainsKey(gameInstance)); } return(false); }
public virtual bool TryGetValue(UObject worldContextObject, out T value) { IntPtr gameInstance = Native_UWorld.GetGameInstance(worldContextObject.Address); if (gameInstance != IntPtr.Zero) { if (values.TryGetValue(gameInstance, out value)) { return(true); } } value = default(T); return(false); }
public T Set(T value) { IntPtr world = GetDefaultWorld(); if (world != IntPtr.Zero) { IntPtr gameInstance = Native_UWorld.GetGameInstance(world); if (gameInstance != IntPtr.Zero) { values[gameInstance] = value; } } return(value); }
public virtual bool Clear() { IntPtr world = GetDefaultWorld(); if (world != IntPtr.Zero) { IntPtr gameInstance = Native_UWorld.GetGameInstance(world); if (gameInstance != IntPtr.Zero) { return(values.Remove(gameInstance)); } } return(false); }
public virtual bool TryGetValue(out T value) { IntPtr world = GetDefaultWorld(); if (world != IntPtr.Zero) { IntPtr gameInstance = Native_UWorld.GetGameInstance(world); if (gameInstance != IntPtr.Zero) { if (values.TryGetValue(gameInstance, out value)) { return(true); } } } value = default(T); return(false); }
public static FTimerManager GetManager(IntPtr address) { if (address == IntPtr.Zero) { return(null); } TimerManagerInfo timerManagerInfo; if (timerManagers.TryGetValue(address, out timerManagerInfo)) { return(timerManagerInfo.TimeManager); } UpdateOwnerClasses(); IntPtr owner = IntPtr.Zero; if (owner == IntPtr.Zero && worldClass != IntPtr.Zero) { foreach (IntPtr world in new NativeReflection.NativeObjectIterator(worldClass)) { IntPtr timerManager = Native_UWorld.GetTimerManager(world); if (timerManager == address) { IntPtr gameInstance = Native_UWorld.GetGameInstance(world); if (gameInstance != IntPtr.Zero && Native_UGameInstance.GetTimerManager(gameInstance) == address) { owner = gameInstance; break; } else { owner = world; break; } } } } if (owner == IntPtr.Zero && gameInstanceClass != IntPtr.Zero) { foreach (IntPtr gameInstance in new NativeReflection.NativeObjectIterator(gameInstanceClass)) { if (Native_UGameInstance.GetTimerManager(gameInstance) == address) { owner = gameInstance; break; } } } if (owner == IntPtr.Zero && editorEngineClass != IntPtr.Zero) { foreach (IntPtr editorEngine in new NativeReflection.NativeObjectIterator(editorEngineClass)) { if (Native_UEditorEngine.GetTimerManager(editorEngine) == address) { owner = editorEngine; break; } } } if (owner != IntPtr.Zero) { FWeakObjectPtr ownerWeakObjPtr = new FWeakObjectPtr(); ownerWeakObjPtr.Set(owner); timerManagerInfo = new TimerManagerInfo(); timerManagerInfo.Owner = ownerWeakObjPtr; timerManagerInfo.TimeManager = new FTimerManager(address); timerManagers.Add(address, timerManagerInfo); timerManagerOwners[ownerWeakObjPtr] = address; return(timerManagerInfo.TimeManager); } else { return(new FTimerManager(address)); } }
public virtual bool HasValue(UObject worldContextObject) { IntPtr gameInstance = Native_UWorld.GetGameInstance(worldContextObject.Address); return(gameInstance != IntPtr.Zero && values.ContainsKey(gameInstance)); }