using System; using System.Collections; using System.Collections.Generic; using Unity.Collections; using UnityEngine; public class TeamManager : MonoBehaviour { public static TeamManager Instance {get; private set;} public teamSettingPanel teamSettingPanelInstance; /// /// 当前玩家存档下的所有编队配置,key为编队索引,value为该编队的角色列表,表内只有角色ID /// public Dictionary currentTeamSettings = new Dictionary(); /// /// 玩家存档下已经解锁的角色信息列表 /// public List SelectableCharacterList = new List(); /// /// 根据此字段来在编队信息页显示已有编队 /// public int currentSelectedTeam = 0; /// /// 记录被选中的编队中角色的索引,用于处理队列位置交换的逻辑。-1表示无角色被选中 /// public int currentSelectedCharacter = -1; /// /// 在修改被选中的编队中角色的索引时触发 /// public event Action OnSelectedCharacterChanged; /// /// 修改选定的预设队伍时触发 /// public event Action OnSelectedTeamChanged; void Awake() { if (Instance == null) { Instance = this; } else { Destroy(gameObject); } } void testTeamSetting() { SelectableCharacterList.Add(new CharacterView(1001001,"C")); SelectableCharacterList.Add(new CharacterView(1001002,"S")); SelectableCharacterList.Add(new CharacterView(1001001,"C")); SelectableCharacterList.Add(new CharacterView(1001002,"C")); //手动向currentTeamSettings和SelectableCharacterList添加测试数据 currentTeamSettings.Add(0,new TeamSetting(new List(),1001001)); currentTeamSettings[0].teamIdList.Add(new CharacterView(1001001,"C")); currentTeamSettings[0].teamIdList.Add(new CharacterView(1001002,"S")); currentTeamSettings[0].teamIdList.Add(new CharacterView(1001001,"C")); currentTeamSettings[0].teamIdList.Add( new CharacterView(1001002,"C")); currentTeamSettings[0].teamIdList.Add(new CharacterView(-1,null)); currentTeamSettings.Add(1,new TeamSetting(new List(),1001002)); currentTeamSettings[1].teamIdList.Add(new CharacterView(1001001,"C")); currentTeamSettings[1].teamIdList.Add(new CharacterView(1001002,"B")); currentTeamSettings[1].teamIdList.Add(new CharacterView(1001001,"C")); currentTeamSettings[1].teamIdList.Add( new CharacterView(1001002,"A")); currentTeamSettings[1].teamIdList.Add(new CharacterView(1001002,"A")); currentTeamSettings.Add(2,new TeamSetting(new List(),-1)); currentTeamSettings.Add(3,new TeamSetting(new List(),-1)); Debug.Log("testTeamSetting ready"); } public void openTeamSettingPanel()=> teamSettingPanelInstance.gameObject.SetActive(true); public void closeTeamSettingPanel()=> teamSettingPanelInstance.gameObject.SetActive(false); public void setCurrentSelectedTeam(int index) { if (index > 3 || index < 0) { Debug.LogWarning("所选队伍预设索引超出范围"); return; } currentSelectedTeam = index; } void Start() { // if(teamSettingPanelInstance == null) // { // teamSettingPanelInstance = teamSettingPanel.Instance; // } testTeamSetting();//接入玩家存档后请注释掉此行 } /// /// 读取玩家存档信息后可直接在此写入编队信息 /// /// public void setcurrentTeamSettings(Dictionary playerTeamSettings) { currentTeamSettings = playerTeamSettings; } /// /// 依据选定的队伍预设索引来获得队伍信息 /// /// public TeamSetting getCurrentSelectedTeam() { return currentTeamSettings[currentSelectedTeam]; } public void setCurrentSelectedTeam(TeamSetting newTeamData, int teamIndex) { currentTeamSettings[teamIndex] = newTeamData; } public void setCurrentSelectedCharacterInTeam(int characterIndex) { if (characterIndex != currentSelectedCharacter) { Debug.Log($"修改选中对象从{currentSelectedCharacter}到{characterIndex}"); currentSelectedCharacter = characterIndex; OnSelectedCharacterChanged?.Invoke(); // 触发事件 } } public void setCurrentSelectedTeamSetting(int teamIndex) { if(teamIndex != currentSelectedTeam) { Debug.Log($"修改选中队伍预设从{currentSelectedTeam}到{teamIndex}"); currentSelectedTeam = teamIndex; OnSelectedTeamChanged?.Invoke(); // 触发事件 } } /// /// 交换指定索引中的两个队伍中元素的位置 /// /// 当前元素 /// 目标元素位置 public void swapTeamElements(int firstIndex, int secondIndex) { List newCurrentTeam = getCurrentSelectedTeam().teamIdList; CharacterView temp = newCurrentTeam[firstIndex]; newCurrentTeam[firstIndex] = newCurrentTeam[secondIndex]; newCurrentTeam[secondIndex] = temp; currentTeamSettings[currentSelectedTeam].teamIdList = newCurrentTeam; teamSettingPanelInstance.updateTeamSettingElements(); setCurrentSelectedCharacterInTeam(secondIndex); Debug.Log($"swapTeamElements done,当前选中的为{getCurrentSelectedTeam().teamIdList[currentSelectedCharacter].characterId},开始位置是{firstIndex},目标位置是{secondIndex},现在{currentSelectedCharacter}"); } public void setTeamLeader(int characterIndex) { getCurrentSelectedTeam().LeaderId = SelectableCharacterList[characterIndex].characterId; teamSettingPanelInstance.updateTeamSettingElements(); } }