NLDClient-yudde/ProjectNLD/Assets/Code/Scripts/Gameplay/LegionBattle/Data/LegionTeamData.cs

105 lines
3.3 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

using cfg.CharacterCfg;
using Framework;
using Google.Protobuf.Collections;
using NLDPB;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace Gameplay.LegionBattle
{
/// <summary>
/// 军团战队伍数据
/// </summary>
public sealed class LegionTeamData
{
/// <summary>
/// 编队数据字典
/// </summary>
private Dictionary<uint, LegionRoleData> dicLegionRoleData;
/// <summary>
/// 编队职业数量
/// </summary>
private Dictionary<Ejob, int> dicJobCount;
/// <summary>
/// 队伍角色列表最多3个队伍每个队伍n个角色
/// </summary>
public List<LegionRoleData>[] RoleDataLists { get; private set; }
/// <summary>
/// 队伍名
/// </summary>
public string[] TeamNames { get; private set; }
public LegionTeamData()
{
dicLegionRoleData = new Dictionary<uint, LegionRoleData>();
dicJobCount = new();
TeamNames = new string[TableManager.Instance.Tables.GlobalConfig.MaxLegionTeamCount];
RoleDataLists = new List<LegionRoleData>[TableManager.Instance.Tables.GlobalConfig.MaxLegionTeamCount];
for (int i = 0; i < TableManager.Instance.Tables.GlobalConfig.MaxLegionTeamCount; ++i)
{
RoleDataLists[i] = new List<LegionRoleData>();
}
}
/// <summary>
/// 初始化数据
/// </summary>
/// <param name="listTeam"></param>
/// <param name="listCharacter"></param>
public void InitData(RepeatedField<MSG_LB_Team> listTeam, RepeatedField<MSG_LB_Character> listCharacter)
{
for (int i = 0; i < listTeam.Count; ++i)
{
MSG_LB_Team teamData = listTeam[i];
if (TeamNames.Length > i)
TeamNames[i] = teamData.Name;
LegionRoleData data = new(teamData.Commander);
dicLegionRoleData[teamData.Commander] = data;
RoleDataLists[i].Add(data);
foreach (uint id in teamData.Units)
{
if (0u == id)
continue;
data = new LegionRoleData(id);
dicLegionRoleData[id] = data;
RoleDataLists[i].Add(data);
}
}
for (int i = 0; i < listCharacter.Count; ++i)
{
if (!dicLegionRoleData.TryGetValue(listCharacter[i].Id, out LegionRoleData legionRoleData))
continue;
legionRoleData.CopyData(listCharacter[i]);
}
foreach (LegionRoleData legionRoleData in dicLegionRoleData.Values)
{
if (dicJobCount.TryGetValue(legionRoleData.Job, out int count))
dicJobCount[legionRoleData.Job] = ++count;
else
dicJobCount[legionRoleData.Job] = 1;
}
}
/// <summary>
/// 获取职业数量
/// </summary>
/// <param name="ejob"></param>
/// <returns></returns>
public int GetJobCount(Ejob ejob)
{
if (dicJobCount.TryGetValue(ejob, out int count))
return count;
return 0;
}
}
}