using System.Collections;
using System.Collections.Generic;
using Core.Language;
using Core.Utility;
using Excel2Json;
using Fort23.UTool;
using GameLogic.Combat.CombatTool;
using GameLogic.Hero;
using GameLogic.Player;
using UnityEngine;
using UnityEngine.Serialization;
using Utility;
[System.Serializable]
public class CombatHeroInfo
{
public enum AttributeType
{
Hp,
Att,
Def,
}
public int modelID;
public EncryptionLong hp = new EncryptionLong();
public EncryptionLong defense = new EncryptionLong();
public EncryptionLong attack = new EncryptionLong();
public EncryptionFloat attSpeed = (EncryptionFloat)2;
public EncryptionInt level;
public EncryptionFloat exp = new EncryptionFloat();
public HeroModelConfig modelConfig;
public HeroPowerUpConfig powerUpConfig;
public MonsterPowerUpConfig MonsterPowerUpConfig;
///
/// 功法强度的加成 %
///
public float gongFaStrength;
///
/// 护盾
///
public EncryptionLong Shield;
///
/// 神识
///
public EncryptionLong shenshi;
///
/// 添加的攻击速度比例%
///
public float addAttSpeed_bl;
///
/// 金
///
public float Metal=100;
///
/// 木
///
public float Wood = 100;
///
/// 水
///
public float Water = 100;
///
/// 火
///
public float Fire = 100;
///
/// 土
///
public float Earth = 100;
///
/// 金
///
public float Metal_Injury;
///
/// 木
///
public float Wood_Injury;
///
/// 水
///
public float Water_Injury;
///
/// 火
///
public float Fire_Injury;
///
/// 土
///
public float Earth_Injury;
///
/// 1=英雄 2=小怪 3=精英怪 4=boss
///
public int heroType;
public string modelName;
public bool isMonster;
public int k;
// public int[] skillId;
// public List skillConfigs;
///
/// 所有已解锁技能的ID
///
public List unLockSkills = new List();
public bool isGpu;
public string heroName;
public List MagicWeaponID = new List();
///
/// 大道修炼ID
///
public int TaoismSkillId;
public float GetAttSpeed
{
get
{
float speed = CombatCalculateTool.Instance.GetVlaueRatioForFloat(attSpeed.Value,
addAttSpeed_bl + 100);
if (speed < 0)
{
speed = 0;
}
return speed;
}
}
public CombatHeroInfo()
{
}
protected Map _AttributeCacheValue = new Map();
public void AddAttributeValueToCache(AttributeType attributeType, int value)
{
if (_AttributeCacheValue.TryGetValue(attributeType, out int v))
{
value += v;
}
_AttributeCacheValue[attributeType] = value;
}
///
/// 获取五行灵根属性
///
///
///
public float GetWuXingShuXing(WuXingType wuXingType)
{
switch (wuXingType)
{
case WuXingType.Gold:
return Metal;
break;
case WuXingType.Wood:
return Wood;
break;
case WuXingType.Water:
return Water;
break;
case WuXingType.Fire:
return Fire;
break;
case WuXingType.Earth:
return Earth;
break;
default:
return 0;
}
}
protected void CalBasicAttribute()
{
_AttributeCacheValue.Clear();
if (isMonster)
{
hp = (EncryptionLong)(modelConfig.hp * MonsterPowerUpConfig.HPFactor);
defense = (EncryptionLong)(modelConfig.def * MonsterPowerUpConfig.DEFFactor);
attack = (EncryptionLong)(modelConfig.attack * MonsterPowerUpConfig.ATKFactor);
}
else
{
hp = (EncryptionLong)(modelConfig.hp * powerUpConfig.HPFactor);
defense = (EncryptionLong)(modelConfig.def * powerUpConfig.DEFFactor);
attack = (EncryptionLong)(modelConfig.attack * powerUpConfig.ATKFactor);
Shield = (EncryptionLong)(modelConfig.shield * powerUpConfig.HudunFactor);
shenshi = (EncryptionLong)(modelConfig.shenshi * powerUpConfig.ShenshiFactor);
k = powerUpConfig.defK;
}
for (_AttributeCacheValue.Begin(); _AttributeCacheValue.Next();)
{
switch (_AttributeCacheValue.Key)
{
case AttributeType.Hp:
hp += CombatCalculateTool.Instance.GetVlaueRatioForLong(hp.Value, _AttributeCacheValue.Value);
break;
case AttributeType.Att:
attack += CombatCalculateTool.Instance.GetVlaueRatioForLong(attack.Value,
_AttributeCacheValue.Value);
break;
case AttributeType.Def:
defense += CombatCalculateTool.Instance.GetVlaueRatioForLong(defense.Value,
_AttributeCacheValue.Value);
break;
}
}
}
public SkillConfig GetGroupSkillConfig(int idGroup)
{
if (unLockSkills == null)
{
return default;
}
for (int i = 0; i < unLockSkills.Count; i++)
{
// SkillConfig skillConfig = ConfigComponent.Instance.Get(unLockSkills[i]);
if (unLockSkills[i].skillConfig.IDGroup == idGroup)
{
return unLockSkills[i].skillConfig;
}
}
return default;
}
protected void CalAttribute()
{
CalBasicAttribute();
attSpeed = (EncryptionFloat)modelConfig.speed_atk;
// skillId = modelConfig.skillID;
modelName = modelConfig.model;
isGpu = modelConfig.isUseGpu;
heroType = modelConfig.heroType;
}
protected void AddSkillAttribute(SkillConfig skillConfig)
{
if (skillConfig.addPropertyType == null)
{
return;
}
for (int i = 0; i < skillConfig.addPropertyType.Length; i++)
{
int propertyType = skillConfig.addPropertyType[i];
int value = skillConfig.addPropertyValue[i];
switch (propertyType)
{
case 1:
AddAttributeValueToCache(AttributeType.Hp, value);
break;
case 2:
AddAttributeValueToCache(AttributeType.Att, value);
break;
case 3:
AddAttributeValueToCache(AttributeType.Def, value);
break;
}
}
}
protected void SetDataConfig(int modelID, int level)
{
modelConfig = ConfigComponent.Instance.Get(modelID);
if (isMonster)
{
MonsterPowerUpConfig = ConfigComponent.Instance.Get(level);
}
else
{
powerUpConfig = ConfigComponent.Instance.Get(level);
}
this.level = (EncryptionInt)level;
heroName = LanguageManager.Instance.Text(modelConfig.name);
}
public void InitMonster(int modelID, int level)
{
isMonster = true;
SetDataConfig(modelID, level);
CalAttribute();
}
public CombatHeroInfo Copy()
{
CombatHeroInfo combatHeroInfo = (CombatHeroInfo)MemberwiseClone();
return combatHeroInfo;
}
}