IEnumerator ExecuteActions_Coroutine(UserGuideAction[] actions) { foreach (var action in actions) { if (action == null) { continue; } if (action.IsExecutable == false) { continue; } action.Execute(); if (action.IsExecuted == false) { continue; } m_ActiveAction = action; while (action.IsExecuted == true) { action.Update(); yield return(new WaitForEndOfFrame()); } yield return(new WaitForSeconds(NEXT_EXECUTION_DELAY)); m_ActiveAction = null; } }
// GUIVIEW INTERFACE protected override void OnViewInit() { base.OnViewInit(); m_UserGuideAction = new UserGuideAction_Post(); UserGuide.RegisterAction(m_UserGuideAction); PrepareList(GuiBaseUtils.GetControl <GUIBase_List>(Layout, "MessageList")); m_MessageArea.Init(Layout.GetWidget("MessageArea"), OnMessageAction); CloudMailbox.inboxChanged += ProcessMessages; }
public static void UnregisterAction(UserGuideAction action) { if (action == null) { return; } // ensure WILL NOT create new instance here if (m_Instance == null) { return; } m_Instance.m_Actions.Remove(action); m_Instance.m_IsDirty = true; }
public static bool RegisterAction(UserGuideAction action) { if (action == null) { return(false); } // ensure WILL create new instance here if (Instance == null) { return(false); } if (m_Instance.m_Actions.Contains(action) == true) { return(false); } m_Instance.m_Actions.Add(action); m_Instance.m_IsDirty = true; return(true); }
// COROUTINES IEnumerator ExecuteActions_Coroutine() { List <UserGuideAction> banPass = new List <UserGuideAction>(); List <UserGuideAction> firstPass = new List <UserGuideAction>(); List <UserGuideAction> secondPass = new List <UserGuideAction>(); // collect actions for each pass foreach (var action in m_Actions) { if (action == null) { continue; } if (action.Priority == (int)E_UserGuidePriority.BanMessage) { banPass.Add(action); secondPass.Add(action); } else if (action.Priority < (int)E_UserGuidePriority.Default) { firstPass.Add(action); } else { secondPass.Add(action); } } // ban pass if (banPass.Count > 0) { yield return(StartCoroutine(ExecuteActions_Coroutine(banPass.ToArray()))); } // run initial pass if (InitialSequenceFinished == false) { yield return(new WaitForSeconds(FIRST_EXECUTION_DELAY)); yield return(StartCoroutine(ExecuteActions_Coroutine(firstPass.ToArray()))); InitialSequenceFinished = true; } else { yield return(new WaitForSeconds(NEXT_EXECUTION_DELAY)); } // run looped pass while (secondPass.Count > 0) { yield return(StartCoroutine(ExecuteActions_Coroutine(secondPass.ToArray()))); // reset last round result if (GuiFrontendMain.IsVisible == true) { Game.Instance.LastRoundResult = null; } // remove actions which no longer support repeated execution for (int idx = secondPass.Count - 1; idx >= 0; --idx) { UserGuideAction action = secondPass[idx]; if (action == null || action.AllowRepeatedExecution == false) { secondPass.RemoveAt(idx); } } // wait for a while before next loop yield return(new WaitForSeconds(NEXT_REPEAT_CYCLE_DELAY)); } }