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() { 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() { pos1 }, -2, Vector3.zero); } else if (pos1 == pos2) { HeroUIManager.Instance.NotifyOnTeamPosChangeEvent(new List() { pos1 }, -2, Vector3.zero); } else { //通知刷新 team.SwapPosition(pos1, pos2); HeroUIManager.Instance.NotifyOnTeamPosChangeEvent(new List() { pos1, pos2 }, -2, Vector3.zero); } } async UniTask DelayShow() { //延迟0.5秒显示 await UniTask.Delay(TimeSpan.FromSeconds(HeroUIManager.clickFlyPosTime)); objForfly.SetActive(true); } }