NLDClient-yudde/ProjectNLD/Assets/Code/Scripts/Gameplay/UI/ShowAllCharacter/PlayerSkillCultivateData.cs

361 lines
9.8 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.ActorCfg;
using cfg.PlayerSkillCfg;
using cfg.SkillCfg;
using Framework;
using Framework.Condition;
using Gameplay;
using Gameplay.Net;
using System;
using System.Collections.Generic;
using System.Linq;
using PhxhSDK;
using Constants = Framework.Constants;
using cfg.CharacterCfg;
/// <summary>
/// 玩家技能升级帮助类
/// </summary>
public static class PlayerSkillUpgradeHelper
{
/// <summary>
/// 获取解锁技能树某层数需要的技能等级
/// </summary>
/// <returns></returns>
public static int UnLockFloorNeedLevel(int floor)
{
List<int> listUnLockTotalLevel = TableManager.Instance.Tables.GlobalConfig.PlayerSkillUpgradeUnLockTotalLevel;
int index = floor - 1;
if (listUnLockTotalLevel == null || index >= listUnLockTotalLevel.Count)
{
DebugUtil.LogError("配置错误或传入数据错误");
return int.MaxValue;
}
return listUnLockTotalLevel[index];
}
/// <summary>
/// 判断技能树的某层是否锁住
/// </summary>
/// <returns></returns>
public static bool IsFloorLock(int floor)
{
List<int> listUnLockTotalLevel = TableManager.Instance.Tables.GlobalConfig.PlayerSkillUpgradeUnLockTotalLevel;
int index = floor - 1;
if (listUnLockTotalLevel == null || index >= listUnLockTotalLevel.Count)
{
DebugUtil.LogError("配置错误或传入数据错误");
return true;
}
return Actor.Instance.PlayerSkill.GetSumLevel() < listUnLockTotalLevel[index];
}
/// <summary>
/// 判断技能是否锁住
/// </summary>
/// <param name="data"></param>
/// <returns></returns>
public static bool IsSkillLock(DataPlayerSkillUpgrade data)
{
for (int i = 0; i < data.Unlock.Length; i++)
{
int level = Actor.Instance.PlayerSkill.GetLevel(data.Unlock[i]);
if (level < 1)
return true;
}
return false;
}
}
/// <summary>
/// 指挥官所有技能树数据
/// </summary>
public class AllCommandSkillTreeData
{
/// <summary>
/// 指挥官技能树字典,key技能类型 value:技能树数据
/// </summary>
private readonly Dictionary<PlayerSkillType, CommandSkillTreeData> dicSkillTree = new();
public AllCommandSkillTreeData()
{
foreach (DataPlayerSkillUpgrade skillUpgradeData in TableManager.Instance.Tables.PlayerSkillUpgrade.DataList)
{
if (!dicSkillTree.TryGetValue(skillUpgradeData.SkillType, out CommandSkillTreeData skillTreeData))
{
skillTreeData = new();
dicSkillTree[skillUpgradeData.SkillType] = skillTreeData;
}
skillTreeData.Add(skillUpgradeData);
}
}
/// <summary>
/// 根据技能类型获取技能树数据
/// </summary>
/// <param name="type"></param>
/// <returns></returns>
public CommandSkillTreeData GetSkillTreeDataByType(PlayerSkillType type)
{
dicSkillTree.TryGetValue(type, out CommandSkillTreeData data);
return data;
}
}
/// <summary>
/// 指挥官技能树数据
/// </summary>
public class CommandSkillTreeData
{
/// <summary>
/// 每层指挥官技能
/// </summary>
private readonly List<HashSet<int>> listSetSkillId = new();
/// <summary>
/// 获取技能树层数
/// </summary>
public int FloorCount
{
get { return listSetSkillId.Count; }
}
public void Add(DataPlayerSkillUpgrade data)
{
int index = data.LayerID - 1;
while (listSetSkillId.Count <= index)
{
listSetSkillId.Add(new());
}
listSetSkillId[index].Add(data.ID);
}
/// <summary>
/// 获取该层的技能配置数据列表
/// </summary>
/// <param name="index"></param>
/// <returns></returns>
public List<CommandSkillData> GetSkillIDs(int index)
{
if (index > listSetSkillId.Count)
{
DebugUtil.LogError("数组越界");
return null;
}
HashSet<int> setId = listSetSkillId[index];
List<CommandSkillData> listSkillData = new(setId.Count);
foreach (int skillID in setId)
{
listSkillData.Add(new CommandSkillData(skillID));
}
return listSkillData;
}
}
/// <summary>
/// 指挥官技能数据
/// </summary>
public class CommandSkillData
{
/// <summary>
/// 技能id
/// </summary>
private int playSkillID;
/// <summary>
/// 技能等级
/// </summary>
private int skillLevel;
/// <summary>
/// 指挥官技能养成配置数据
/// </summary>
private DataPlayerSkillUpgrade skillUpgradeData;
/// <summary>
/// 指挥官技能配置数据
/// </summary>
private DataPlayerSkill playerSkill;
#region 属性
public DataPlayerSkillUpgrade SkillUpgradeData
{
get { return skillUpgradeData; }
}
/// <summary>
/// 技能ID
/// </summary>
public int SkillID
{
get { return playSkillID; }
}
/// <summary>
/// 前置解锁条件列表配置的id升一级就解锁
/// </summary>
public int[] ListPreSkillID
{
get { return skillUpgradeData.PreSkillID; }
}
/// <summary>
/// 技能名
/// </summary>
public string Name
{
get
{
if (0 == skillLevel)
return CommonUtils.GetLocalizeText(E_LocalizePrefix.PlayerSkill, playerSkill.ID - 1);
return CommonUtils.GetLocalizeText(E_LocalizePrefix.PlayerSkill, playerSkill.ID);
}
}
/// <summary>
/// 技能描述
/// </summary>
public string Desc
{
get
{
if (0 == skillLevel)
return CommonUtils.GetLocalizeText(E_LocalizePrefix.PassiveSkillDesc, playerSkill.ID - 1);
return CommonUtils.GetLocalizeText(E_LocalizePrefix.PassiveSkillDesc, playerSkill.ID);
}
}
/// <summary>
/// 图标路径
/// </summary>
public string IconPath
{
get
{
if (null == playerSkill)
{
DebugUtil.LogError($"指挥官养成技能id:{skillUpgradeData.ID},配置的技能id{skillUpgradeData.SkillID}没有找到");
return string.Empty;
}
return $"{Constants.UI_PlaySkill_IconPathFolder}{playerSkill.IconPath}.png";
}
}
/// <summary>
/// 当前等级
/// </summary>
public int Level
{
get { return skillLevel; }
}
/// <summary>
/// 最大等级
/// </summary>
public int MaxLevel
{
get { return skillUpgradeData.MaxLevel; }
}
/// <summary>
/// 所在第几层
/// </summary>
public int Floor
{
get { return skillUpgradeData.LayerID; }
}
/// <summary>
/// 是否锁住
/// </summary>
public bool IsLock
{
get
{
return PlayerSkillUpgradeHelper.IsSkillLock(skillUpgradeData) ||
PlayerSkillUpgradeHelper.IsFloorLock(skillUpgradeData.LayerID);
}
}
/// <summary>
/// 是否满级
/// </summary>
public bool IsFullLevel
{
get { return Level >= MaxLevel; }
}
#endregion
public CommandSkillData(int id)
{
playSkillID = id;
skillLevel = Actor.Instance.PlayerSkill.GetLevel(playSkillID);
if (0 == skillLevel)
skillUpgradeData = TableManager.Instance.Tables.PlayerSkillUpgrade.Get(playSkillID, 1);
else
skillUpgradeData = TableManager.Instance.Tables.PlayerSkillUpgrade.Get(playSkillID, skillLevel);
if (null != skillUpgradeData)
playerSkill = TableManager.Instance.Tables.PlayerSkillConfig.Get(skillUpgradeData.SkillID);
}
public string GetNameByLevel(int level)
{
if (0 == level)
{
DataPlayerSkillUpgrade upgradeData = TableManager.Instance.Tables.PlayerSkillUpgrade.Get(playSkillID, 1);
DataPlayerSkill skillData;
if (null != upgradeData)
{
skillData = TableManager.Instance.Tables.PlayerSkillConfig.Get(upgradeData.SkillID);
return CommonUtils.GetLocalizeText(E_LocalizePrefix.PlayerSkill, skillData.ID - 1);
}
}
else
{
DataPlayerSkillUpgrade upgradeData = TableManager.Instance.Tables.PlayerSkillUpgrade.Get(playSkillID, level);
DataPlayerSkill skillData;
if (null != upgradeData)
{
skillData = TableManager.Instance.Tables.PlayerSkillConfig.Get(upgradeData.SkillID);
return CommonUtils.GetLocalizeText(E_LocalizePrefix.PlayerSkill, skillData.ID);
}
}
return string.Empty;
}
public string GetDescByLevel(int level)
{
if (0 == level)
{
DataPlayerSkillUpgrade upgradeData = TableManager.Instance.Tables.PlayerSkillUpgrade.Get(playSkillID, 1);
DataPlayerSkill skillData;
if (null != upgradeData)
{
skillData = TableManager.Instance.Tables.PlayerSkillConfig.Get(upgradeData.SkillID);
return CommonUtils.GetLocalizeText(E_LocalizePrefix.PassiveSkillDesc, skillData.ID - 1);
}
}
else
{
DataPlayerSkillUpgrade upgradeData = TableManager.Instance.Tables.PlayerSkillUpgrade.Get(playSkillID, level);
DataPlayerSkill skillData;
if (null != upgradeData)
{
skillData = TableManager.Instance.Tables.PlayerSkillConfig.Get(upgradeData.SkillID);
return CommonUtils.GetLocalizeText(E_LocalizePrefix.PassiveSkillDesc, skillData.ID);
}
}
return string.Empty;
}
}