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); }
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); }
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); } }
private void hideXpHud() { state = XPHudState.closing; currentXpDisplay.XPAnimator.SetBool("isShown", value: false); }
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); }