using FairyGUI; using UI.FieldGuide; using System.Collections.Generic; using System; using System.Collections; using UnityEngine; namespace GFGGame { public class FieldGuideView : BaseWindow { private delegate bool GetRedCall(); private UI_FieldGuideUI _ui; private int[] _listGuideDatas = new int[5] { ConstFieldGuideId.SUIT_GUIDE, ConstFieldGuideId.CHAPTER_ITEM, ConstFieldGuideId.DRESS_UP_GUIDE, ConstFieldGuideId.CARD_GUIDE, ConstFieldGuideId.TRAVEL_GUIDE }; GetRedCall[] actions = new GetRedCall[] { RedDotDataManager.Instance.GetFieldGuideRed, null, null, null, RedDotDataManager.Instance.GetTravelGuideRed }; private bool _startInAnim; public override void Dispose() { if (_ui != null) { _ui.Dispose(); _ui = null; } base.Dispose(); } protected override void OnInit() { base.OnInit(); packageName = UI_FieldGuideUI.PACKAGE_NAME; _ui = UI_FieldGuideUI.Create(); this.viewCom = _ui.target; isfullScreen = true; _startInAnim = true; _ui.m_listGuide.itemRenderer = ListGuideItemRenderer; _ui.m_btnBack.onClick.Add(OnClickBtnBack); _ui.m_listGuide.onClickItem.Add(OnClickListGuideItem); } protected override void AddEventListener() { EventAgent.AddEventListener(ConstMessage.SUIT_GUIDE_BOX_BONUS, UpdateList); EventAgent.AddEventListener(ConstMessage.JUMP_TO_SOURCE, this.Hide); } protected override void OnShown() { base.OnShown(); _ui.m_loaBg.url = ResPathUtil.GetBgImgPath("tjbg"); _ui.m_listGuide.numItems = _listGuideDatas.Length; if (_startInAnim) { _ui.m_listGuide.scrollPane.ScrollTop(); _ui.m_In.Play(); } Timers.inst.StartCoroutine(UpdatePrgress()); } protected override void OnHide() { base.OnHide(); } protected override void RemoveEventListener() { base.RemoveEventListener(); EventAgent.RemoveEventListener(ConstMessage.SUIT_GUIDE_BOX_BONUS, UpdateList); EventAgent.RemoveEventListener(ConstMessage.JUMP_TO_SOURCE, this.Hide); } private void OnClickBtnBack() { _startInAnim = true; ViewManager.GoBackFrom(ViewName.FIELD_GUIDE_VIEW); HideAllRedDot(); } private void UpdateList() { _ui.m_listGuide.numItems = _listGuideDatas.Length; UpdateRedDot(); } private void UpdateRedDot() { int num = _ui.m_listGuide.numChildren; for (int i = 0; i < num; i++) { UI_CompGuideItem listItem = UI_CompGuideItem.Proxy(_ui.m_listGuide.GetChildAt(i)); bool red = actions[i] == null ? false : actions[i](); RedDotController.Instance.SetComRedDot(listItem.target, red, "", -46, 51); UI_CompGuideItem.ProxyEnd(); } } private void HideAllRedDot() { int num = _ui.m_listGuide.numChildren; for (int i = 0; i < num; i++) { RedDotController.Instance.SetComRedDot(_ui.m_listGuide.GetChildAt(i).asCom, false); } } private void ListGuideItemRenderer(int index, GObject item) { UI_CompGuideItem listItem = UI_CompGuideItem.Proxy(item); int id = _listGuideDatas[index]; listItem.m_loaderPic.url = "ui://FieldGuide/tujian_tup_" + id; listItem.target.data = id; if (_startInAnim) { listItem.m_Init.Play(); } UI_CompGuideItem.ProxyEnd(); } private void OnClickListGuideItem(EventContext context) { GObject listItem = context.data as GObject; int id = (int)listItem.data; switch (id) { case ConstFieldGuideId.SUIT_GUIDE: ViewManager.Show(null, new object[] { ViewName.FIELD_GUIDE_VIEW, this.viewData }); break; case ConstFieldGuideId.CHAPTER_ITEM: ViewManager.Show(null, new object[] { ViewName.FIELD_GUIDE_VIEW, this.viewData }); break; case ConstFieldGuideId.TRAVEL_GUIDE: ViewManager.Show(null, new object[] { ViewName.FIELD_GUIDE_VIEW, this.viewData }); break; case ConstFieldGuideId.DRESS_UP_GUIDE: ViewManager.Show(null, new object[] { ViewName.FIELD_GUIDE_VIEW, this.viewData }); break; case ConstFieldGuideId.CARD_GUIDE: ViewManager.Show(null, new object[] { ViewName.FIELD_GUIDE_VIEW, this.viewData }); break; } } private void GetGuideProgress(int id, out int haveCount, out int totalCount) { switch (id) { case ConstFieldGuideId.SUIT_GUIDE: DressUpMenuSuitDataManager.GetTotalProgress(out haveCount, out totalCount); break; case ConstFieldGuideId.CHAPTER_ITEM: InstanceZonesDataManager.GetTotalProgress(out haveCount, out totalCount); break; case ConstFieldGuideId.TRAVEL_GUIDE: TravelDataManager.Instance.GetTotalTravelProgress(out haveCount, out totalCount); break; case ConstFieldGuideId.CARD_GUIDE: CardDataManager.GetTotalProgress(out haveCount, out totalCount); break; case ConstFieldGuideId.DRESS_UP_GUIDE: DressUpMenuItemDataManager.GetTotalProgress(out haveCount, out totalCount); break; default: haveCount = 0; totalCount = 1; break; } if (totalCount == 0) totalCount = 1; } private IEnumerator UpdatePrgress() { int num = _ui.m_listGuide.numChildren; bool playAnim = _startInAnim; _startInAnim = false; for (int i = 0; i < num; i++) { UI_CompGuideItem listItem = UI_CompGuideItem.Proxy(_ui.m_listGuide.GetChildAt(i)); int id = (int)listItem.target.data; GetGuideProgress(id, out int haveCount, out int totalCount); decimal value = ProgressCalculate(haveCount, totalCount); listItem.m_txtProgress.text = value.ToString(); if (playAnim) { Action complete = null; // µ¹ÊýµÚ¶þ¸ö if (i == num - 1) { yield return new WaitForSeconds(0.03f); complete = UpdateRedDot; } else if(i > 0) { yield return new WaitForSeconds(0.06f); } listItem.m_In.Play(() => { complete?.Invoke(); }); } UI_CompGuideItem.ProxyEnd(); } } public static int ProgressCalculate(int haveCount, int totalCount) { float rate = haveCount * 100.0f / totalCount; int result = 0; if (rate > 0 && rate <= 1) { result = 1; } else if (rate >= 99 && rate < 100) { result = 99; } else { result = (int)Math.Round(rate); } return result; } } }