using Animancer; using Common.Utility.CombatEvent; using Excel2Json; using Fort23.Core; using Fort23.UTool; using GameLogic.Combat.Buff; using UnityEngine; using UnityEngine.AI; namespace GameLogic.Combat.Hero { /// /// 法宝对象 /// public class CombatMagicWeaponEntity : CombatHeroEntity { protected MagicWeaponConfig _magicWeaponConfig; public float cd = 10; private MagicWeaponControl magicWeaponControl; public async CTask Init(MagicWeaponControl magicWeaponControl,MagicWeaponConfig magicWeaponConfig, System.Action callBack = null) { this.magicWeaponControl = magicWeaponControl; string modelName = magicWeaponConfig.model; // 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); if (CombatAIBasic == null) { CombatAIBasic = new MagicWeaponAi(); } HeroEntityMono heroEntityMono = poolInterface.own.GetComponent(); if (heroEntityMono == null) { heroEntityMono = poolInterface.own.AddComponent(); } heroEntityMono.combatHeroEntity = this; CombatAIBasic.Init(this); CombatHeroSkillControl = new CombatHeroSkillControl(); await CombatHeroSkillControl.Init(this); AnimancerComponent animancerComponent = poolInterface.own.GetComponent(); combatHeroAnimtion = new CombatHeroAnimtion(); poolInterface.own.SetActive(true); combatHeroAnimtion.Init(this); CombatAIBasic.ChangeState(CombatHeroStateType.XiuMian); #endif callBack?.Invoke(this); return this; } public override void Update(float t) { combatHeroTimeLineControl.Update(t); if (CombatAIBasic.CurrState.GetType() == typeof(MagicWeaponIdleState)) { cd -= t; if (cd <= 0) { } } } } }