161 lines
6.3 KiB
C#
161 lines
6.3 KiB
C#
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;
|
|
/// <summary>
|
|
/// 当前玩家存档下的所有编队配置,key为编队索引,value为该编队的角色列表,表内只有角色ID
|
|
/// </summary>
|
|
public Dictionary<int, TeamSetting> currentTeamSettings = new Dictionary<int, TeamSetting>();
|
|
/// <summary>
|
|
/// 玩家存档下已经解锁的角色信息列表
|
|
/// </summary>
|
|
public List<CharacterView> SelectableCharacterList = new List<CharacterView>();
|
|
/// <summary>
|
|
/// 根据此字段来在编队信息页显示已有编队
|
|
/// </summary>
|
|
public int currentSelectedTeam = 0;
|
|
/// <summary>
|
|
/// 记录被选中的编队中角色的索引,用于处理队列位置交换的逻辑。-1表示无角色被选中
|
|
/// </summary>
|
|
public int currentSelectedCharacter = -1;
|
|
/// <summary>
|
|
/// 在修改被选中的编队中角色的索引时触发
|
|
/// </summary>
|
|
public event Action OnSelectedCharacterChanged;
|
|
/// <summary>
|
|
/// 修改选定的预设队伍时触发
|
|
/// </summary>
|
|
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<CharacterView>(),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<CharacterView>(),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<CharacterView>(),-1));
|
|
currentTeamSettings.Add(3,new TeamSetting(new List<CharacterView>(),-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();//接入玩家存档后请注释掉此行
|
|
}
|
|
/// <summary>
|
|
/// 读取玩家存档信息后可直接在此写入编队信息
|
|
/// </summary>
|
|
/// <param name="playerTeamSettings"></param>
|
|
public void setcurrentTeamSettings(Dictionary<int,TeamSetting> playerTeamSettings)
|
|
{
|
|
currentTeamSettings = playerTeamSettings;
|
|
}
|
|
/// <summary>
|
|
/// 依据选定的队伍预设索引来获得队伍信息
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
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(); // 触发事件
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// 交换指定索引中的两个队伍中元素的位置
|
|
/// </summary>
|
|
/// <param name="firstIndex">当前元素</param>
|
|
/// <param name="secondIndex">目标元素位置</param>
|
|
public void swapTeamElements(int firstIndex, int secondIndex)
|
|
{
|
|
List<CharacterView> 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();
|
|
}
|
|
}
|