| using System; | 
| using System.Linq; | 
| using Cysharp.Threading.Tasks; | 
| using UnityEngine; | 
| using UnityEngine.UI; | 
| using System.Collections.Generic; | 
|   | 
| //布阵中的 武将角色 | 
| public class HeroScenePosCell : MonoBehaviour | 
| { | 
|     [SerializeField] Button heroBtn; | 
|     [SerializeField] Text jobTip; | 
|     [SerializeField] Text posTip; | 
|     [SerializeField] Image countryImg; | 
|     [SerializeField] Text nameText; | 
|     [SerializeField] Text lvText; | 
|     [SerializeField] UIHeroController heroModel; | 
|     [SerializeField] Image posCircleImg; | 
|     [SerializeField] UIAlphaTween suggestForm; | 
|     [SerializeField] DragItem dragObj; | 
|     [SerializeField] Transform objForfly;  //点击飞入的时候的显隐控制 | 
|   | 
|   | 
|     public void Display(string guid, int index, bool isFly = false, bool showSuggest = false) | 
|     { | 
|         var hero = HeroManager.Instance.GetHero(guid); | 
|         this.transform.localScale = Vector3.one; | 
|   | 
|         lvText.text = Language.Get("L1099", hero.heroLevel); | 
|         var heroConfig = hero.heroConfig; | 
|         countryImg.SetSprite(HeroUIManager.Instance.GetCountryIconName(heroConfig.Country)); | 
|         heroModel.Create(heroConfig.SkinIDList[hero.SkinIndex], heroConfig.UIScale); | 
|   | 
|         nameText.text = hero.breakLevel == 0 ? heroConfig.Name : Language.Get("herocardbreaklv", heroConfig.Name, hero.breakLevel); | 
|         posCircleImg.SetSprite("heroposcircle" + heroConfig.Quality); | 
|   | 
|         //不是推荐位则提示 | 
|         //  if (heroConfig.Position == 1 && TeamConst.TeamPos2Array.Contains(index) || | 
|         //     heroConfig.Position == 2 && TeamConst.TeamPos1Array.Contains(index)) | 
|         if (showSuggest) | 
|         { | 
|             suggestForm.SetActive(true); | 
|             jobTip.text = HeroUIManager.Instance.GetJobName(heroConfig.Class); | 
|             posTip.text = Language.Get("heroAtkDistType" + heroConfig.Position); | 
|         } | 
|         else | 
|         { | 
|             suggestForm.SetActive(false); | 
|         } | 
|   | 
|         dragObj.pos = index; | 
|         dragObj.onEndDragEvent -= SwitchPos; | 
|         dragObj.onEndDragEvent += SwitchPos; | 
|         dragObj.canvas.sortingLayerID =  dragObj.parentCanvas.sortingLayerID; | 
|         dragObj.canvas.sortingOrder = dragObj.parentCanvas.sortingOrder + index + 1; | 
|   | 
|         heroBtn.AddListener(() => | 
|         { | 
|             var team = TeamManager.Instance.GetTeam(HeroUIManager.Instance.selectTeamType); | 
|             team.RemoveHero(index); | 
|             //通知刷新(下阵) | 
|             HeroUIManager.Instance.NotifyOnTeamPosChangeEvent(new List<int>() { index }, -1, Vector3.zero); | 
|   | 
|         }); | 
|   | 
|         if (isFly) | 
|         { | 
|             //点击飞入 延迟显示 | 
|             objForfly.SetActive(false); | 
|             DelayShow(); | 
|         } | 
|         else | 
|         { | 
|             objForfly.SetActive(true); | 
|         } | 
|     } | 
|   | 
|     void SwitchPos(int pos1, int pos2) | 
|     { | 
|         Debug.Log("交换位置:" + pos1 + "   " + pos2); | 
|         var team = TeamManager.Instance.GetTeam(HeroUIManager.Instance.selectTeamType); | 
|         if (pos2 == -1) | 
|         { | 
|             //下阵 | 
|             team.RemoveHero(pos1); | 
|             HeroUIManager.Instance.NotifyOnTeamPosChangeEvent(new List<int>() { pos1 }, -2, Vector3.zero); | 
|         } | 
|         else if (pos1 == pos2) | 
|         {  | 
|             HeroUIManager.Instance.NotifyOnTeamPosChangeEvent(new List<int>() { pos1 }, -2, Vector3.zero); | 
|         } | 
|         else | 
|         { | 
|             //通知刷新 | 
|             team.SwapPosition(pos1, pos2); | 
|             HeroUIManager.Instance.NotifyOnTeamPosChangeEvent(new List<int>() { pos1, pos2 }, -2, Vector3.zero); | 
|         } | 
|     } | 
|   | 
|     async UniTask DelayShow() | 
|     { | 
|         //延迟0.5秒显示 | 
|         await UniTask.Delay(TimeSpan.FromSeconds(HeroUIManager.clickFlyPosTime)); | 
|         objForfly.SetActive(true); | 
|     } | 
| } |