Пример #1
0
    private IEnumerator updateXpDisplay()
    {
        ProgressionService progressionService = Service.Get <ProgressionService>();

        Service.Get <EventDispatcher>().DispatchEvent(default(HudEvents.XPAdditionStart));
        state = XPHudState.addingXP;
        int   xpDelta = progressionService.MascotLevelXpDelta(currentMascotName, currentMascotLevel);
        int   mascotLevelWithOffset = ProgressionService.GetMascotLevelFromXP(currentMascotLevel);
        float additionDelay         = 2f / ((float)(targetMacotLevel - currentMascotLevel) / (float)xpDelta);
        bool  leveledUp             = false;

        while (currentMascotLevel < targetMacotLevel)
        {
            if (mascotLevelWithOffset != ProgressionService.GetMascotLevelFromXP(currentMascotLevel))
            {
                mascotLevelWithOffset = ProgressionService.GetMascotLevelFromXP(currentMascotLevel);
                ShowLevelUp(Service.Get <ProgressionService>().Level);
                leveledUp = true;
                xpDelta   = progressionService.MascotLevelXpDelta(currentMascotName, currentMascotLevel);
            }
            float percent = ProgressionService.GetMascotLevelPercentFromXP(currentMascotLevel);
            currentXpDisplay.LevelProgressImage.fillAmount = percent;
            yield return(new WaitForSeconds(additionDelay));

            currentMascotLevel += xpDelta;
        }
        if (!leveledUp && mascotLevelWithOffset != ProgressionService.GetMascotLevelFromXP(targetMacotLevel))
        {
            ShowLevelUp(Service.Get <ProgressionService>().Level);
        }
        currentXpDisplay.DisableParticleSystems();
        state = XPHudState.waitingToClose;
        Service.Get <EventDispatcher>().DispatchEvent(default(HudEvents.XPAdditionStop));
        Invoke("hideXpHud", HIDE_DELAY_TIME);
    }
Пример #2
0
 public void Start()
 {
     dataEntityCollection = Service.Get <CPDataEntityCollection>();
     state        = XPHudState.closed;
     pendingXP    = new Queue();
     suppressedXP = new Queue();
     XPLayoutElement.preferredHeight = 0f;
     checkPendingLevelUp();
     Service.Get <EventDispatcher>().AddListener <RewardEvents.AddXP>(onAddXP);
     Service.Get <EventDispatcher>().AddListener <RewardEvents.ShowSuppressedAddXP>(onShowSuppressedAddXP);
     Service.Get <EventDispatcher>().AddListener <RewardEvents.SuppressLevelUpPopup>(onSuppressLevelUpPopup);
     Service.Get <EventDispatcher>().AddListener <RewardEvents.UnsuppressLevelUpPopup>(onUnsuppressLevelUpPopup);
 }
Пример #3
0
    public void OnXPOutroAnimationComplete()
    {
        state = XPHudState.closed;
        XPHudItem xPHudItem = currentXpDisplay;

        xPHudItem.IntroAnimationCompleteAction = (System.Action)Delegate.Remove(xPHudItem.IntroAnimationCompleteAction, new System.Action(OnXPIntroAnimationComplete));
        XPHudItem xPHudItem2 = currentXpDisplay;

        xPHudItem2.OutroAnimationCompleteAction = (System.Action)Delegate.Remove(xPHudItem2.OutroAnimationCompleteAction, new System.Action(OnXPOutroAnimationComplete));
        currentMascotName = null;
        UnityEngine.Object.Destroy(currentXpDisplay.gameObject);
        XPLayoutElement.preferredHeight = 0f;
        if (pendingXP.Count > 0)
        {
            onAddXP((RewardEvents.AddXP)pendingXP.Dequeue());
        }
        if (this.HudClosed != null)
        {
            this.HudClosed(base.gameObject);
        }
    }
Пример #4
0
 private void hideXpHud()
 {
     state = XPHudState.closing;
     currentXpDisplay.XPAnimator.SetBool("isShown", value: false);
 }
Пример #5
0
    private bool onAddXP(RewardEvents.AddXP evt)
    {
        if (!evt.ShowReward)
        {
            suppressedXP.Enqueue(evt);
        }
        else
        {
            switch (state)
            {
            case XPHudState.closed:
                currentMascotName = evt.MascotName;
                if (!Service.Get <ProgressionService>().IsMascotMaxLevel(currentMascotName, evt.PreviousLevel))
                {
                    Mascot mascot = Service.Get <MascotService>().GetMascot(currentMascotName);
                    if (mascot != null)
                    {
                        Service.Get <EventDispatcher>().DispatchEvent(new PlayerScoreEvents.ShowPlayerScore(dataEntityCollection.LocalPlayerSessionId, $"+{evt.XPAdded}", PlayerScoreEvents.ParticleType.XP, mascot.Definition.XPTintColor));
                    }
                    CoroutineRunner.Start(loadXPHudPrefab(mascotXPContentKey, evt.MascotName), this, "XPHud.loadXPHudPrefab");
                    currentMascotLevel = evt.PreviousLevel;
                    targetMacotLevel   = evt.CurrentLevel;
                    state = XPHudState.opening;
                }
                break;

            case XPHudState.opening:
            case XPHudState.addingXP:
                if (currentMascotName == evt.MascotName)
                {
                    targetMacotLevel = Math.Max(targetMacotLevel, evt.CurrentLevel);
                }
                else
                {
                    pendingXP.Enqueue(evt);
                }
                break;

            case XPHudState.waitingToClose:
                if (currentMascotName == evt.MascotName)
                {
                    CancelInvoke();
                    targetMacotLevel = Math.Max(targetMacotLevel, evt.CurrentLevel);
                    CoroutineRunner.Start(updateXpDisplay(), this, "updateXpDisplay");
                }
                else
                {
                    pendingXP.Enqueue(evt);
                }
                break;

            case XPHudState.closing:
                pendingXP.Enqueue(evt);
                break;
            }
            if (ProgressionService.GetMascotLevelFromXP(targetMacotLevel) != ProgressionService.GetMascotLevelFromXP(currentMascotLevel))
            {
                disableUI();
            }
        }
        return(false);
    }