| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251 | 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{    /// <summary>    /// 法宝对象    /// </summary>    public class CombatMagicWeaponEntity : CombatHeroEntity    {        public System.Func<Vector3> CustomizeShowTarget;        public int MagicWeaponCollisionId = -1;        protected FabaoConfig _magicWeaponConfig;        public float cd = 2;        public WuXingType WuXingType;        /// <summary>        /// 充能额外速度        /// </summary>        public float cdAddSpeed;        // public float cdSpeed=1;        /// <summary>        /// 是否拥有法宝宝典        /// </summary>        public bool isMagicWeaponTreasureBook = false;        public FaBaoInfo FaBaoInfo        {            get { return _faBaoInfo; }        }        private FaBaoInfo _faBaoInfo;        public float HpBl        {            get { return _HpBl; }            set { _HpBl = value; }        }        public float MaxHp;        private float _HpBl = 100;        public int useIndex;        /// <summary>        /// 是否进入战斗状态        /// </summary>        public bool isCombatState;        private MagicWeaponControl _rootMagicWeaponControl;        public MagicWeaponControl RootMagicWeaponControl        {            get { return _rootMagicWeaponControl; }        }        // private BetterList<SkillBasic> allSkill = new BetterList<SkillBasic>();        private SkillBasic skillBasic;        public float MaxCd        {            get            {                if (skillBasic == null)                {                    return 1;                }                return skillBasic.SelfSkillConfig.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<CombatMagicWeaponEntity> Init(MagicWeaponControl magicWeaponControl,            FaBaoInfo faBaoInfo,            System.Action<CombatMagicWeaponEntity> callBack = null)        {            this._faBaoInfo = faBaoInfo;            this.magicWeaponConfig = faBaoInfo.FabaoConfig;            this._rootMagicWeaponControl = magicWeaponControl;            string modelName = magicWeaponConfig.model;            CurrCombatHeroInfo = new CombatHeroInfo();            CurrCombatHeroInfo.modelName = magicWeaponConfig.model;            // GameTimeLineParticleFactory            CombatHeroGameObjectPool poolInterface =                await GObjectPool.Instance.FetchAsync<CombatHeroGameObjectPool>(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<TextAsset>(                    modelName + "_TD.txt");            if (assetHandle != null)            {                TextAsset textAsset = assetHandle.AssetObject<TextAsset>();                TimeLienData timeLienData = JsonManager.FromJson<TimeLienData>(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<SkillConfig>(id);            SkillInfo skillInfo = new SkillInfo(id, 1);            skillBasic = CombatHeroSkillControl.AddSkill(skillInfo);            BuffControl = new BuffControl();            BuffControl.Init(this);            if (CombatAIBasic == null)            {                CombatAIBasic = new MagicWeaponAi();            }            HeroEntityMono heroEntityMono = poolInterface.own.GetComponent<HeroEntityMono>();            if (heroEntityMono == null)            {                heroEntityMono = poolInterface.own.AddComponent<HeroEntityMono>();            }            heroEntityMono.combatHeroEntity = this;            CombatAIBasic.Init(this);            // AnimancerComponent animancerComponent = poolInterface.own.GetComponentInChildren<AnimancerComponent>();            combatHeroAnimtion = new CombatHeroAnimtion();            poolInterface.own.SetActive(true);            combatHeroAnimtion.Init(this);            CombatAIBasic.ChangeState(CombatHeroStateType.XiuMian);            if (skillBasic != null)            {                cd = skillBasic.SelfSkillConfig.cd;            }#endif            callBack?.Invoke(this);            return this;        }        public override float GetAttSpeed()        {            return 1;        }        public bool IsCanUse()        {            if (cd > 0)            {                return false;            }            if (_rootMagicWeaponControl.globalMagicWeaponCd > 0)            {                return false;            }            return true;        }        public void UseMagicWeapon()        {            if (cd > 0 || _rootMagicWeaponControl.combatHeroEntity.CombatAIBasic.currFocusTarget == null)            {                return;            }            _HpBl = _faBaoInfo.FabaoPowerupConfig.Power;            MaxHp= _HpBl;            cd = MaxCd;            _rootMagicWeaponControl.UseMagicWeapon(this);        }        public override void DormancyObj()        {            base.DormancyObj();            _rootMagicWeaponControl = null;            _faBaoInfo = null;        }        public override void Update(float t)        {            if (_rootMagicWeaponControl == null)            {                return;            }            combatHeroTimeLineControl?.Update(t);            CombatAIBasic?.Update(t);            CombatHeroSkillControl?.Update(t);            BuffControl?.Update(t);            if (CombatAIBasic?.CurrState.GetType() == typeof(MagicWeapomDormancyState))            {                b_1008 b1008 = BuffControl.GetBuffBasicForType<b_1008>();                if (b1008 == null)                {                    cd -= t;                    if ( IsCanUse())                    {                        if (_rootMagicWeaponControl.isAutoUse && cd < -1f)//自动的延迟一秒释放                        {                            UseMagicWeapon();                        }                    }                }            }        }    }}
 |