//-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Friday, December 07, 2018 //-------------------------------------------------------- using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; namespace Snxxz.UI { [XLua.Hotfix] public class FairyFeastTransmitShowWin : Window { GameObjectPoolManager.GameObjectPool m_PopUpNumPool; List m_PopExpQueue = new List(); List m_PopUpBehaviours = new List(); float lastPopUpTime = 0f; [SerializeField] Transform m_PopUpExpPoint; [SerializeField] SmoothSlider m_Slider; [SerializeField] Text m_Progress; [SerializeField] float m_PopUpInterval = 0.1f; [SerializeField] HeadUpName m_HeadUpHero; [SerializeField] HeadUpName m_HeadUpPlayer; FairyFeastModel model { get { return ModelCenter.Instance.GetModel(); } } RoleParticularModel roleParticularModel { get { return ModelCenter.Instance.GetModel(); } } int progressDisplay = 0; #region Built-in protected override void BindController() { } protected override void AddListeners() { } protected override void OnPreOpen() { FairyFeastTransmitShow.Instance.popUpExpEvent += PopUpExpEvent; m_Slider.ResetValue(0f); DisplayHeadUpName(); } protected override void OnAfterOpen() { m_HeadUpHero.SyncPosition(true); m_HeadUpPlayer.SyncPosition(true); } protected override void OnPreClose() { FairyFeastTransmitShow.Instance.popUpExpEvent -= PopUpExpEvent; for (int i = 0; i < m_PopUpBehaviours.Count; i++) { ReleaseTransmitPopExp(m_PopUpBehaviours[i].gameObject); } m_PopUpBehaviours.Clear(); m_PopExpQueue.Clear(); } protected override void OnAfterClose() { } protected override void LateUpdate() { var progress = Mathf.Clamp01(FairyFeastTransmitShow.Instance.progress); m_Slider.value = progress; if ((int)(progress * 100) != progressDisplay) { progressDisplay = (int)(progress * 100); m_Progress.text = StringUtility.Contact(Language.Get("FeastTransmiting"), progressDisplay, "%"); } if (m_PopExpQueue.Count > 0) { if (Time.time - lastPopUpTime >= m_PopUpInterval) { lastPopUpTime = Time.time; var exp = m_PopExpQueue[0]; m_PopExpQueue.RemoveAt(0); PopUpExp(exp); } } } #endregion private void DisplayHeadUpName() { m_HeadUpHero.pattern = HeadUpName.Pattern.Hero; m_HeadUpHero.camera = FairyFeastTransmitShow.Instance.showCamera; var hero = FairyFeastTransmitShow.Instance.hero; if (hero != null) { m_HeadUpHero.target = hero.MP_Name; } m_HeadUpHero.offset = new Vector3(0, 0, 0); var realmLevel = PlayerDatas.Instance.baseData.realmLevel; var name = UIHelper.ServerStringTrim(PlayerDatas.Instance.baseData.PlayerName); var familyName = UIHelper.ServerStringTrim(PlayerDatas.Instance.baseData.FamilyName); m_HeadUpHero.SetPlayerInfo(new HeadUpName.PlayerInfo() { realm = realmLevel, name = name, alliance = familyName, }); m_HeadUpHero.SyncPosition(true); m_HeadUpPlayer.pattern = HeadUpName.Pattern.Player; m_HeadUpPlayer.camera = FairyFeastTransmitShow.Instance.showCamera; var player = FairyFeastTransmitShow.Instance.player; if (player != null) { m_HeadUpPlayer.target = player.MP_Name; } m_HeadUpPlayer.offset = new Vector3(0, 0, 0); var viewPlayerData = roleParticularModel.GetViewPlayerData((int)model.transmitPlayer); if (viewPlayerData != null) { realmLevel = (byte)viewPlayerData.rolePropData.RealmLV; name = UIHelper.ServerStringTrim(viewPlayerData.rolePropData.Name); familyName = UIHelper.ServerStringTrim(viewPlayerData.rolePropData.FamilyName); m_HeadUpPlayer.SetPlayerInfo(new HeadUpName.PlayerInfo() { realm = realmLevel, name = name, alliance = familyName, }); } } private void PopUpExpEvent(ulong exp) { m_PopExpQueue.Add(exp); } private void PopUpExp(ulong exp) { var go = RequireTransmitPopExp(); if (go) { var popUpExp = go.GetComponent(); popUpExp.transform.SetParent(m_PopUpExpPoint); popUpExp.transform.localPosition = Vector3.zero; popUpExp.transform.localEulerAngles = Vector3.zero; popUpExp.transform.localScale = Vector3.one; popUpExp.gameObject.SetActive(true); popUpExp.DisplayExp(exp); popUpExp.onDie -= OnTransmitPopUpExpDie; popUpExp.onDie += OnTransmitPopUpExpDie; m_PopUpBehaviours.Add(popUpExp); } } private void OnTransmitPopUpExpDie(FairyTransmitPopUpExp popUpExp) { if (m_PopUpBehaviours.Contains(popUpExp)) { m_PopUpBehaviours.Remove(popUpExp); } ReleaseTransmitPopExp(popUpExp.gameObject); } GameObject RequireTransmitPopExp() { if (m_PopUpNumPool == null) { var prefab = UILoader.LoadPrefab("PopUpNum_FairyFeast"); if (prefab) { m_PopUpNumPool = GameObjectPoolManager.Instance.RequestPool(prefab); } } if (m_PopUpNumPool != null) { return m_PopUpNumPool.Request(); } return null; } void ReleaseTransmitPopExp(GameObject prefab) { prefab.gameObject.SetActive(false); if (m_PopUpNumPool != null) { m_PopUpNumPool.Release(prefab); } } } }