using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using utils; using Transform = UnityEngine.Transform; public class teamSettingPanel : MonoBehaviour { /// /// Documentation text normalized. [SerializeField] public GameObject teamSettingPanelObj; /// /// Documentation text normalized. /// [SerializeField] public GameObject[] teamElementsObj; /// /// Documentation text normalized. /// [SerializeField] public TeamIndexSetterView[] teamSettingButtonStatusObj; /// /// Documentation text normalized. /// [SerializeField] public TeamCharacterList teamCharacterList; /// /// Documentation text normalized. [SerializeField] public TeamCharacterLevelData teamCharacterLevelData; /// /// Documentation text normalized. [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; teamManager.OnSelectedTeamChanged += updateTeamSettingSelectedStatus; teamManager.OnSelectedTeamChanged += updateTeamSettingElements; teamManager.OnSelectedTeamChanged += updateSelectableCharacterViewList; } updateTeamSettingElements(); updateSelectableCharacterViewList(); // StartCoroutine(UpdateTeamSettingAfterOneFrame()); // StartCoroutine(UpdateSelectableCharacterAfterOneFrame()); } void OnDestroy() { if (teamManager != null) { teamManager.OnSelectedCharacterChanged -= updateTeamCharacterSelectedStatus; teamManager.OnSelectedTeamChanged -= updateTeamSettingSelectedStatus; teamManager.OnSelectedTeamChanged -= updateTeamSettingElements; teamManager.OnSelectedTeamChanged -= updateSelectableCharacterViewList; } } /// /// Documentation text normalized. /// /// public void updateSelectedTeam(int index) { teamManager.setCurrentSelectedTeam(index); updateTeamSettingElements(); } public TeamCharacterDataInfo getCharacterViewInfo(int characterID) { if (teamCharacterList == null) { Debug.LogError("teamCharacterList is missing."); return null; } foreach (TeamCharacterDataInfo tcdi in teamCharacterList.characters) { if(tcdi.CharacterID==characterID) { return tcdi; } } Debug.LogWarning($"Character data not found for characterID={characterID}."); return null; } public Sprite getLevelSprite(string level) { if(level==null) { Debug.LogWarning("Level is null, cannot resolve level sprite."); 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($"No level sprite mapped for level '{level}'."); return null; } } /// /// Documentation text normalized. public void clearTeamSettingElements() { foreach (GameObject gameObject in teamElementsObj) { teamCharacterView t = gameObject.GetComponent(); if (t != null) { t.characterID = -1; t.charcterImg.sprite = null; t.charcterImg.color=new Color(t.charcterImg.color.r,t.charcterImg.color.g,t.charcterImg.color.b,0f); t.levelIcon.sprite = null; t.levelIcon.color=new Color(t.levelIcon.color.r,t.levelIcon.color.g,t.levelIcon.color.b,0f); t.skillName.text=""; t.isLeader.SetActive(false); t.notLeader.SetActive(true); } } } public void updateTeamSettingElements() { // defensive guards if (teamManager == null) teamManager = TeamManager.Instance; if (teamManager == null) { Debug.LogWarning("teamSettingPanel.updateTeamSettingElements: TeamManager is null. Skipping update."); clearTeamSettingElements(); return; } TeamSetting currentSelectedTeam = null; try { currentSelectedTeam = teamManager.getCurrentSelectedTeam(); } catch { currentSelectedTeam = null; } if (currentSelectedTeam == null) { clearTeamSettingElements(); return; } if (currentSelectedTeam.teamIdList == null) { clearTeamSettingElements(); return; } if (teamElementsObj == null) { Debug.LogWarning("teamSettingPanel.updateTeamSettingElements: teamElementsObj is null"); return; } List currentTeam = currentSelectedTeam.teamIdList; clearTeamSettingElements(); for (int i = 0; i < teamElementsObj.Length && i < currentTeam.Count; i++) { if (teamElementsObj[i] == null) continue; if (currentTeam[i] == null) continue; teamCharacterView t = teamElementsObj[i].GetComponent(); if (t == null) continue; t.characterID= currentTeam[i].characterId; TeamCharacterDataInfo tcdi = getCharacterViewInfo(t.characterID); if (tcdi != null) { if (t.charcterImg != null) { t.charcterImg.sprite = tcdi.CharacterTeamSprite; t.charcterImg.color=new Color(t.charcterImg.color.r,t.charcterImg.color.g,t.charcterImg.color.b,1f); } if (t.levelIcon != null) { t.levelIcon.sprite = getLevelSprite(currentTeam[i].currentBoundaryLevel); t.levelIcon.color=new Color(t.levelIcon.color.r,t.levelIcon.color.g,t.levelIcon.color.b,1f); } if (t.skillName != null) t.skillName.text = tcdi.CharacterSkillName ?? string.Empty; } else { if (t.charcterImg != null) { t.charcterImg.sprite = null; t.charcterImg.color=new Color(t.charcterImg.color.r,t.charcterImg.color.g,t.charcterImg.color.b,0f); } if (t.levelIcon != null) { t.levelIcon.sprite = null; t.levelIcon.color=new Color(t.levelIcon.color.r,t.levelIcon.color.g,t.levelIcon.color.b,0f); } if (t.skillName != null) t.skillName.text=""; } if(currentSelectedTeam.LeaderId==currentTeam[i].characterId) { if (t.isLeader != null) t.isLeader.SetActive(true); if (t.notLeader != null) t.notLeader.SetActive(false); } else { if (t.isLeader != null) t.isLeader.SetActive(false); if (t.notLeader != null) t.notLeader.SetActive(true); } } } /// /// Documentation text normalized. public void updateSelectableCharacterViewList() { foreach (Transform child in teamCharacterViewContent.transform) { Destroy(child.gameObject); } teamManager.currentSelectedCharacterCard = null; List currentTeam = teamManager.getCurrentSelectedTeam().teamIdList; List selectAbleCharacters = teamManager.SelectableCharacterList; foreach (CharacterView c in selectAbleCharacters) //id and level { if (!IsCharacterUnlocked(c != null ? c.characterId : 0)) { continue; } 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.currentBoundaryLevel= c.currentBoundaryLevel; ccv.characterImage.sprite =tcdi.CharacterCardSprite; ccv.levelIcon.sprite = getLevelSprite(c.currentBoundaryLevel); ccv.occupationIcon.sprite = tcdi.CharacterRoleSprite; } if (checkExistenceStatus(currentTeam, ccv.characterID)) { ccv.isSelected = true; ccv.characterImage.color = new Color(0.5f, 0.5f, 0.5f,1); } } } private bool IsCharacterUnlocked(int characterID) { if (characterID <= 0) { return false; } AllyHero_SO[] heroes = RuntimeResourcesCache.LoadAllAllyHeroes(); for (int i = 0; i < heroes.Length; i++) { AllyHero_SO hero = heroes[i]; if (hero != null && hero.ally_heroID == characterID) { return hero.isUnlocked; } } return false; } private bool checkExistenceStatus(List currentTeam,int characterID) { foreach (CharacterView c in currentTeam) { if (c.characterId == characterID) return true; } return false; } /// /// Documentation text normalized. public void updateTeamCharacterSelectedStatus() { int currentSelectedCharacter = teamManager.currentSelectedTeamCharacter; for (int i = 0; i < teamElementsObj.Length; i++) { if (i != currentSelectedCharacter) { teamCharacterView teamCharacterView = teamElementsObj[i].GetComponent(); if(teamCharacterView!=null) { teamCharacterView.SetUnSelected(); } } else { teamCharacterView teamCharacterView = teamElementsObj[i].GetComponent(); teamCharacterView.SetSelected(); } } } /// /// Documentation text normalized. public void rightChangeTeamSettingIndex() { int currentSelectedTeam = teamManager.currentSelectedTeam; if (currentSelectedTeam < 4) { teamManager.setCurrentSelectedTeamSetting(currentSelectedTeam + 1); } } /// /// Documentation text normalized. public void leftChangeTeamSettingIndex() { int currentSelectedTeam = teamManager.currentSelectedTeam; if(currentSelectedTeam>0) { teamManager.setCurrentSelectedTeamSetting(currentSelectedTeam - 1); } } public void updateTeamSettingSelectedStatus() { int currentSelectedTeam = teamManager.currentSelectedTeam; for(int i= 0;i