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

727 lines
23 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;
using Gameplay.Net;
using System;
public class VehicleCultivateDataManager : Singlenton<VehicleCultivateDataManager>, IInitable
{
//旧版本载具数据
//public List<VehicleCultivateData> DataList;
//public Dictionary<uint, VehicleCultivateData> DataDic;
//组件升级版本载具数据
public List<VehicleCultivateData> DataList;
public Dictionary<long, VehicleCultivateData> DataDic;
void IInitable.Init()
{
DataList = new List<VehicleCultivateData>();
DataDic = new Dictionary<long, 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 Add(Gameplay.Net.VehicleInfo info)
{
var id = info.nID;
if (TableManager.Instance.Tables.VehicleConfig.GetOrDefault((int)id) == null)
{
DebugUtil.LogWarning("载具配置表中没有ID为{0}的载具", id);
return;
}
if (DataDic.TryGetValue(id,out var info2))
{
DataDic[id].Refresh(info);
}
else
{
info2 = new VehicleCultivateData((int)info.nID);
info2.Refresh(info);
DataList.Add(info2);
DataDic[id] = 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(long selectID)
{
VehicleCultivateData info;
if (DataDic.TryGetValue(selectID, out info))
{
return info;
}
else
{
DebugUtil.Log("用户尚未拥有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 VehicleCultivateDataOld : Gameplay.Net.VehicleInfo
//{
// public DataVehicle Cfg;
//
// public VehicleCultivateDataOld(uint ID,
// ushort[] UpgradeCountParam)
// {
// nID = ID;
// for (ushort i = 0; i < UpgradeCount.Length; i++)
// {
// UpgradeCount[i] = UpgradeCountParam[i];
//
// }
// }
// public VehicleCultivateDataOld() { }
//
// /// <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);
//
// }
//
//
//}
//
/// <summary>
/// 组件升级版本载具属性
/// </summary>
public class VehicleCultivateData : Gameplay.Net.VehicleInfo
{
public DataVehicle Cfg;
//public List<uint> UpgradedComponents;//已升级的组件
public VehicleCultivateData(int vehicleID)
{
Cfg = TableManager.Instance.Tables.VehicleConfig.GetOrDefault(vehicleID);
UpgradedComponents = new List<uint>();
}
public VehicleCultivateData() : base()
{
}
public void Refresh(VehicleInfo info)
{
nID = info.nID;
Cfg = TableManager.Instance.Tables.VehicleConfig.GetOrDefault((int)info.nID);
UpgradedComponents = new List<uint>();
UpgradedComponents.AddRange(info.UpgradedComponents);
if (Cfg == null) DebugUtil.LogError("载具Cfg为空,请检查!载具ID:" + (int)info.nID);
}
/// <summary>
/// 获取载具所使用的炮台
/// </summary>
/// <returns></returns>
public long WeaponId()
{
var maxLevelWeapon = VehicleDataHelper.FindMaxLevelWeapon(UpgradedComponents);
if (maxLevelWeapon != 0)
{
var compCfg = TableManager.Instance.Tables.VehicleComponent.GetOrDefault(maxLevelWeapon);
if (compCfg == null)
{
DebugUtil.LogError("载具配置ID为{0}的组件配置为空", maxLevelWeapon);
}
else
{
return compCfg.BatteryID;
}
}
return Cfg.WeaponId;
}
public int Hp()
{
var baseValue = Cfg.HP;
var componentValue = 0;
var tableCfg = TableManager.Instance.Tables.VehicleComponent;
foreach (var comp in UpgradedComponents)
{
if (comp == 0)
continue;
var compCfg = tableCfg.GetOrDefault(comp);
if (compCfg == null)
{
DebugUtil.LogError("载具配置ID为{0}的组件配置为空", comp);
continue;
}
componentValue += compCfg.HP;
}
return baseValue + componentValue;
}
public int SeatCount()
{
var baseValue = Cfg.SeatCount;
return baseValue;
}
public int Defense()
{
var baseValue = Cfg.Defense;
var componentValue = 0;
var tableCfg = TableManager.Instance.Tables.VehicleComponent;
foreach (var comp in UpgradedComponents)
{
if (comp == 0)
continue;
var compCfg = tableCfg.GetOrDefault(comp);
if (compCfg == null)
{
DebugUtil.LogError("载具配置ID为{0}的组件配置为空", comp);
continue;
}
componentValue += compCfg.Defense;
}
return baseValue + componentValue;
}
public float MoveSpeed()
{
var baseValue = Cfg.MoveSpeed;
return baseValue;
}
public int Attack()
{
var weaponId = WeaponId();
var batteryConfig = TableManager.Instance.Tables.BatteryConfig.GetOrDefault(weaponId);
if (batteryConfig == null)
{
DebugUtil.LogError("载具配置ID为{0}的武器配置为空", weaponId);
return 0;
}
var baseDamage = batteryConfig.DamagePower;
return baseDamage;
}
public int BulletCapacity()
{
var weaponId = WeaponId();
var batteryConfig = TableManager.Instance.Tables.BatteryConfig.GetOrDefault(weaponId);
if (batteryConfig == null)
{
DebugUtil.LogError("载具配置ID为{0}的武器配置为空", weaponId);
return 0;
}
return batteryConfig.MaxBulletCount;
}
public float AttackShiledScale()
{
var weaponId = WeaponId();
var batteryConfig = TableManager.Instance.Tables.BatteryConfig.GetOrDefault(weaponId);
if (batteryConfig == null)
{
DebugUtil.LogError("载具配置ID为{0}的武器配置为空", weaponId);
return 0;
}
return batteryConfig.AttackShiledScale;
}
public float AttackHpScale()
{
var weaponId = WeaponId();
var batteryConfig = TableManager.Instance.Tables.BatteryConfig.GetOrDefault(weaponId);
if (batteryConfig == null)
{
DebugUtil.LogError("载具配置ID为{0}的武器配置为空", weaponId);
return 0;
}
return batteryConfig.AttackHpScale;
}
public float ScaleForHuman()
{
var weaponId = WeaponId();
var batteryConfig = TableManager.Instance.Tables.BatteryConfig.GetOrDefault(weaponId);
if (batteryConfig == null)
{
DebugUtil.LogError("载具配置ID为{0}的武器配置为空", weaponId);
return 0;
}
return batteryConfig.ScaleForHuman;
}
public float ScaleForVehicle()
{
var weaponId = WeaponId();
var batteryConfig = TableManager.Instance.Tables.BatteryConfig.GetOrDefault(weaponId);
if (batteryConfig == null)
{
DebugUtil.LogError("载具配置ID为{0}的武器配置为空", weaponId);
return 0;
}
return batteryConfig.ScaleForVehicle;
}
/// <summary>
/// 获取地形适应文本
/// </summary>
/// <param name="terrainPlain"></param>
/// <returns></returns>
public string GetTerrainAdapt(BonusType terrainPlain)
{
var TehuaEnvironment = Cfg.SupperAdjustTerrain;//特化地形
var MalaEnvironment = Cfg.MalaAdjustTerrain;//不适应地形
int terrainAdaptVal = 1;
switch (terrainPlain)
{
case BonusType.TerrainPlain:
if (TehuaEnvironment.Contains(cfg.FightCfg.ELevelTerrainType.Plain))
{
terrainAdaptVal = VehicleDataHelper.VeryAdapt;
}
else if (MalaEnvironment.Contains(cfg.FightCfg.ELevelTerrainType.Plain))
{
terrainAdaptVal = VehicleDataHelper.NotAdapt;
}
break;
case BonusType.TerrainMountain:
if (TehuaEnvironment.Contains(cfg.FightCfg.ELevelTerrainType.Mountain))
{
terrainAdaptVal = VehicleDataHelper.VeryAdapt;
}
else if (MalaEnvironment.Contains(cfg.FightCfg.ELevelTerrainType.Mountain))
{
terrainAdaptVal = VehicleDataHelper.NotAdapt;
}
break;
case BonusType.TerrainForest:
if (TehuaEnvironment.Contains(cfg.FightCfg.ELevelTerrainType.Forest))
{
terrainAdaptVal = VehicleDataHelper.VeryAdapt;
}
else if (MalaEnvironment.Contains(cfg.FightCfg.ELevelTerrainType.Forest))
{
terrainAdaptVal = VehicleDataHelper.NotAdapt;
}
break;
case BonusType.TerrainSnow:
if (TehuaEnvironment.Contains(cfg.FightCfg.ELevelTerrainType.Snow))
{
terrainAdaptVal = VehicleDataHelper.VeryAdapt;
}
else if (MalaEnvironment.Contains(cfg.FightCfg.ELevelTerrainType.Snow))
{
terrainAdaptVal = VehicleDataHelper.NotAdapt;
}
break;
default:
DebugUtil.LogError("不包含的地形类型,请检查");
break;
}
return VehicleDataHelper.GetTerrainAdaptStr(terrainAdaptVal);
}
public int SumPowerLevel()
{
return 0;
}
/// <summary>
/// 载具本地化名称
/// </summary>
public string Name
{
get
{
return VehicleDataHelper.GetVehicleLocalizeName(Cfg.ID);
}
}
}