private static void UpdateCurrentSynchronousEvent(out bool sceneChanged) { sceneChanged = false; if (LongEventHandler.currentEvent.ShouldWaitUntilDisplayed) { return; } try { if (LongEventHandler.currentEvent.eventAction != null) { LongEventHandler.currentEvent.eventAction(); } if (!LongEventHandler.currentEvent.levelToLoad.NullOrEmpty()) { SceneManager.LoadScene(LongEventHandler.currentEvent.levelToLoad); sceneChanged = true; } LongEventHandler.currentEvent = null; LongEventHandler.eventThread = null; LongEventHandler.levelLoadOp = null; LongEventHandler.ExecuteToExecuteWhenFinished(); } catch (Exception ex) { Log.Error("Exception from long event: " + ex); if (LongEventHandler.currentEvent != null && LongEventHandler.currentEvent.exceptionHandler != null) { LongEventHandler.currentEvent.exceptionHandler(ex); } LongEventHandler.currentEvent = null; LongEventHandler.eventThread = null; LongEventHandler.levelLoadOp = null; } }
public static void ExecuteWhenFinished(Action action) { LongEventHandler.toExecuteWhenFinished.Add(action); if ((LongEventHandler.currentEvent == null || LongEventHandler.currentEvent.ShouldWaitUntilDisplayed) && !LongEventHandler.executingToExecuteWhenFinished) { LongEventHandler.ExecuteToExecuteWhenFinished(); } }
private static void UpdateCurrentEnumeratorEvent() { try { float num = Time.realtimeSinceStartup + 0.1f; while (LongEventHandler.currentEvent.eventActionEnumerator.MoveNext()) { if (num <= Time.realtimeSinceStartup) { return; } } IDisposable disposable = LongEventHandler.currentEvent.eventActionEnumerator as IDisposable; if (disposable != null) { disposable.Dispose(); } LongEventHandler.currentEvent = null; LongEventHandler.eventThread = null; LongEventHandler.levelLoadOp = null; LongEventHandler.ExecuteToExecuteWhenFinished(); } catch (Exception ex) { Log.Error("Exception from long event: " + ex); if (LongEventHandler.currentEvent != null) { IDisposable disposable2 = LongEventHandler.currentEvent.eventActionEnumerator as IDisposable; if (disposable2 != null) { disposable2.Dispose(); } if (LongEventHandler.currentEvent.exceptionHandler != null) { LongEventHandler.currentEvent.exceptionHandler(ex); } } LongEventHandler.currentEvent = null; LongEventHandler.eventThread = null; LongEventHandler.levelLoadOp = null; } }
private static void UpdateCurrentAsynchronousEvent() { if (LongEventHandler.eventThread == null) { LongEventHandler.eventThread = new Thread(delegate { LongEventHandler.RunEventFromAnotherThread(LongEventHandler.currentEvent.eventAction); }); LongEventHandler.eventThread.Start(); } else if (!LongEventHandler.eventThread.IsAlive) { bool flag = false; if (!LongEventHandler.currentEvent.levelToLoad.NullOrEmpty()) { if (LongEventHandler.levelLoadOp == null) { LongEventHandler.levelLoadOp = SceneManager.LoadSceneAsync(LongEventHandler.currentEvent.levelToLoad); } else if (LongEventHandler.levelLoadOp.isDone) { flag = true; } } else { flag = true; } if (flag) { LongEventHandler.currentEvent = null; LongEventHandler.eventThread = null; LongEventHandler.levelLoadOp = null; LongEventHandler.ExecuteToExecuteWhenFinished(); } } }