//-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Thursday, September 14, 2017 //-------------------------------------------------------- using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using Snxxz.UI; public class ExperienceGetBehaviour { public static void Init() { PlayerMainDate.Event_Experience += OnGetNewExperience; } public static void UnInit() { PlayerMainDate.Event_Experience -= OnGetNewExperience; } static void OnGetNewExperience(int _source, int _billionsExperience, int _unitExperience) { if (!WindowCenter.Instance.CheckOpen()) { WindowCenter.Instance.Open(true); } ExperienceGetWin win = WindowCenter.Instance.Get(); win.OnGetNewExperience(_source, _billionsExperience * (long)100000000 + _unitExperience); } } namespace Snxxz.UI { public class ExperienceGetWin : Window { [SerializeField] Transform m_ResetPoint; float interval = 0.2f; float nextShowTime = 0f; int queueMax = 10; Queue experienceQueue = new Queue(); #region Built-in protected override void BindController() { } protected override void AddListeners() { } protected override void OnPreOpen() { } protected override void OnAfterOpen() { } protected override void OnPreClose() { experienceQueue.Clear(); ExperienceFloatPool.RecycleAll(); } protected override void OnAfterClose() { } #endregion public void OnGetNewExperience(int _source, long _experience) { if (experienceQueue.Count >= queueMax) { experienceQueue.Dequeue(); } experienceQueue.Enqueue(new Experience() { source = _source, value = _experience }); } protected override void LateUpdate() { base.LateUpdate(); if (Time.time > nextShowTime) { if (experienceQueue.Count > 0) { var exp = experienceQueue.Dequeue(); var experienceFloat = ExperienceFloatPool.Require(exp.source == 4 ? ExperienceFloat.Pattern.LongFeng : ExperienceFloat.Pattern.Normal); experienceFloat.gameObject.SetActive(true); experienceFloat.transform.SetParentEx(m_ResetPoint, Vector3.zero, Quaternion.identity, Vector3.one); experienceFloat.Begin(exp.source, exp.value); nextShowTime = Time.time + interval; } } } public struct Experience { public int source; public long value; } } }