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 GameObject 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;
}
StartCoroutine(UpdateTeamSettingAfterOneFrame());
// updateTeamSettingElements();
StartCoroutine(UpdateSelectableCharacterAfterOneFrame());
}
void OnDestroy()
{
if (teamManager != null)
{
teamManager.OnSelectedCharacterChanged -= updateTeamCharacterSelectedStatus;
}
}
public void openTeamSettingPanel()
{
//根据获取的队伍信息处理ui组件
//可在此补充ui动画信息
StartCoroutine(UpdateTeamSettingAfterOneFrame());
// updateTeamSettingElements();
StartCoroutine(UpdateSelectableCharacterAfterOneFrame());
teamSettingPanelObj.SetActive(true);
// getSelectableCharacterList();
}
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();
//获取content下的所有子对象,并重新布局
// foreach (Transform child in teamCharacterViewContent.transform)
// {
// if (child != null)
// {
// var t = child.GetComponent();
// if (t != null && t.characterImage != null)
// {
// LayoutRebuilder.ForceRebuildLayoutImmediate(t.characterImage.rectTransform);
// }
// }
// }
RectTransform rt = teamCharacterViewContent.GetComponent();
LayoutRebuilder.ForceRebuildLayoutImmediate(rt);
}
public void closeTeamSettingPanel()
{
teamSettingPanelObj.SetActive(false);
}
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;
Debug.Log($"{ccv.characterID}--{ccv.characterImage.sprite.name}--{ccv.levelIcon.sprite.name}--{ccv.gameObject.name}");
}
}
}
///
/// 将当前角色向下交换位置
///
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()
{
}
}