using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using utils; using Transform = UnityEngine.Transform; public class teamSettingPanel : MonoBehaviour { /// /// 编队页面顶父级对象,用于控制显示隐藏等操作 /// [SerializeField] public GameObject teamSettingPanelObj; /// /// ui层编队显示,包含五个组件 /// [SerializeField] public GameObject[] teamElementsObj; /// /// team用角色数据库总表 /// [SerializeField] public TeamCharacterList teamCharacterList; /// /// 等级贴图表 /// [SerializeField] public TeamCharacterLevelData teamCharacterLevelData; /// /// 左侧角色选择页组件 /// [SerializeField] public GameObject teamCharacterPrefab; [SerializeField] public RectTransform teamCharacterViewContent; private TeamManager teamManager; public static teamSettingPanel Instance{get;private set;} void Awake() { if (Instance == null) { Instance = this; } else { Destroy(gameObject); } } void Start() { teamManager = TeamManager.Instance; if(teamManager!=null) { teamManager.OnSelectedCharacterChanged += updateTeamCharacterSelectedStatus; } updateTeamSettingElements(); updateSelectableCharacterViewList(); // StartCoroutine(UpdateTeamSettingAfterOneFrame()); // StartCoroutine(UpdateSelectableCharacterAfterOneFrame()); } void OnDestroy() { if (teamManager != null) { teamManager.OnSelectedCharacterChanged -= updateTeamCharacterSelectedStatus; } } // public void openTeamSettingPanel() // { // //根据获取的队伍信息处理ui组件 // //可在此补充ui动画信息 // StartCoroutine(UpdateTeamSettingAfterOneFrame()); // // updateTeamSettingElements(); // StartCoroutine(UpdateSelectableCharacterAfterOneFrame()); // teamSettingPanelObj.SetActive(true); // // getSelectableCharacterList(); // } // public void closeTeamSettingPanel() // { // teamSettingPanelObj.SetActive(false); // } private IEnumerator UpdateTeamSettingAfterOneFrame() { yield return null; updateTeamSettingElements(); foreach (var obj in teamElementsObj) { if (obj != null) { var t = obj.GetComponent(); if (t != null && t.charcterImg != null) { LayoutRebuilder.ForceRebuildLayoutImmediate(t.charcterImg.rectTransform); } } } } private IEnumerator UpdateSelectableCharacterAfterOneFrame() { yield return null; updateSelectableCharacterViewList(); RectTransform rt = teamCharacterViewContent.GetComponent(); LayoutRebuilder.ForceRebuildLayoutImmediate(rt); } public TeamCharacterDataInfo getCharacterViewInfo(int characterID) { if (teamCharacterList == null) { Debug.LogError("teamCharacterList 缺失"); return null; } foreach (TeamCharacterDataInfo tcdi in teamCharacterList.characters) { if(tcdi.CharacterID==characterID) { return tcdi; } } Debug.LogWarning($"未找到{characterID}对应的角色信息");; return null; } public Sprite getLevelSprite(string level) { if(level==null) { Debug.LogWarning("level为空,无法获取对应等级贴图"); return null; } switch (level) { case "S": return teamCharacterLevelData.LevelSSprite; case "A": return teamCharacterLevelData.LevelASprite; case "B": return teamCharacterLevelData.LevelBSprite; case "C": return teamCharacterLevelData.LevelCSprite; default: Debug.LogWarning($"未找到对应等级贴图,当前等级为:{level}"); return null; } } public void updateTeamSettingElements() { TeamSetting currentSelectedTeam = teamManager.getCurrentSelectedTeam(); List currentTeam = currentSelectedTeam.teamIdList; for (int i = 0; i < teamElementsObj.Length && i < currentTeam.Count; i++) { if(teamElementsObj[i]!=null && currentTeam[i]!=null) { teamCharacterView t = teamElementsObj[i].GetComponent(); if(t!=null) { t.characterID= currentTeam[i].characterId; TeamCharacterDataInfo tcdi = getCharacterViewInfo(t.characterID); t.charcterImg.sprite = tcdi.CharacterTeamSprite; t.charcterImg.color=new Color(t.charcterImg.color.r,t.charcterImg.color.g,t.charcterImg.color.b,255f); t.levelIcon.sprite = getLevelSprite(currentTeam[i].currentBoundaryLevel); t.levelIcon.color=new Color(t.levelIcon.color.r,t.levelIcon.color.g,t.levelIcon.color.b,255f); if(currentSelectedTeam.LeaderId==currentTeam[i].characterId) { t.isLeader.SetActive(true); t.notLeader.SetActive(false); } t.skillName.text = tcdi.CharacterSkillName; } } } } /// /// 获取当前可选入队伍的角色列表,并显示在界面上 /// public void updateSelectableCharacterViewList() { foreach (Transform child in teamCharacterViewContent.transform) { Destroy(child.gameObject); } List selectAbleCharacters = teamManager.SelectableCharacterList; foreach (CharacterView c in selectAbleCharacters) //id and level { GameObject characterObj = Instantiate(teamCharacterPrefab, teamCharacterViewContent.transform); CharacterCardView ccv = characterObj.GetComponent(); TeamCharacterDataInfo tcdi = getCharacterViewInfo(c.characterId); if (ccv != null&& tcdi!=null) { ccv.characterID = tcdi.CharacterID; ccv.characterImage.sprite =tcdi.CharacterCardSprite; ccv.levelIcon.sprite = getLevelSprite(c.currentBoundaryLevel); ccv.occupationIcon.sprite = tcdi.CharacterRoleSprite; } } } /// /// 将当前角色向下交换位置 /// public void downChangeCharcterIndex() { } public void upChangeCharcterIndex() { } /// /// 用于保证team内对象的选中状态一致 /// public void updateTeamCharacterSelectedStatus() { int currentSelectedCharacter = teamManager.currentSelectedCharacter; Debug.Log(currentSelectedCharacter+" "+$"{teamElementsObj.Length}"); for (int i = 0; i < teamElementsObj.Length; i++) { if (i != currentSelectedCharacter) { teamCharacterView teamCharacterView = teamElementsObj[i].GetComponent(); if(teamCharacterView!=null) { teamCharacterView.SetUnSelected(); } } } } /// /// 若玩家更换了team成员或调整了team成员顺序,则使用此方法更新view /// public void updateTeamStatus() { } }