327 lines
11 KiB
C#
327 lines
11 KiB
C#
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
using UnityEngine.UI;
|
|
using utils;
|
|
using Transform = UnityEngine.Transform;
|
|
|
|
public class teamSettingPanel : MonoBehaviour
|
|
{
|
|
/// <summary>
|
|
/// Documentation text normalized.
|
|
[SerializeField]
|
|
public GameObject teamSettingPanelObj;
|
|
/// <summary>
|
|
/// Documentation text normalized.
|
|
/// </summary>
|
|
[SerializeField]
|
|
public GameObject[] teamElementsObj;
|
|
/// <summary>
|
|
/// Documentation text normalized.
|
|
/// </summary>
|
|
[SerializeField] public TeamIndexSetterView[] teamSettingButtonStatusObj;
|
|
/// <summary>
|
|
/// Documentation text normalized.
|
|
/// </summary>
|
|
[SerializeField]
|
|
public TeamCharacterList teamCharacterList;
|
|
/// <summary>
|
|
/// Documentation text normalized.
|
|
[SerializeField]
|
|
public TeamCharacterLevelData teamCharacterLevelData;
|
|
/// <summary>
|
|
/// 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;
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// Documentation text normalized.
|
|
/// </summary>
|
|
/// <param name="index"></param>
|
|
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;
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// Documentation text normalized.
|
|
public void clearTeamSettingElements()
|
|
{
|
|
foreach (GameObject gameObject in teamElementsObj)
|
|
{
|
|
teamCharacterView t = gameObject.GetComponent<teamCharacterView>();
|
|
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<CharacterView> 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<teamCharacterView>();
|
|
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);
|
|
}
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// Documentation text normalized.
|
|
public void updateSelectableCharacterViewList()
|
|
{
|
|
foreach (Transform child in teamCharacterViewContent.transform)
|
|
{
|
|
Destroy(child.gameObject);
|
|
}
|
|
|
|
teamManager.currentSelectedCharacterCard = null;
|
|
List<CharacterView> currentTeam = teamManager.getCurrentSelectedTeam().teamIdList;
|
|
List<CharacterView> selectAbleCharacters = teamManager.SelectableCharacterList;
|
|
foreach (CharacterView c in selectAbleCharacters) //id and level
|
|
{
|
|
GameObject characterObj = Instantiate(teamCharacterPrefab, teamCharacterViewContent.transform);
|
|
CharacterCardView ccv = characterObj.GetComponent<CharacterCardView>();
|
|
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 checkExistenceStatus(List<CharacterView> currentTeam,int characterID)
|
|
{
|
|
foreach (CharacterView c in currentTeam)
|
|
{
|
|
if (c.characterId == characterID)
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
/// <summary>
|
|
/// 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<teamCharacterView>();
|
|
if(teamCharacterView!=null)
|
|
{
|
|
teamCharacterView.SetUnSelected();
|
|
}
|
|
}
|
|
else
|
|
{
|
|
teamCharacterView teamCharacterView = teamElementsObj[i].GetComponent<teamCharacterView>();
|
|
teamCharacterView.SetSelected();
|
|
}
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// Documentation text normalized.
|
|
public void rightChangeTeamSettingIndex()
|
|
{
|
|
int currentSelectedTeam = teamManager.currentSelectedTeam;
|
|
if (currentSelectedTeam < 4)
|
|
{
|
|
teamManager.setCurrentSelectedTeamSetting(currentSelectedTeam + 1);
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// 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<teamSettingButtonStatusObj.Length;i++)
|
|
{
|
|
if(i!=currentSelectedTeam)
|
|
{
|
|
teamSettingButtonStatusObj[i].setUnSelectedTeamSetting();
|
|
}
|
|
else
|
|
{
|
|
teamSettingButtonStatusObj[i].setTeamSettingSelect();
|
|
}
|
|
|
|
}
|
|
}
|
|
public void updateCharacter()
|
|
{
|
|
|
|
}
|
|
|
|
}
|