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(); } } } } }