Пример #1
0
    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;
        }
    }
Пример #2
0
    // 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;
    }
Пример #3
0
    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;
    }
Пример #4
0
    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);
    }
Пример #5
0
    // 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));
        }
    }