SuitGuideView.cs 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297
  1. using FairyGUI;
  2. using UI.FieldGuide;
  3. using UI.CommonGame;
  4. using System.Collections.Generic;
  5. using UI.ClothingSynthetic;
  6. using UnityEngine;
  7. using System.Collections;
  8. using cfg.GfgCfg;
  9. namespace GFGGame
  10. {
  11. public class SuitGuideView : BaseWindow
  12. {
  13. private UI_SuitGuideUI _ui;
  14. private Dictionary<int, List<int>> _menuTypeAllDataDic;
  15. private List<UI_SuitTypeItem> _suitTypeItems;
  16. public override void Dispose()
  17. {
  18. if (_ui != null)
  19. {
  20. _ui.Dispose();
  21. _ui = null;
  22. }
  23. base.Dispose();
  24. }
  25. protected override void OnInit()
  26. {
  27. base.OnInit();
  28. packageName = UI_SuitGuideUI.PACKAGE_NAME;
  29. _ui = UI_SuitGuideUI.Create();
  30. this.viewCom = _ui.target;
  31. isfullScreen = true;
  32. isReturnView = true;
  33. _ui.m_loaBg.url = ResPathUtil.GetBgImgPath("tjbg");
  34. _ui.m_suitTypeList.itemRenderer = RenderListSuitType;
  35. _ui.m_suitTypeList.numItems = _ui.m_suitTypeList.numItems;
  36. _ui.m_btnBack.onClick.Add(OnClickBtnBack);
  37. _ui.m_suitType2Items.itemRenderer = RenderListSuitType2Item;
  38. _ui.m_suitType2Items.onClickItem.Add(OnClickListSuitType2Item);
  39. _ui.m_suitTypeList.onClick.Add(OnClickListSuitType);
  40. InitSuitGuideType();
  41. }
  42. protected override void AddEventListener()
  43. {
  44. base.AddEventListener();
  45. EventAgent.AddEventListener(ConstMessage.JUMP_TO_SOURCE, this.Hide);
  46. }
  47. protected override void OnShown()
  48. {
  49. base.OnShown();
  50. if (backRefresh)
  51. {
  52. // 让滑块直接置于最左边
  53. _ui.m_suitTypeItems.target.scrollPane.ScrollTop();
  54. _ui.m_t0.Play();
  55. UpdateItemsByType(1);
  56. }
  57. UpdateListSuitTypeRedDots();
  58. Timers.inst.StartCoroutine(UpdateRedDot());
  59. }
  60. protected override void OnHide()
  61. {
  62. base.OnHide();
  63. }
  64. protected override void RemoveEventListener()
  65. {
  66. base.RemoveEventListener();
  67. EventAgent.RemoveEventListener(ConstMessage.JUMP_TO_SOURCE, this.Hide);
  68. }
  69. /// <summary>
  70. /// 初始化上方选择菜单,同步按钮按下和普通状态的文本
  71. /// </summary>
  72. /// <param name="index"></param>
  73. /// <param name="item"></param>
  74. private void RenderListSuitType(int index, GObject item)
  75. {
  76. UI_Button6 button6 = UI_Button6.Proxy(item);
  77. button6.m_title1.text = button6.target.title;
  78. UI_Button6.ProxyEnd();
  79. }
  80. private void OnClickListSuitType(EventContext eventContext)
  81. {
  82. UpdateItemsByType(_ui.m_c1.selectedIndex + 1);
  83. Timers.inst.StartCoroutine(UpdateRedDot());
  84. }
  85. /// <summary>
  86. /// 更新选择菜单的红点
  87. /// </summary>
  88. private void UpdateListSuitTypeRedDots()
  89. {
  90. for (int j = 0; j < _ui.m_suitTypeList.numItems; j++)
  91. {
  92. RedDotController.Instance.SetComRedDot(_ui.m_suitTypeList.GetChildAt(j).asCom, false);
  93. for (int i = 0; i < _menuTypeAllDataDic[j + 1].Count; i++)
  94. {
  95. bool red = RedDotDataManager.Instance.GetSuitGuideRed(_menuTypeAllDataDic[j + 1][i]);
  96. if (red)
  97. {
  98. RedDotController.Instance.SetComRedDot(_ui.m_suitTypeList.GetChildAt(j).asCom, red, "", -65, 16);
  99. break;
  100. }
  101. }
  102. }
  103. }
  104. private void UpdateItemsByType(int type)
  105. {
  106. _ui.m_c1.SetSelectedIndex(type - 1);
  107. switch (type)
  108. {
  109. case 1:
  110. UpdateType1Progress();
  111. break;
  112. case 2:
  113. _ui.m_suitType2Items.numItems = _menuTypeAllDataDic[type].Count;
  114. break;
  115. }
  116. }
  117. private void InitSuitGuideType()
  118. {
  119. _suitTypeItems = new List<UI_SuitTypeItem>();
  120. _menuTypeAllDataDic = new Dictionary<int, List<int>>();
  121. List<SuitGuideMenuCfg> menuCfgs = CommonDataManager.Tables.TblSuitGuideMenuCfg.DataList;
  122. foreach (SuitGuideMenuCfg s in menuCfgs)
  123. {
  124. if (!_menuTypeAllDataDic.ContainsKey(s.SuitGuideMenuType))
  125. {
  126. _menuTypeAllDataDic.Add(s.SuitGuideMenuType, new List<int>());
  127. }
  128. _menuTypeAllDataDic[s.SuitGuideMenuType].Add(s.Id);
  129. }
  130. InitSuitType1Item(_ui.m_suitTypeItems.m_item1, _menuTypeAllDataDic[1][0]);
  131. InitSuitType1Item(_ui.m_suitTypeItems.m_item2, _menuTypeAllDataDic[1][1]);
  132. InitSuitType1Item(_ui.m_suitTypeItems.m_item3, _menuTypeAllDataDic[1][2]);
  133. InitSuitType1Item(_ui.m_suitTypeItems.m_item4, _menuTypeAllDataDic[1][3]);
  134. InitSuitType1Item(_ui.m_suitTypeItems.m_item5, _menuTypeAllDataDic[1][4]);
  135. InitSuitType1Item(_ui.m_suitTypeItems.m_item6, _menuTypeAllDataDic[1][5]);
  136. InitSuitType1Item(_ui.m_suitTypeItems.m_item7, _menuTypeAllDataDic[1][6]);
  137. }
  138. /// <summary>
  139. /// 初始化种类1
  140. /// </summary>
  141. /// <param name="item"></param>
  142. /// <param name="typeId"></param>
  143. private void InitSuitType1Item(UI_SuitTypeItem item, int typeId)
  144. {
  145. SuitGuideMenuCfg cfg = CommonDataManager.Tables.TblSuitGuideMenuCfg.GetOrDefault(typeId);
  146. item.m_title.text = cfg.Name;
  147. item.target.data = typeId;
  148. item.m_icon.url = string.Format("ui://FieldGuide/tj_tz_{0}", typeId);
  149. item.target.onClick.Add(() =>
  150. {
  151. ViewManager.Show<SuitGuideListView>(typeId, false, false);
  152. });
  153. _suitTypeItems.Add(item);
  154. }
  155. /// <summary>
  156. /// 由于type1页面未使用列表,所以需要循环更新进度
  157. /// </summary>
  158. private void UpdateType1Progress()
  159. {
  160. for (int i = 0; i < _suitTypeItems.Count; i++)
  161. {
  162. int _suitTypeId = (int)_suitTypeItems[i].target.data;
  163. int haveCount = SuitUtil.GetSuitIdList(false, true, _suitTypeId, 0).Count;
  164. int totalCount = SuitUtil.GetSuitIdList(true, true, _suitTypeId, 0).Count;
  165. _suitTypeItems[i].m_progress.target.value = haveCount;
  166. _suitTypeItems[i].m_progress.target.max = totalCount;
  167. _suitTypeItems[i].m_progress.m_num.SetVar("value", haveCount.ToString()).SetVar("max", totalCount.ToString()).FlushVars();
  168. _suitTypeItems[i].m_progress.m_rate.SetVar("rate", FieldGuideView.ProgressCalculate(haveCount, totalCount).ToString()).FlushVars();
  169. }
  170. }
  171. /// <summary>
  172. /// 初始化种类2
  173. /// </summary>
  174. /// <param name="index"></param>
  175. /// <param name="gObject"></param>
  176. private void RenderListSuitType2Item(int index, GObject gObject)
  177. {
  178. UI_SuitStoryItem item = UI_SuitStoryItem.Proxy(gObject);
  179. SuitGuideMenuCfg cfg = CommonDataManager.Tables.TblSuitGuideMenuCfg.GetOrDefault(_menuTypeAllDataDic[_ui.m_c1.selectedIndex + 1][index]);
  180. item.m_title.text = cfg.Name;
  181. int haveCount = SuitUtil.GetSuitIdList(false, true, _menuTypeAllDataDic[_ui.m_c1.selectedIndex + 1][index], 0).Count;
  182. int totalCount = SuitUtil.GetSuitIdList(true, true, _menuTypeAllDataDic[_ui.m_c1.selectedIndex + 1][index], 0).Count;
  183. item.m_progressNum.SetVar("value", haveCount.ToString()).SetVar("max", totalCount.ToString()).FlushVars();
  184. item.m_icon.url = ResPathUtil.GetChapterGuideIconPath(string.Format("gushi{0}",(index+1)));
  185. UI_SuitStoryItem.ProxyEnd();
  186. }
  187. private void OnClickListSuitType2Item(EventContext eventContext)
  188. {
  189. GObject obj = eventContext.data as GObject;
  190. int index = _ui.m_suitType2Items.GetChildIndex(obj);
  191. ViewManager.Show<SuitGuideDetailView>(_menuTypeAllDataDic[_ui.m_c1.selectedIndex + 1][index], false, false);
  192. }
  193. private void OnClickBtnBack()
  194. {
  195. Hide();
  196. }
  197. private IEnumerator UpdateRedDot()
  198. {
  199. int selectedIndex = _ui.m_c1.selectedIndex + 1;
  200. // Hide all existed red dots
  201. HideSelectedPageRedDot();
  202. Transition t = null;
  203. switch (selectedIndex)
  204. {
  205. case 1:
  206. t = _ui.m_suitTypeItems.m_In;
  207. break;
  208. case 2:
  209. UI_SuitStoryItem listItem = UI_SuitStoryItem.Proxy(_ui.m_suitType2Items.GetChildAt(_ui.m_suitType2Items.numItems - 1));
  210. t = listItem.m_In;
  211. UI_SuitStoryItem.ProxyEnd();
  212. break;
  213. }
  214. // Wait anim auto play
  215. yield return null;
  216. // Wait anim finished
  217. while (t.playing)
  218. {
  219. yield return null;
  220. }
  221. // Show red dots
  222. int num;
  223. switch (selectedIndex)
  224. {
  225. case 1:
  226. num = _suitTypeItems.Count;
  227. for (int i = 0; i < num; i++)
  228. {
  229. bool red = RedDotDataManager.Instance.GetSuitGuideRed(_menuTypeAllDataDic[selectedIndex][i]);
  230. RedDotController.Instance.SetComRedDot(_suitTypeItems[i].target, red, "", -254, 130);
  231. }
  232. break;
  233. case 2:
  234. num = _ui.m_suitType2Items.numItems;
  235. for (int i = 0; i < num; i++)
  236. {
  237. bool red = RedDotDataManager.Instance.GetSuitGuideRed(_menuTypeAllDataDic[selectedIndex][i]);
  238. RedDotController.Instance.SetComRedDot(_ui.m_suitType2Items.GetChildAt(i).asCom, red, "", -852, 45);
  239. }
  240. break;
  241. }
  242. }
  243. private void HideSelectedPageRedDot()
  244. {
  245. int num;
  246. int selectedIndex = _ui.m_c1.selectedIndex + 1;
  247. switch (selectedIndex)
  248. {
  249. case 1:
  250. num = _suitTypeItems.Count;
  251. for (int i = 0; i < num; i++)
  252. {
  253. RedDotController.Instance.SetComRedDot(_suitTypeItems[i].target.asCom, false);
  254. }
  255. break;
  256. case 2:
  257. num = _ui.m_suitType2Items.numItems;
  258. for (int i = 0; i < num; i++)
  259. {
  260. RedDotController.Instance.SetComRedDot(_ui.m_suitType2Items.GetChildAt(i).asCom, false);
  261. }
  262. break;
  263. }
  264. }
  265. }
  266. }