ArenaDressInfoView.cs 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using FairyGUI;
  5. using UI.Arena;
  6. // using UI.DressUp;
  7. using UnityEngine;
  8. namespace GFGGame
  9. {
  10. public class ArenaDressInfoView : BaseWindow
  11. {
  12. private UI_ArenaDressInfoUI _ui;
  13. private GameObject _sceneObject;
  14. private List<LongPressGesture> _listLongPress = new List<LongPressGesture>();
  15. private List<FightData> _roleDatas; //可能是自己的搭配,也可能是对方玩家的搭配
  16. private int _themeIndex = 0;
  17. private string _openViewName = "";
  18. private List<int> _itemList = new List<int>();
  19. private string[] _tags;
  20. private int _roleType = 0; //FightRoleType
  21. public override void Dispose()
  22. {
  23. if (_sceneObject != null)
  24. {
  25. PrefabManager.Instance.Restore(_sceneObject);
  26. _sceneObject = null;
  27. }
  28. // _dressUpObj.Dispose();
  29. for (int i = 0; i < _listLongPress.Count; i++)
  30. {
  31. _listLongPress[i].Dispose();
  32. }
  33. _listLongPress.Clear();
  34. if (_ui != null)
  35. {
  36. _ui.Dispose();
  37. _ui = null;
  38. }
  39. base.Dispose();
  40. }
  41. protected override void OnInit()
  42. {
  43. base.OnInit();
  44. packageName = UI_ArenaUI.PACKAGE_NAME;
  45. _ui = UI_ArenaDressInfoUI.Create();
  46. this.viewCom = _ui.target;
  47. isfullScreen = true;
  48. isReturnView = true;
  49. _ui.m_c2.onChanged.Add(OnThemeChange);
  50. _ui.m_btnBack.onClick.Add(OnClickBtnBack);
  51. _ui.m_btnConfire.onClick.Add(OnClickConfire);
  52. _ui.m_btnDress.onClick.Add(OnBtnDressClick);
  53. _ui.m_btnRecommend.onClick.Add(OnBtnRecommendClick);
  54. _ui.m_comValueInfo.m_btnFightScoreRule.onClick.Add(OnBtnFightScoreRule);
  55. _ui.m_grhCloseComFightScore.onClick.Add(OnCloseComFightScore);
  56. _ui.m_list.itemRenderer = RenderListItem;
  57. }
  58. protected override void AddEventListener()
  59. {
  60. base.AddEventListener();
  61. }
  62. protected override void OnShown()
  63. {
  64. base.OnShown();
  65. _roleType = (int)(this.viewData as object[])[0];
  66. _themeIndex = (int)(this.viewData as object[])[1];
  67. _roleDatas = (this.viewData as object[])[2] as List<FightData>;
  68. _openViewName = (this.viewData as object[])[3].ToString();
  69. if (_sceneObject == null)
  70. {
  71. _sceneObject = PrefabManager.Instance.InstantiateSync(ResPathUtil.GetPrefabPath("SceneArenaDressUp"));
  72. MyDressUpHelper.dressUpObj.setSceneObj(_sceneObject, false, false);
  73. }
  74. _ui.m_grhCloseComFightScore.visible = false;
  75. _ui.m_c1.selectedIndex = _roleType;
  76. _ui.m_c2.selectedIndex = _themeIndex;
  77. UpdateView();
  78. Timers.inst.AddUpdate(CheckGuide);
  79. }
  80. protected override void OnHide()
  81. {
  82. base.OnHide();
  83. if (_sceneObject != null)
  84. {
  85. PrefabManager.Instance.Restore(_sceneObject);
  86. _sceneObject = null;
  87. }
  88. _ui.m_grhCloseComFightScore.visible = false;
  89. _ui.m_comValueInfo.m_c2.selectedIndex = 0;
  90. Timers.inst.Remove(CheckGuide);
  91. }
  92. protected override void RemoveEventListener()
  93. {
  94. base.RemoveEventListener();
  95. }
  96. private void OnClickBtnBack()
  97. {
  98. //ViewManager.GoBackFrom(typeof(ArenaDressInfoView).FullName); //返回竞技场主界面
  99. this.Hide();
  100. if (_roleType == FightRoleType.FieldWork)
  101. {
  102. ViewManager.Show<FieldWorkLevelInfoView>(new object[] { FieldWorkDataManager.Instance.currentLevelID });
  103. }
  104. //this.OnHide();
  105. //ViewManager.Show<ArenaView>(null, new object[] { typeof(MainUIView).FullName, this.viewData });
  106. //if (!string.IsNullOrEmpty(_openViewName))
  107. //{
  108. // ViewManager.Show(_openViewName); //打开来源界面:如历史记录、排行榜
  109. //}
  110. }
  111. private void OnClickConfire()
  112. {
  113. ViewManager.GoBackFrom(typeof(ArenaDressInfoView).FullName);
  114. if (_roleType == FightRoleType.FieldWork)
  115. {
  116. ViewManager.Show<FieldWorkLevelInfoView>(new object[] { FieldWorkDataManager.Instance.currentLevelID });
  117. }
  118. }
  119. private void OnThemeChange()
  120. {
  121. _themeIndex = _ui.m_c2.selectedIndex;
  122. if (_roleType == FightRoleType.MINE)
  123. {
  124. ArenaDataManager.Instance.SelectThemeIndex = _themeIndex;
  125. }
  126. else if(_roleType == FightRoleType.FieldWork)
  127. {
  128. FieldWorkDataManager.Instance.SelectThemeIndex = _themeIndex;
  129. }
  130. UpdateView();
  131. }
  132. private void OnBtnFightScoreRule()
  133. {
  134. _ui.m_grhCloseComFightScore.visible = true;
  135. }
  136. private void OnCloseComFightScore()
  137. {
  138. _ui.m_comValueInfo.m_c2.selectedIndex = 0;
  139. _ui.m_grhCloseComFightScore.visible = false;
  140. }
  141. private void OnBtnDressClick()
  142. {
  143. if(_roleType != 2)
  144. {
  145. ViewManager.Show<ArenaDressUpFightView>();
  146. }
  147. else
  148. {
  149. ViewManager.Show<FieldWorkDressFightView>();
  150. }
  151. }
  152. private async void OnBtnRecommendClick()
  153. {
  154. //标记,本次推荐已经穿戴过的词牌,防止重复。
  155. var wearCardIds = new List<int>();
  156. if (_roleType == FightRoleType.MINE)
  157. {
  158. for (int i = 0; i < ArenaDataManager.Instance.ThemeList.Count; i++)
  159. {
  160. int scoreType = ArenaDataManager.Instance.ThemeList[i];
  161. FightData roleData = ArenaDataManager.Instance.DressupList[i];
  162. roleData.scoreType = scoreType;
  163. roleData.itemList = ArenaDataManager.Instance.GetRecommentItemList(scoreType, roleData.tags);
  164. roleData.cardId =
  165. ArenaDataManager.Instance.GetRecommentCardId(scoreType, roleData.itemList, wearCardIds);
  166. ArenaDataManager.Instance.SetMineFightAttr(roleData, scoreType);
  167. ScoreSystemData.Instance.SetEquipScoresWithPartId(roleData);
  168. _roleDatas = ArenaDataManager.Instance.DressupList;
  169. List<long> fightScoreDatas = ArenaDataManager.Instance.GetFightScoreList(_roleDatas);
  170. bool result = await ArenaSproxy.ReqChangeArenaDressup(i, roleData.cardId, roleData.itemList, fightScoreDatas);
  171. if (!result)
  172. {
  173. PromptController.Instance.ShowFloatTextPrompt("保存失败");
  174. return;
  175. }
  176. }
  177. }
  178. else if (_roleType == FightRoleType.FieldWork)
  179. {
  180. for (int i = 0; i < FieldWorkDataManager.Instance.ThemeList.Count; i++)
  181. {
  182. int scoreType = FieldWorkDataManager.Instance.ThemeList[i];
  183. FightData roleData = FieldWorkDataManager.Instance.DressupList[i];
  184. roleData.scoreType = scoreType;
  185. roleData.itemList = ArenaDataManager.Instance.GetFieldRecommentItemList(scoreType, roleData.tags);
  186. roleData.cardId =
  187. ArenaDataManager.Instance.GetRecommentCardId(scoreType, roleData.itemList, wearCardIds);
  188. ArenaDataManager.Instance.SetMineFightAttr(roleData, scoreType);
  189. ScoreSystemData.Instance.SetEquipScoresWithPartId(roleData);
  190. _roleDatas = FieldWorkDataManager.Instance.DressupList;
  191. List<long> fightScoreDatas = ArenaDataManager.Instance.GetFightScoreList(_roleDatas);
  192. bool result = await FieldWorkSproxy.ReqChangeFieldWorkDressup();
  193. if (!result)
  194. {
  195. PromptController.Instance.ShowFloatTextPrompt("保存失败");
  196. return;
  197. }
  198. }
  199. }
  200. wearCardIds.Clear();
  201. PromptController.Instance.ShowFloatTextPrompt("保存成功");
  202. UpdateView();
  203. }
  204. private void UpdateView()
  205. {
  206. // _itemList = _roleDatas[_themeIndex].itemList;
  207. _tags = _roleDatas[_themeIndex].tags;
  208. UpdateCardInfo(_roleDatas[_themeIndex].cardId);
  209. if (InstanceZonesDataManager.FightScene == ConstInstanceZonesType.Arena)
  210. {
  211. _ui.m_c4.selectedIndex = 0;
  212. ArenaViewManager.Instance.UpdateValue(_ui.m_comValueInfo.target, _themeIndex, _roleDatas);
  213. }
  214. else
  215. {
  216. _ui.m_c4.selectedIndex = 1;
  217. FieldWorkDataManager.Instance.UpdateValue(_ui.m_comFieldValueInfo.target, _themeIndex, _roleDatas);
  218. for (int i = 0; i < FieldWorkDataManager.Instance.ThemeList.Count; i++)
  219. {
  220. int scoreType = FieldWorkDataManager.Instance.ThemeList[i];
  221. FightData roleData = FieldWorkDataManager.Instance.DressupList[i];
  222. ArenaDataManager.Instance.SetMineFightAttr(roleData, scoreType);
  223. ScoreSystemData.Instance.SetEquipScoresWithPartId(roleData);
  224. }
  225. }
  226. MyDressUpHelper.dressUpObj.PutOnItemList(_roleDatas[_themeIndex].itemList);
  227. _itemList.Clear();
  228. for (int i = 0; i < _roleDatas[_themeIndex].itemList.Count; i++)
  229. {
  230. int itemId = _roleDatas[_themeIndex].itemList[i];
  231. if (itemId == ConstItemID.DEFULT_FA_XING
  232. || itemId == ConstItemID.DEFULT_LIAN_YI_QUN
  233. || itemId == ConstItemID.DEFULT_NEI_DA
  234. || itemId == ConstItemID.DEFULT_XIA_ZHUANG) continue;
  235. _itemList.Add(itemId);
  236. }
  237. _ui.m_list.numItems = _itemList.Count;
  238. }
  239. private void UpdateCardInfo(int cardId)
  240. {
  241. if (cardId == 0)
  242. {
  243. _ui.m_comCard.m_c1.selectedIndex = 0;
  244. return;
  245. }
  246. _ui.m_comCard.m_c1.selectedIndex = 1;
  247. ItemCfg itemCfg = ItemCfgArray.Instance.GetCfg(cardId);
  248. _ui.m_comCard.m_txtCardName.text = itemCfg.name;
  249. _ui.m_comCard.m_comCard.m_loaCard.url = ResPathUtil.GetCardIconPath(itemCfg.res);
  250. if (InstanceZonesDataManager.FightScene == ConstInstanceZonesType.Arena)
  251. {
  252. _ui.m_comCard.m_loaScore.url = ResPathUtil.GetScorePath(ArenaDataManager.Instance.ThemeList[_themeIndex]);
  253. }
  254. else
  255. {
  256. _ui.m_comCard.m_loaScore.url = ResPathUtil.GetScorePath(FieldWorkDataManager.Instance.ThemeList[_themeIndex]);
  257. }
  258. RarityIconController.UpdateRarityIcon(_ui.m_comCard.m_loaRarity, cardId, false);
  259. }
  260. private void RenderListItem(int index, GObject obj)
  261. {
  262. UI_ListPartsItem item = UI_ListPartsItem.Proxy(obj);
  263. item.m_iconSelected.visible = true;
  264. ItemCfg itemCfg = ItemCfgArray.Instance.GetCfg(_itemList[index]);
  265. item.m_txtTitle.text = itemCfg.name;
  266. if (InstanceZonesDataManager.FightScene == ConstInstanceZonesType.Arena)
  267. {
  268. item.m_ScoreType.url = ResPathUtil.GetScorePath(ArenaDataManager.Instance.ThemeList[_themeIndex]);
  269. }
  270. else
  271. {
  272. item.m_ScoreType.url = ResPathUtil.GetScorePath(FieldWorkDataManager.Instance.ThemeList[_themeIndex]);
  273. }
  274. item.m_icon.url = ResPathUtil.GetIconPath(itemCfg.res, "png");
  275. item.m_txtScore.text = _roleDatas[_themeIndex].itemScoreDic[_itemList[index]].ToString();
  276. RarityIconController.UpdateRarityIcon(item.m_rarity, _itemList[index], false);
  277. if (item.target.data == null)
  278. {
  279. LongPressGesture longPressGesture = new LongPressGesture(item.target);
  280. longPressGesture.once = true;
  281. longPressGesture.onAction.Add(OnLongPress);
  282. _listLongPress.Add(longPressGesture);
  283. }
  284. item.target.data = _itemList[index];
  285. UI_ListPartsItem.ProxyEnd();
  286. }
  287. private void OnLongPress(EventContext context)
  288. {
  289. LongPressGesture gesture = (LongPressGesture)context.sender;
  290. int itemId = (int)gesture.host.data;
  291. GoodsItemTipsController.ShowItemTips(itemId);
  292. }
  293. private void CheckGuide(object param)
  294. {
  295. if (GuideDataManager.IsGuideFinish(ConstGuideId.ARENA_OPEN) <= 0
  296. ||(GuideDataManager.IsGuideFinish(ConstGuideId.FIELD) <= 0 && InstanceZonesDataManager.FightScene == ConstInstanceZonesType.FieldWork && InstanceZonesDataManager.CheckLevelPass(FieldWorkDataManager.Instance.guideLevelID)))
  297. {
  298. UpdateToCheckGuide(null);
  299. }
  300. else
  301. {
  302. Timers.inst.Remove(CheckGuide);
  303. }
  304. }
  305. protected override void UpdateToCheckGuide(object param)
  306. {
  307. if (!ViewManager.CheckIsTopView(this.viewCom)) return;
  308. GuideController.TryGuide(_ui.m_btnRecommend, ConstGuideId.ARENA_OPEN, 6, "");
  309. GuideController.TryGuide(_ui.m_btnBack, ConstGuideId.ARENA_OPEN, 7, "搭配好啦,挑个对手比拼吧~");
  310. if((GuideDataManager.IsGuideFinish(ConstGuideId.FIELD) <= 0 && InstanceZonesDataManager.FightScene == ConstInstanceZonesType.FieldWork))
  311. {
  312. GuideController.TryGuide(_ui.m_btnDress, ConstGuideId.FIELD, 6, "三套战斗方案可自由搭配且在同一关卡中服装可重复使用,让我们前往搭配吧!");
  313. GuideController.TryGuide(_ui.m_btnRecommend, ConstGuideId.FIELD, 12, "也可点击【推荐搭配】按钮快速搭配三套方案(同一个关卡中服装可重复使用)!");
  314. GuideController.TryGuide(_ui.m_btnBack, ConstGuideId.FIELD, 13, "让我们前往开启挑战吧!");
  315. }
  316. }
  317. protected override void TryCompleteGuide()
  318. {
  319. base.TryCompleteGuide();
  320. GuideController.TryCompleteGuideIndex(ConstGuideId.ARENA_OPEN, 7);
  321. }
  322. }
  323. }