using Animancer;
using Common.Utility.CombatEvent;
using Excel2Json;
using Fort23.Core;
using Fort23.UTool;
using GameLogic.Combat.Buff;
using GameLogic.Combat.CombatTool;
using GameLogic.Combat.Hero.State;
using GameLogic.Combat.Skill;
using GameLogic.Hero;
using GameLogic.Player;
using UnityEngine;
using UnityEngine.AI;
namespace GameLogic.Combat.Hero
{
///
/// 法宝对象
///
public class CombatMagicWeaponEntity : CombatHeroEntity
{
public int MagicWeaponCollisionId = -1;
protected FabaoConfig _magicWeaponConfig;
public float cd = 2;
public WuXingType WuXingType;
private FaBaoInfo _faBaoInfo;
public float HpBl
{
get { return _HpBl; }
set { _HpBl = value; }
}
private float _HpBl = 100;
public int useIndex;
///
/// 是否进入战斗状态
///
public bool isCombatState;
private MagicWeaponControl _magicWeaponControl;
public MagicWeaponControl MagicWeaponControl
{
get { return _magicWeaponControl; }
}
private BetterList allSkill = new BetterList();
public float MaxCd
{
get { return magicWeaponConfig.cd; }
}
private FabaoConfig magicWeaponConfig;
public void MagicWeaponDie()
{
{
HeroDieEventData heroDieEventData = HeroDieEventData.Create();
heroDieEventData.combatHeroEntity = this;
CombatEventManager.Instance.Dispatch(CombatEventType.MagicWeaponDie,
heroDieEventData);
CombatAIBasic.ChangeState(CombatHeroStateType.dile);
}
}
public async CTask Init(MagicWeaponControl magicWeaponControl,
FaBaoInfo faBaoInfo,
System.Action callBack = null)
{
this._faBaoInfo = faBaoInfo;
this.magicWeaponConfig = faBaoInfo.FabaoConfig;
this._magicWeaponControl = magicWeaponControl;
string modelName = magicWeaponConfig.model;
cd = magicWeaponConfig.cd;
// GameTimeLineParticleFactory
CombatHeroGameObjectPool poolInterface =
await GObjectPool.Instance.FetchAsync(modelName + ".prefab", null);
#if !COMBAT_SERVER
if (poolInterface == null || poolInterface.own == null)
{
return null;
}
poolInterface.own.transform.position = Vector3.one;
poolInterface.own.SetActive(false);
combatHeroTimeLineControl = new CombatHeroTimeLineControl();
combatHeroTimeLineControl.Init(this);
AssetHandle assetHandle =
await AssetBundleLoadManager.Instance.LoadAssetAsyncTask(
modelName + "_TD.txt");
if (assetHandle != null)
{
TextAsset textAsset = assetHandle.AssetObject();
TimeLienData timeLienData = JsonManager.FromJson(textAsset.text);
timeLienData.DeserializeData();
assetHandle.Release();
combatHeroTimeLineControl.AddTimeLienData(timeLienData);
}
combatHeroGameObject = new CombatHeroGameObject();
combatHeroGameObject.Init(this, poolInterface);
CombatHeroSkillControl = new CombatHeroSkillControlBasic();
CombatHeroSkillControl.Init(this);
int id = magicWeaponConfig.SkillGroupID * 10 + 1;
// SkillConfig skillConfig = ConfigComponent.Instance.Get(id);
SkillInfo skillInfo = new SkillInfo(id, 1);
CombatHeroSkillControl.AddSkill(skillInfo);
if (CombatAIBasic == null)
{
CombatAIBasic = new MagicWeaponAi();
}
HeroEntityMono heroEntityMono = poolInterface.own.GetComponent();
if (heroEntityMono == null)
{
heroEntityMono = poolInterface.own.AddComponent();
}
heroEntityMono.combatHeroEntity = this;
CombatAIBasic.Init(this);
// AnimancerComponent animancerComponent = poolInterface.own.GetComponentInChildren();
combatHeroAnimtion = new CombatHeroAnimtion();
poolInterface.own.SetActive(true);
combatHeroAnimtion.Init(this);
CombatAIBasic.ChangeState(CombatHeroStateType.XiuMian);
#endif
callBack?.Invoke(this);
return this;
}
public override float GetAttSpeed()
{
return 1;
}
public void UseMagicWeapon()
{
if (cd > 0 || _magicWeaponControl.combatHeroEntity.CombatAIBasic.currFocusTarget == null)
{
return;
}
_HpBl = _faBaoInfo.FabaoPowerupConfig.Power;
cd = magicWeaponConfig.cd;
_magicWeaponControl.UseMagicWeapon(this);
}
public override void Update(float t)
{
combatHeroTimeLineControl.Update(t);
CombatAIBasic?.Update(t);
CombatHeroSkillControl?.Update(t);
if (CombatAIBasic.CurrState.GetType() == typeof(MagicWeapomDormancyState))
{
cd -= t;
if (_magicWeaponControl.isAutoUse)
{
UseMagicWeapon();
}
}
}
}
}