HeroDetailPanel.cs 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626
  1. using System.Collections.Generic;
  2. using Animancer;
  3. using Animancer.TransitionLibraries;
  4. using Common.Utility.CombatEvent;
  5. using Core.Language;
  6. using Core.Utility;
  7. using Excel2Json;
  8. using Fort23.Core;
  9. using Fort23.UTool;
  10. using GameLogic.Bag;
  11. using GameLogic.Hero;
  12. using TMPro;
  13. using UnityEngine;
  14. using UnityEngine.AI;
  15. using UnityEngine.UI;
  16. using Utility;
  17. namespace Fort23.Mono
  18. {
  19. [UIBinding(prefab = "HeroDetailPanel" )]
  20. public partial class HeroDetailPanel : UIPanel
  21. {
  22. private HeroInfo heroInfo;
  23. private void Init()
  24. {
  25. // InitHeroDetailPanel();
  26. }
  27. protected override void AddEvent()
  28. {
  29. }
  30. protected override void DelEvent()
  31. {
  32. }
  33. public override void AddButtonEvent()
  34. {
  35. btnBack.onClick.AddListener(OnClickClose);
  36. btnUpgrade.onClick.AddListener(OnClickUpgrade);
  37. btnPromote.onClick.AddListener(OnClickPromote);
  38. btnSkill.onClick.AddListener(OnClickSkill);
  39. btnPrev.onClick.AddListener(OnclickPrevHero);
  40. btnNext.onClick.AddListener(OnclickNextHero);
  41. btnSpecailEquip.onClick.AddListener(delegate
  42. {
  43. // TipMessagePanel.OpenTipMessagePanel("专属装备(敬请期待)",
  44. // new Vector2(btnSpecailEquip.transform.position.x, btnSpecailEquip.transform.position.y + 0.5f));
  45. TipMessagePanel.OpenTipMessagePanel(LanguageManager.Instance.Text(101),
  46. new Vector2(btnSpecailEquip.transform.position.x, btnSpecailEquip.transform.position.y + 0.5f));
  47. });
  48. btnCommonEquip.onClick.AddListener(OnclickCommonEquip);
  49. }
  50. private void OnclickCommonEquip()
  51. {
  52. // throw new System.NotImplementedException();
  53. ModelPos.gameObject.SetActive(false);
  54. HeroUITools.OpenSpecificProfessionEquipmentPanel(heroInfo.modelConfig.profession, delegate
  55. {
  56. ModelPos.gameObject.SetActive(true);
  57. modelAnimComponent.Play(modelIdleClip);
  58. });
  59. }
  60. private void OnclickPrevHero()
  61. {
  62. SwitchHero(false);
  63. }
  64. private void OnclickNextHero()
  65. {
  66. SwitchHero(true);
  67. }
  68. public void SwitchHero(bool isNext)
  69. {
  70. if (sourcePanel == UIPanelName.None)
  71. {
  72. LogTool.Error("打开英雄界面的上个一个UIPanel未知");
  73. return;
  74. }
  75. if (isOpenPre)
  76. {
  77. ExitPowerUpPre(curPreTyp, upPre.Stars1);
  78. }
  79. GObjectPool.Instance.Recycle(modelObj);
  80. if (sourcePanel == UIPanelName.BagPanel)
  81. {
  82. HeroBagPanel heroBagPanel = UIManager.Instance.GetComponent<HeroBagPanel>();
  83. WidgetHero widgetHero = HeroUITools.
  84. GetCloseHero(heroBagPanel.widgetHeroes, heroWidget, isNext);
  85. if (widgetHero != null)
  86. {
  87. InitHeroDetailPanel(widgetHero, sourcePanel);
  88. }
  89. }
  90. if (sourcePanel == UIPanelName.MainPanel)
  91. {
  92. MainUIPanel mainUIPanel = UIManager.Instance.GetComponent<MainUIPanel>();
  93. WidgetHero widgetHero = HeroUITools.
  94. GetCloseHero(mainUIPanel.widgetHeroes, heroWidget, isNext);
  95. if (widgetHero != null)
  96. {
  97. InitHeroDetailPanel(widgetHero, sourcePanel);
  98. }
  99. }
  100. }
  101. private bool IsShowArrow(bool isNext)
  102. {
  103. if (sourcePanel == UIPanelName.None)
  104. {
  105. return false;
  106. }
  107. if (sourcePanel == UIPanelName.BagPanel)
  108. {
  109. HeroBagPanel heroBagPanel = UIManager.Instance.GetComponent<HeroBagPanel>();
  110. WidgetHero widgetHero = HeroUITools.
  111. GetCloseHero(heroBagPanel.widgetHeroes, heroWidget, isNext);
  112. return widgetHero != null;
  113. }
  114. if (sourcePanel == UIPanelName.MainPanel)
  115. {
  116. MainUIPanel mainUIPanel = UIManager.Instance.GetComponent<MainUIPanel>();
  117. WidgetHero widgetHero = HeroUITools.
  118. GetCloseHero(mainUIPanel.widgetHeroes, heroWidget, isNext);
  119. return widgetHero != null;
  120. }
  121. return false;
  122. }
  123. public SkillUIComponent skillUIComponent;
  124. private async void OnClickSkill()
  125. {
  126. // skillUIComponent = await UIManager.Instance.CreateGCompo nent<SkillUIComponent>(null, poolName:"SkillUIComponent",
  127. // root:transform);
  128. skillUIComponent = await UIManager.Instance.
  129. CreateGComponentForObject<SkillUIComponent>(skillUI, null, isInstance : false, root:transform);
  130. skillUIComponent.InitUI(heroInfo);
  131. skillUIComponent.transform.sizeDelta = transform.sizeDelta;
  132. }
  133. private async void OnClickPromote()
  134. {
  135. if (PlayerManager.Instance.gameConstantConfig.maxStar <= heroInfo.star.Value)
  136. {
  137. LogTool.Log("已到达最高星级:" + PlayerManager.Instance.gameConstantConfig.maxStar);
  138. return;
  139. }
  140. if (isOpenPre)
  141. {
  142. HeroUpResultType upResultType = PlayerManager.Instance.heroController.PromoteHeroLogic(heroInfo);
  143. if (upResultType == HeroUpResultType.Success)
  144. {
  145. UpdateAttributeUI();
  146. HeroUITools.SetStarShow(stars, heroInfo.star.Value);
  147. ExitPowerUpPre(curPreTyp, upPre.Stars2);
  148. }
  149. else
  150. {
  151. TipMessagePanel.OpenTipMessagePanel(LanguageManager.Instance.Text(103), Vector2.zero);
  152. }
  153. // if (PlayerManager.Instance.heroController.CanPromote(heroInfo) == HeroUpResultType.Success)
  154. // {
  155. // heroInfo.Promote();
  156. // PlayerManager.Instance.SaveHeroData(heroInfo);
  157. // UpdateAttributeUI();
  158. // HeroUITools.SetStarShow(stars, heroInfo.star.Value);
  159. // PlayerManager.Instance.heroController.SendEvent(HeroUpType.Promote, heroInfo, HeroUpResultType.Success);
  160. // ExitPowerUpPre(curPreTyp, upPre.Stars2);
  161. // }
  162. // else
  163. // {
  164. // TipMessagePanel.OpenTipMessagePanel("资源不足", Vector2.zero);
  165. // }
  166. }
  167. else
  168. {
  169. await UIManager.Instance.CreateGComponentForObject<HeroPowerUpPre>(objHeroPowerUpPre, OpenPreUICallback, root: rtBottom);
  170. }
  171. }
  172. private async void OpenPreUICallback(HeroPowerUpPre pre)
  173. {
  174. upPre = pre;
  175. pre.OpenPromotePre(heroInfo);
  176. EnterPowerUpPre(2);
  177. }
  178. /// <summary>
  179. /// 是否打开了升级/升星的预览界面
  180. /// </summary>
  181. public bool isOpenPre;
  182. private byte curPreTyp;
  183. private async void OnClickUpgrade()
  184. {
  185. HeroUpResultType resultType = PlayerManager.Instance.heroController.UpgradeHeroLogic(heroInfo, isOpenPre);
  186. if (resultType == HeroUpResultType.Success)
  187. {
  188. UpdateAttributeUI();
  189. }
  190. else if (resultType == HeroUpResultType.PlayUpgradeEftFirst)
  191. {
  192. //TODO 要播放特效.
  193. ExitPowerUpPre(1);
  194. UpdateAttributeUI();
  195. }
  196. else if(resultType == HeroUpResultType.NeedOpenPreUI)
  197. {
  198. upPre = await UIManager.Instance.CreateGComponentForObject<HeroPowerUpPre>(objHeroPowerUpPre,
  199. delegate(HeroPowerUpPre pre)
  200. {
  201. EnterPowerUpPre(1);
  202. pre.OpenUpgradePre(heroInfo);
  203. }, root: rtBottom);
  204. btnUpgrade.enabled = false;
  205. await TimerComponent.Instance.WaitAsync(500);
  206. btnUpgrade.enabled = true;
  207. }
  208. }
  209. private List<SimpleMove> simpleMoves = new List<SimpleMove>();
  210. private async void FlyInEft()
  211. {
  212. simpleMoves.Clear();
  213. upPre.Stars1Obj.SetActive(false);
  214. upPre.Stars2Obj.SetActive(false);
  215. await TimerComponent.Instance.WaitAsync(200);
  216. for (int i = 0; i < stars.Count; i++)
  217. {
  218. GameObject targetGo = upPre.Stars1[i] as GameObject;
  219. GameObject startGo = stars[i] as GameObject;
  220. RectTransform targetRT = targetGo.GetComponent<RectTransform>();
  221. RectTransform startRT = startGo.GetComponent<RectTransform>();
  222. SimpleMove sm = new SimpleMove(targetRT, startRT.position, targetRT.position);
  223. simpleMoves.Add(sm);
  224. }
  225. //把现在的星星隐藏了.
  226. StarsObj.SetActive(false);
  227. upPre.Stars1Obj.SetActive(true);
  228. int j = 0;
  229. float delayTime = 0;
  230. foreach (SimpleMove move in simpleMoves)
  231. {
  232. delayTime = (j++ * 0.05f);
  233. move.Start(delayTime);
  234. }
  235. await TimerComponent.Instance.WaitAsync(Mathf.RoundToInt((delayTime + 0.3f) * 1000));
  236. upPre.Stars2Obj.SetActive(true);
  237. }
  238. private async void FlyOutEft(List<object> startList)
  239. {
  240. int i = 0;
  241. // LayoutRebuilder.MarkLayoutForRebuild(StarsLayout.GetComponent<RectTransform>());
  242. // LayoutUtility.Layout(stars, LayoutType.Horizontal);
  243. simpleMoves.Clear();
  244. foreach (var star in stars)
  245. {
  246. GameObject targetGo = star as GameObject;
  247. GameObject startGo = startList[i++] as GameObject;
  248. //目标
  249. RectTransform targetRT = targetGo.GetComponent<RectTransform>();
  250. //起始
  251. RectTransform startRT = startGo.GetComponent<RectTransform>();
  252. SimpleMove sm = new SimpleMove(targetRT, startRT.position, targetRT.position);
  253. simpleMoves.Add(sm);
  254. }
  255. StarsObj.SetActive(true);
  256. int j = 0;
  257. float delayTime = 0f;
  258. foreach (SimpleMove move in simpleMoves)
  259. {
  260. delayTime = (j++ * 0.05f);
  261. move.Start(delayTime);
  262. }
  263. await TimerComponent.Instance.WaitAsync(Mathf.RoundToInt((delayTime + 0.3f) * 1000));
  264. // upPre.Stars2Layout.gameObject.SetActive(false);
  265. }
  266. /// <summary>
  267. /// 进入 升级/升星预览界面
  268. /// </summary>
  269. /// <param name="preTyp">1升级;2 升星</param>
  270. private void EnterPowerUpPre(byte preTyp)
  271. {
  272. isOpenPre = true;
  273. curPreTyp = preTyp;
  274. btns1.SetActive(false);
  275. if (preTyp == 1)
  276. {
  277. btnPromote.gameObject.SetActive(false);
  278. RectTransform rt = btnUpgrade.GetComponent<RectTransform>();
  279. rt.sizeDelta = new Vector2(510, rt.sizeDelta.y);
  280. rt.localPosition = new Vector3(47, rt.localPosition.y, rt.localPosition.z);
  281. }
  282. else
  283. {
  284. btnUpgrade.gameObject.SetActive(false);
  285. RectTransform rt = btnPromote.GetComponent<RectTransform>();
  286. rt.sizeDelta = new Vector2(510, rt.sizeDelta.y);
  287. rt.localPosition = new Vector3(47, rt.localPosition.y, rt.localPosition.z);
  288. FlyInEft();
  289. if (costHeroCount > curHeroCount)
  290. {
  291. btnPromote.GetComponent<MyImage>().icon_name = "btn_l_Gray";
  292. }
  293. else
  294. {
  295. btnPromote.GetComponent<MyImage>().icon_name = "btn_l_Green";
  296. }
  297. }
  298. }
  299. /// <summary>
  300. /// 离开 升级/升星预览界面
  301. /// </summary>
  302. /// <param name="preTyp">1升级;2 升星</param>
  303. private void ExitPowerUpPre(byte preTyp, List<object> list = null)
  304. {
  305. isOpenPre = false;
  306. btns1.SetActive(true);
  307. // upPre.Stars1Layout.enabled = true;
  308. // upPre.Stars2Layout.enabled = true;
  309. if (preTyp == 1)
  310. {
  311. btnPromote.gameObject.SetActive(true);
  312. RectTransform rt = btnUpgrade.GetComponent<RectTransform>();
  313. rt.sizeDelta = new Vector2(400, rt.sizeDelta.y);
  314. rt.localPosition = new Vector3(163f, rt.localPosition.y, rt.localPosition.z);
  315. }
  316. else
  317. {
  318. FlyOutEft(list);
  319. btnUpgrade.gameObject.SetActive(true);
  320. RectTransform rt = btnPromote.GetComponent<RectTransform>();
  321. rt.sizeDelta = new Vector2(180, rt.sizeDelta.y);
  322. rt.localPosition = new Vector3(-135f, rt.localPosition.y, rt.localPosition.z);
  323. btnPromote.GetComponent<MyImage>().icon_name = "btn_l_Green";
  324. }
  325. objHeroPowerUpPre.SetActive(false);
  326. }
  327. private void OnClickClose()
  328. {
  329. if (isOpenPre)
  330. {
  331. ExitPowerUpPre(curPreTyp, upPre.Stars1);
  332. }
  333. else
  334. {
  335. GObjectPool.Instance.Recycle(modelObj);
  336. UIManager.Instance.HideUIUIPanel(this);
  337. EventManager.Instance.Dispatch(CustomEventType.OnCloseHeroPanel, new SimpleEventData(){ intData = heroInfo.modelID});
  338. }
  339. }
  340. public WidgetHero heroWidget;
  341. public UIPanelName sourcePanel;
  342. private GameObjectPool modelObj;
  343. private AnimancerComponent modelAnimComponent;
  344. private TransitionAsset modelIdleClip;
  345. HeroPowerUpPre upPre;
  346. public async void InitHeroDetailPanel(WidgetHero heroWidget, UIPanelName sourcePanel = UIPanelName.None)
  347. {
  348. this.heroInfo = heroWidget.heroInfo;
  349. this.heroWidget = heroWidget;
  350. this.sourcePanel = sourcePanel;
  351. // TxtGuildPanel.CloseTxtGuildPanel();
  352. // if (HeroUITools.IsLvUpShowGuild(heroInfo))
  353. // {
  354. // TxtGuildPanel.OpenTxtGuildPanel("点击这里, 升级", new Vector2(btnUpgrade.transform.position.x ,
  355. // btnUpgrade.transform.position.y + .2f));
  356. // }
  357. skillUI.SetActive(false);
  358. btns1.SetActive(true);
  359. objHeroPowerUpPre.SetActive(false);
  360. //是否显示左右切换按钮
  361. btnNext.gameObject.SetActive(IsShowArrow(true));
  362. btnPrev.gameObject.SetActive(IsShowArrow(false));
  363. iconZhiYe.icon_name = heroInfo.GetZyIconName();
  364. iconCommonEquip.icon_name = heroInfo.GetZyIconName();
  365. heroName.text = LanguageManager.Instance.Text(heroInfo.modelConfig.name);
  366. heroShards.icon_name = heroInfo.modelConfig.headicon;
  367. // LayoutRebuilder.MarkLayoutForRebuild(StarsLayout.transform.GetComponent<RectTransform>());
  368. // StarsLayout.gameObject.SetActive(true);
  369. HeroUITools.SetStarShow(stars, heroInfo.star.Value);
  370. // StarsLayout.enabled = true;
  371. // StarsLayout.SetLayoutHorizontal();
  372. // await TimerComponent.Instance.WaitAsync(1);
  373. // StarsLayout.enabled = false;
  374. // await TimerComponent.Instance.WaitAsync(50);
  375. // StarsLayout.GetComponent<LayoutGroup>().s
  376. // StarsLayout.GetComponent<LayoutGroup>().SetDirty();
  377. // LayoutRebuilder.ForceRebuildLayoutImmediate(StarsLayout.GetComponent<RectTransform>());
  378. // GameObjectPool poolInterface =
  379. // await GObjectPool.Instance.FetchAsync<GameObjectPool>(heroInfo.modelConfig.model + ".prefab", null);
  380. modelObj = await GObjectPool.Instance.FetchAsync<GameObjectPool>(heroInfo.modelConfig.model + ".prefab",
  381. delegate(GameObjectPool pool)
  382. {
  383. pool.own.GetComponent<NavMeshAgent>().enabled = false;
  384. pool.own.transform.parent = ModelPos;
  385. pool.own.transform.localEulerAngles = new Vector3(0, 180, 0);
  386. pool.own.transform.localPosition = new Vector3(0, 0.2f, 0);
  387. pool.own.transform.localScale = Vector3.one;
  388. modelAnimComponent = pool.own.GetComponent<AnimancerComponent>();
  389. int max = modelAnimComponent.Transitions.Library.Count;
  390. for (int i = 0; i < max; i++)
  391. {
  392. if (modelAnimComponent.Transitions.Library.TryGetTransition(i,
  393. out TransitionModifierGroup transition))
  394. {
  395. modelIdleClip = transition.Transition as TransitionAsset;
  396. if (modelIdleClip != null && modelIdleClip.name == "idle")
  397. {
  398. modelAnimComponent.Play(modelIdleClip);
  399. break;
  400. }
  401. }
  402. }
  403. HeroUITools.ChangeLayerRecursively(pool.own, LayerMask.NameToLayer("UI"));
  404. });
  405. switch (heroInfo.modelConfig.rarity)
  406. {
  407. case 1:
  408. heroRarity.text = LanguageManager.Instance.Text(32);
  409. break;
  410. case 2:
  411. heroRarity.text = LanguageManager.Instance.Text(31);
  412. break;
  413. case 3:
  414. heroRarity.text = LanguageManager.Instance.Text(30);
  415. break;
  416. default:
  417. LogTool.Error("找不到hero的稀有度:" + heroInfo.modelConfig.ID);
  418. break;
  419. }
  420. AnimateNumber animTxtHp = new AnimateNumber(targetTextPro:txtHP);
  421. AnimateNumber animTxtAtk = new AnimateNumber(targetTextPro:txtATK);
  422. AnimateNumber animTxtDef = new AnimateNumber(targetTextPro:txtDEF);
  423. AnimateNumber animTxtShanBi = new AnimateNumber(targetTextPro:txtSHANBI);
  424. animateNumberList = new List<AnimateNumber>();
  425. animateNumberList.Add(animTxtHp);
  426. animateNumberList.Add(animTxtAtk);
  427. animateNumberList.Add(animTxtDef);
  428. animateNumberList.Add(animTxtShanBi);
  429. UpdateAttributeUI(true);
  430. }
  431. private List<AnimateNumber> animateNumberList;
  432. private long curHeroCount;
  433. private long costHeroCount;
  434. public async void UpdateAttributeUI(bool isInit = false)
  435. {
  436. StarsObj.SetActive(true);
  437. PlayEft(isInit, txtHP, heroInfo.hp.Value.ToStringEx(), 0);
  438. PlayEft(isInit, txtATK, heroInfo.attack.Value.ToStringEx(), 1);
  439. PlayEft(isInit, txtDEF, heroInfo.defense.Value.ToStringEx(), 2);
  440. PlayEft(isInit, txtSHANBI, heroInfo.shanbi.Value.ToStringEx(), 3);
  441. txtLv.text = heroInfo.level.Value.ToStringEx();
  442. txtExpGain.text = heroInfo.expGain.Value.ToStringEx();
  443. string redColorStar = "";
  444. string redColorEnd = "";
  445. long curExp = BagController.Instance.GetItemInfo(GlobalParam.Item_HeroExp_ID).count.Value;
  446. long costExp = heroInfo.powerUpConfig.levelUpExp;
  447. if (costExp > curExp)
  448. {
  449. redColorStar = "<color=#FF4C4C>";
  450. redColorEnd = "</color>";
  451. btnUpgrade.GetComponent<MyImage>().icon_name = "btn_l_Gray";
  452. }
  453. else
  454. {
  455. redColorStar = "";
  456. redColorEnd = "";
  457. btnUpgrade.GetComponent<MyImage>().icon_name = "btn_l_Green";
  458. }
  459. txtUpgrade.text = redColorStar + curExp.ToStringEx() + redColorEnd + "/" + costExp.ToStringEx();
  460. curHeroCount = BagController.Instance.GetItemInfo(heroInfo.modelConfig.itemID).count.Value;
  461. costHeroCount = heroInfo.promoteConfig.costCount;
  462. if (costHeroCount > curHeroCount)
  463. {
  464. redColorStar = "<color=#FF4C4C>";
  465. redColorEnd = "</color>";
  466. }
  467. else
  468. {
  469. redColorStar = "";
  470. redColorEnd = "";
  471. }
  472. if (PlayerManager.Instance.gameConstantConfig.maxStar <= heroInfo.star.Value)
  473. {
  474. txtPromote.text = "MAX";
  475. }
  476. else
  477. {
  478. txtPromote.text = redColorStar + curHeroCount + redColorEnd + "/" + costHeroCount;
  479. }
  480. // LogTool.Log(PlayerManager.Instance.heroController.CanUpgrade(heroInfo));
  481. // LogTool.Log(go1.activeSelf);
  482. if (PlayerManager.Instance.heroController.CanUpgrade(heroInfo) == HeroUpResultType.MainLevelNotEnough)
  483. {
  484. go1.SetActive(false);
  485. txtUpLimit.gameObject.SetActive(true);
  486. txtUpLimit.text = LanguageManager.Instance.Text(63);
  487. btnUpgrade.GetComponent<MyImage>().icon_name = "btn_l_Gray";
  488. }
  489. else
  490. {
  491. go1.SetActive(true);
  492. txtUpLimit.gameObject.SetActive(false);
  493. // btnUpgrade.GetComponent<MyImage>().icon_name = "btn_l_Green";
  494. }
  495. }
  496. /// <summary>
  497. /// 当基础属性改变时,做一些表现
  498. /// </summary>
  499. /// <param name="isInit">是否为首次(初始), 首次不做动画处理</param>
  500. /// <param name="txtOld">当前(旧的)</param>
  501. /// <param name="txtNew"></param>
  502. /// <param name="eftRoot"></param>
  503. private async void PlayEft(bool isInit, TextMeshProUGUI txtOld, string txtNew, int idx)
  504. {
  505. if (txtOld.text != txtNew)
  506. {
  507. long old = long.Parse(txtOld.text);
  508. long newV = long.Parse(txtNew);
  509. txtOld.text = txtNew;
  510. if (!isInit)
  511. {
  512. animateNumberList[idx].Start(old, newV);
  513. await UIManager.Instance.CreateGComponent(delegate(HeroUpTxtEft heroUpTxtEft)
  514. {
  515. heroUpTxtEft.txtEft.text = "+" + (newV - old).ToStringEx();
  516. },
  517. poolName: "HeroUpTxtEft", root: eftNumPos[idx] as RectTransform);
  518. }
  519. }
  520. }
  521. }
  522. }