NLDClient-yudde/ProjectNLD/Assets/Code/Scripts/Gameplay/UI/VehicleCultivate/VehicleCultivateData.cs

441 lines
14 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.VehicleCfg;
using cfg.VihecleCultivateCfg;
using Framework;
using PhxhSDK;
using System.Collections.Generic;
using Gameplay;
using DG.Tweening;
using NLDPB;
using UnityEngine;
public class VehicleCultivateDataManager : Singlenton<VehicleCultivateDataManager>, IInitable
{
public List<VehicleCultivateData> DataList;
public Dictionary<uint, VehicleCultivateData> DataDic;
void IInitable.Init()
{
DataList = new List<VehicleCultivateData>();
DataDic = new Dictionary<uint, VehicleCultivateData>();
}
void IInitable.Release()
{
DataList.Clear();
DataDic.Clear();
}
public void Add(Gameplay.Net.VehicleInfo info)
{
if (TableManager.Instance.Tables.VehicleConfig.GetOrDefault((int)info.nID) == null)
{
DebugUtil.LogWarning("载具配置表中没有ID为{0}的载具", info.nID);
return;
}
if (DataDic.TryGetValue(info.nID, out var info2))
{
DataDic[info.nID].Refresh(info);
}
else
{
info2 = new VehicleCultivateData();
info2.Refresh(info);
DataList.Add(info2);
DataDic[info.nID] = info2;
}
}
public void AddAllCfgVehicles()
{
var allConfigList = TableManager.Instance.Tables.VehicleConfig.DataList;
for (int i = 0; i < allConfigList.Count; i++)
{
var configItem = allConfigList[i];
var isAvailable = _CheckVehicleCfgAvailable(configItem);
if (!isAvailable)
{
DebugUtil.LogError($"载具配置不可用:{configItem.ID}");
continue;
}
var nId = (uint)configItem.ID;
if (DataDic.ContainsKey(nId))
{
continue;
}
var info2 = new VehicleCultivateData();
info2.Cfg = configItem;
info2.nID = nId;
DataList.Add(info2);
DataDic[nId] = info2;
}
}
private bool _CheckVehicleCfgAvailable(DataVehicle checkCfg)
{
if (checkCfg == null)
{
DebugUtil.LogError("载具配置为空");
return false;
}
if (checkCfg.ID == 0)
{
DebugUtil.LogError("载具配置ID为0");
return false;
}
var upgradeAttack = TableManager.Instance.Tables.VehicleUpgrade.Get(checkCfg.ID, VihecleUpgradeType.Damage);
if (upgradeAttack == null)
{
DebugUtil.LogError("载具配置ID为{0}的攻击升级配置为空", checkCfg.ID);
return false;
}
var skillCfg = TableManager.Instance.Tables.VehicleSkllUpgrade.Get(checkCfg.ID);
if (skillCfg == null)
{
DebugUtil.LogError("载具配置ID为{0}的技能升级配置为空", checkCfg.ID);
return false;
}
return true;
}
public VehicleCultivateData GetVehicleCultivateData(uint selectID)
{
VehicleCultivateData info;
if (DataDic.TryGetValue(selectID, out info))
{
return info;
}
else
{
DebugUtil.LogError("该角色找不到没有Id为 {0}的载具", selectID);
return null;
}
}
public int GetSpendLeadership(uint id)
{
if (DataDic.TryGetValue(id, out var vehicleCultivateData))
{
if (vehicleCultivateData.Cfg != null)
return vehicleCultivateData.Cfg.SpendLeadership;
}
return 0;
}
}
public class VehicleCultivateData : Gameplay.Net.VehicleInfo
{
public DataVehicle Cfg;
public VehicleCultivateData(uint ID,
ushort[] UpgradeCountParam)
{
nID = ID;
for (ushort i = 0; i < UpgradeCount.Length; i++)
{
UpgradeCount[i] = UpgradeCountParam[i];
}
}
public VehicleCultivateData() { }
/// <summary>
/// 载具本地化名称
/// </summary>
public string Name
{
get
{
var vehicleLocalNameKey = "vehicle_name_" + (Cfg.ID % 100).ToString("D2");
return CommonUtils.GetLocalizeText(vehicleLocalNameKey);//(Cfg.NameLocal);
}
}
public int Hp(bool baseVal = false)
{
var baseValue = Cfg.HP + Mathf.RoundToInt(SumUpgrades(VihecleUpgradeType.HP));
if(baseVal)//显示未加成的基础生命
{
return baseValue;
}
var scale = SumBonus(BonusType.Hp) + 1f;
var finalValue = Mathf.RoundToInt(baseValue * scale);
return finalValue;
}
public float SumUpgrades(VihecleUpgradeType viType)
{
DataVehicleUpgrade dataVehicleUpgrade = VehicleUpgradeTableHelper.Get(Cfg.ID, viType);
return dataVehicleUpgrade.PowerUpAmount * UpgradeCount[(int)viType];
}
/// <summary>
/// 选定升级类型强化至满级增加的总数值
/// </summary>
/// <param name="viType">升级类型</param>
/// <returns></returns>
public float MaxUpgrades(VihecleUpgradeType viType)
{
DataVehicleUpgrade dataVehicleUpgrade = VehicleUpgradeTableHelper.Get(Cfg.ID, viType);
return dataVehicleUpgrade.PowerUpAmount * dataVehicleUpgrade.MaxCount;
}
/// <summary>
/// 载具强化次数
/// </summary>
/// <param name="bType"></param>
/// <returns></returns>
public float SumBonus(BonusType bType)
{
float count = 0;
VehicleUpgradeBonusAttri vTable = TableManager.Instance.Tables.VehicleUpgradeBonusAttri;
for (int i = 0; i < vTable.DataList.Count; i++)
{
if (vTable.DataList[i] == null)
{
DebugUtil.LogError($"vTable.DataList[{i}]为空");
continue;
}
if (vTable.DataList[i].ID != nID)//Cfg.ID
{
continue;
}
if ((vTable.DataList[i].BonusType == bType) && (vTable.DataList[i].SumCount <= SumPowerLevel()))
{
count += vTable.DataList[i].BonusPropertyCount;
}
}
return count;
}
public int Attack(bool baseVal = false)
{
var batteryConfig = TableManager.Instance.Tables.BatteryConfig.GetOrDefault(Cfg.WeaponId);
if (batteryConfig == null)
{
DebugUtil.LogError("载具配置ID为{0}的武器配置为空", Cfg.WeaponId);
return 0;
}
var baseDamage = batteryConfig.DamagePower + Mathf.RoundToInt(SumUpgrades(VihecleUpgradeType.Damage));
if (baseVal)//显示未加成的基础攻击
{
return baseDamage;
}
var scale = SumBonus(BonusType.AttackPercent) + 1f;
var finalDamage = Mathf.RoundToInt(baseDamage * scale);
DebugUtil.Log("显示最终攻击力:基础攻击力为" + baseDamage + ",加成比例为" + scale + ",最终攻击力为" + finalDamage);
return finalDamage;
}
public float MoveSpeed()
{
return Cfg.MoveSpeed + SumBonus(BonusType.MoveSpeed);
}
public int BulletCapacity()
{
var batteryConfig = TableManager.Instance.Tables.BatteryConfig.GetOrDefault(Cfg.WeaponId);
if (batteryConfig == null)
{
DebugUtil.LogError("载具配置ID为{0}的武器配置为空", Cfg.WeaponId);
return 0;
}
return batteryConfig.MaxBulletCount;
}
public int Defense(bool baseVal = false)
{
var baseDefense = Cfg.Defense + (int)SumUpgrades(VihecleUpgradeType.Defense);
if(baseVal)//显示未加成的基础防御
{
return baseDefense;
}
DebugUtil.Log("防御暂时未配置额外加成,如已更改配置,请在此处更新");
var scale = 1f;// SumBonus(BonusType.) + 1f;
var finalDefense = Mathf.RoundToInt(baseDefense * scale);
return finalDefense;
}
public int SkillLevel()
{
return (int)SumBonus(BonusType.SkillLv);
}
public void Refresh(Gameplay.Net.VehicleInfo info)
{
nID = info.nID;
for (int i = 0; i < info.UpgradeCount.Length; i++)
{
UpgradeCount[i] = (ushort)info.UpgradeCount[i];
}
Cfg = TableManager.Instance.Tables.VehicleConfig.GetOrDefault((int)nID);
if (Cfg == null) DebugUtil.LogError("载具Cfg为空,请检查载具ID" + nID);
}
public int SumPowerLevel()
{
int lv = 0;
for (int i = 0; i < UpgradeCount.Length; i++)
{
lv += UpgradeCount[i];
}
return lv;
}
/// <summary>
/// 获取基础最大血量(不计入强化奖励额外增益)
/// </summary>
/// <returns></returns>
public float GetMaxHp()
{
return Cfg.HP + MaxUpgrades(VihecleUpgradeType.HP);// + VehicleCulitvateLevelUpBonusTableHelper.GetMaxValBonusByID(nID, BonusType.Hp);
}
/// <summary>
/// 获取基础最大攻击(不计入强化奖励额外增益)
/// </summary>
/// <returns></returns>
public float GetMaxAttack()
{
var batteryConfig = TableManager.Instance.Tables.BatteryConfig.GetOrDefault(Cfg.WeaponId);
if (batteryConfig == null)
{
DebugUtil.LogError("载具配置ID为{0}的武器配置为空", Cfg.WeaponId);
return 0;
}
// return Cfg.Damages[Cfg.Damages.Count - 1];
return batteryConfig.DamagePower + MaxUpgrades(VihecleUpgradeType.Damage);
}
/// <summary>
/// 获取基础最大防御(不计入强化奖励额外增益)
/// </summary>
/// <returns></returns>
public float GetMaxDenfense()
{
// return Cfg.Defenses[Cfg.Defenses.Count - 1];
return Cfg.Defense + MaxUpgrades(VihecleUpgradeType.Defense);
}
public int SeatCount()
{
return Cfg.SeatCount + Mathf.RoundToInt(SumBonus(BonusType.SeatCount));
}
public float AttackShiledScale()
{
var batteryConfig = TableManager.Instance.Tables.BatteryConfig.GetOrDefault(Cfg.WeaponId);
if (batteryConfig == null)
{
DebugUtil.LogError("载具配置ID为{0}的武器配置为空", Cfg.WeaponId);
return 0;
}
return batteryConfig.AttackShiledScale + SumBonus(BonusType.AttackShiledScale);
}
public float AttackHpScale()
{
var batteryConfig = TableManager.Instance.Tables.BatteryConfig.GetOrDefault(Cfg.WeaponId);
if (batteryConfig == null)
{
DebugUtil.LogError("载具配置ID为{0}的武器配置为空", Cfg.WeaponId);
return 0;
}
return batteryConfig.AttackHpScale + SumBonus(BonusType.AttackHpScale);
}
public float ScaleForHuman()
{
var batteryConfig = TableManager.Instance.Tables.BatteryConfig.GetOrDefault(Cfg.WeaponId);
if (batteryConfig == null)
{
DebugUtil.LogError("载具配置ID为{0}的武器配置为空", Cfg.WeaponId);
return 0;
}
return batteryConfig.ScaleForHuman + SumBonus(BonusType.ScaleForHuman);
}
public float ScaleForVehicle()
{
var batteryConfig = TableManager.Instance.Tables.BatteryConfig.GetOrDefault(Cfg.WeaponId);
if (batteryConfig == null)
{
DebugUtil.LogError("载具配置ID为{0}的武器配置为空", Cfg.WeaponId);
return 0;
}
return batteryConfig.ScaleForVehicle + SumBonus(BonusType.ScaleForVehicle);
}
public int SumPowerMaxLevel()
{
int lv = 0;
VehicleUpgrade vehicleUpgradeTab = TableManager.Instance.Tables.VehicleUpgrade;
for (int i = 0; i < vehicleUpgradeTab.DataList.Count; i++)
{
if (vehicleUpgradeTab.DataList[i].ID == Cfg.ID)
{
lv += vehicleUpgradeTab.DataList[i].MaxCount;
}
}
return lv;
}
public bool IsMaxHpLv()
{
return UpgradeCount[(int)cfg.ActorCfg.VihecleUpgradeType.HP] >= TableManager.Instance.Tables.VehicleUpgrade.Get((int)nID, cfg.ActorCfg.VihecleUpgradeType.HP).MaxCount;
}
public bool IsMaxDamageLv()
{
return UpgradeCount[(int)cfg.ActorCfg.VihecleUpgradeType.Damage] >= TableManager.Instance.Tables.VehicleUpgrade.Get((int)nID, cfg.ActorCfg.VihecleUpgradeType.Damage).MaxCount;
}
public bool IsMaxMoveSpeedLv()
{
return UpgradeCount[(int)cfg.ActorCfg.VihecleUpgradeType.MoveSpeed - 1] >= TableManager.Instance.Tables.VehicleUpgrade.Get((int)nID, cfg.ActorCfg.VihecleUpgradeType.MoveSpeed).MaxCount;
}
public bool IsMaxBulletCountLv()
{
return UpgradeCount[(int)cfg.ActorCfg.VihecleUpgradeType.BulletCount - 1] >= TableManager.Instance.Tables.VehicleUpgrade.Get((int)nID, cfg.ActorCfg.VihecleUpgradeType.BulletCount).MaxCount;
}
public bool IsMaxDefenseCountLv()
{
return UpgradeCount[(int)cfg.ActorCfg.VihecleUpgradeType.Defense - 1] >= TableManager.Instance.Tables.VehicleUpgrade.Get((int)nID, cfg.ActorCfg.VihecleUpgradeType.Defense).MaxCount;
}
public string GetTerrainAdapt(BonusType terrainType) //仅供地形使用
{
// VehicleUpgradeBonusAttri vTable = TableManager.Instance.Tables.VehicleUpgradeBonusAttri;
// int terrinBonusVal = Cfg.TerrainPlain;
// for (int i = 0; i < vTable.DataList.Count; i++)
// {
// if (vTable.DataList[i].SumCount < SumPowerLevel())
// {
// if (vTable.DataList[i].BonusType == BonusType.TerrainPlain)
// {
// terrinBonusVal = (int)vTable.DataList[i].BonusPropertyCount;
// }
// }
// }
// return VehicleDataHelper.GetTerrainAdaptStr(terrinBonusVal);
// TODO: 这里需要自行修改代码 2024-11-20
return VehicleDataHelper.GetTerrainAdaptStr(1);
}
}