HeroDetailPanel.cs 23 KB

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