125 【战斗】战斗系统 战斗npc消失的问题处理
| | |
| | | { |
| | | base.OnPreOpen(); |
| | | EventBroadcast.Instance.AddListener<BattleDmgInfo>(EventName.BATTLE_DAMAGE_TAKEN, OnDamageTaken); |
| | | EventBroadcast.Instance.AddListener<BattleObject, SkillConfig>(EventName.BATTLE_BUFF_MOUNTED, OnBuffMounted); |
| | | EventBroadcast.Instance.AddListener<BattleObject, SkillConfig>(EventName.BATTLE_BUFF_DISAPEAR, OnBuffDisapear); |
| | | damagePrefabPool = GameObjectPoolManager.Instance.RequestPool(UILoader.LoadPrefab("DamageContent")); |
| | | // buffIconPrefabPool = GameObjectPoolManager.Instance.RequestPool(); |
| | | // buffLabelPrefabPool = GameObjectPoolManager.Instance.RequestPool(ResManager.Instance.LoadAsset<GameObject>("UIComp", "BuffContent")); |
| | |
| | | { |
| | | base.OnPreClose(); |
| | | EventBroadcast.Instance.RemoveListener<BattleDmgInfo>(EventName.BATTLE_DAMAGE_TAKEN, OnDamageTaken); |
| | | EventBroadcast.Instance.RemoveListener<BattleObject, SkillConfig>(EventName.BATTLE_BUFF_MOUNTED, OnBuffMounted); |
| | | EventBroadcast.Instance.RemoveListener<BattleObject, SkillConfig>(EventName.BATTLE_BUFF_DISAPEAR, OnBuffDisapear); |
| | | } |
| | | |
| | | protected override void OnOpen() |
| | |
| | | out anchoredPos); |
| | | |
| | | contentRect.anchoredPosition = anchoredPos; |
| | | } |
| | | |
| | | private void OnBuffMounted(BattleObject bo, SkillConfig buffConfig) |
| | | { |
| | | |
| | | } |
| | | |
| | | private void OnBuffDisapear(BattleObject bo, SkillConfig buffConfig) |
| | | { |
| | | |
| | | } |
| | | |
| | | public void SetBattleField(BattleField _battleField) |
| | |
| | | { |
| | | if (allBattleObjDict.TryGetValue((int)objID, out BattleObject battleObj)) |
| | | { |
| | | if (battleObj.Camp == BattleCamp.Red) |
| | | { |
| | | redCampDict.Remove(battleObj.teamHero.positionNum); |
| | | } |
| | | else |
| | | { |
| | | blueCampDict.Remove(battleObj.teamHero.positionNum); |
| | | } |
| | | allBattleObjDict.Remove((int)objID); |
| | | redCampDict.Remove((int)objID); |
| | | blueCampDict.Remove((int)objID); |
| | | BattleObjectFactory.DestroyBattleObject((int)objID, battleObj); |
| | | } |
| | | } |
| | |
| | | foreach (var item in campDict) |
| | | { |
| | | BattleObject battleObj = item.Value; |
| | | var objId = item.Key; |
| | | if (battleObj != null) |
| | | { |
| | | allBattleObjDict.Remove(battleObj.ObjID); |
| | | BattleObjectFactory.DestroyBattleObject(item.Key, battleObj); |
| | | allBattleObjDict.Remove(objId); |
| | | BattleObjectFactory.DestroyBattleObject(objId, battleObj); |
| | | } |
| | | } |
| | | campDict.Clear(); |
| | |
| | | motionBase.PlayAnimation(MotionName.hit, false); |
| | | |
| | | // 扣血 |
| | | |
| | | teamHero.curHp -= _totalDamage; |
| | | } |
| | | |
| | | public void SuckHp(uint suckHP) |
| | | { |
| | | |
| | | } |
| | | |
| | | public void HurtByReflect(uint bounceHP) |
| | | { |
| | | |
| | | } |
| | | |
| | | // 闪避开始 |
| | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | #if UNITY_EDITOR_STOP_USING |
| | | public void EditorRevive() |
| | | { |
| | |
| | | base.OnHitTargets(_healIndex, healList); |
| | | } |
| | | |
| | | protected override void OnHitEachTarget(BattleObject target, long totalDamage, List<long> damageList, ref HB427_tagSCUseSkill.tagSCUseSkillHurt hurt) |
| | | { |
| | | base.OnHitEachTarget(target, totalDamage, damageList, ref hurt); |
| | | } |
| | | |
| | | |
| | | // // 中摇结束 |
| | | // protected override void OnActiveSkillFrame() |
| | | // { |
| | | |
| | | // } |
| | | |
| | | // // 后摇结束 |
| | | // protected override void OnEndSkillFrame() |
| | | // { |
| | | |
| | | // } |
| | | } |
| | |
| | | } |
| | | } |
| | | |
| | | protected override void OnHitTargets(int _hitIndex, List<HB427_tagSCUseSkill.tagSCUseSkillHurt> hitList) |
| | | { |
| | | base.OnHitTargets(_hitIndex, hitList); |
| | | } |
| | | |
| | | protected override void OnHitEachTarget(BattleObject target, long totalDamage, List<long> damageList, ref HB427_tagSCUseSkill.tagSCUseSkillHurt hurt) |
| | | { |
| | | base.OnHitEachTarget(target, totalDamage, damageList, ref hurt); |
| | | } |
| | | |
| | | } |
| | |
| | | continue; |
| | | } |
| | | |
| | | // 伤害分布 (万分比) |
| | | int[] damageDivide = skillConfig.DamageDivide[_hitIndex]; |
| | | |
| | | long totalDamage = GeneralDefine.GetFactValue(hurt.HurtHP, hurt.HurtHPEx); |
| | | |
| | | // 保证所有分配项加起来等于totalDamage,避免因整除导致的误差 |
| | | List<long> damageList = BattleUtility.DivideDamageToList(damageDivide, totalDamage); |
| | | |
| | | OnHitEachTarget(target, totalDamage, damageList, ref hurt); |
| | | OnHitEachTarget(_hitIndex, target, hurt); |
| | | } |
| | | |
| | | HandleDead(); |
| | | } |
| | | |
| | | |
| | | protected virtual void OnHitEachTarget(int _hitIndex, BattleObject target, HB427_tagSCUseSkill.tagSCUseSkillHurt hurt) |
| | | { |
| | | // 伤害分布 (万分比) |
| | | int[] damageDivide = skillConfig.DamageDivide[_hitIndex]; |
| | | |
| | | long totalDamage = GeneralDefine.GetFactValue(hurt.HurtHP, hurt.HurtHPEx); |
| | | |
| | | // 保证所有分配项加起来等于totalDamage,避免因整除导致的误差 |
| | | List<long> damageList = BattleUtility.DivideDamageToList(damageDivide, totalDamage); |
| | | // public uint ObjID; |
| | | // public uint AttackTypes; // 飘血类型汇总,支持多种类型并存,如无视防御且暴击同时被格挡,二进制或运算最终值;0-失败;1-普通;2-回血;5-格挡;6-无视防御;7-暴击;9-闪避 |
| | | // public uint HurtHP; // 飘血值,求余亿部分 |
| | | // public uint HurtHPEx; // 飘血值,整除亿部分 |
| | | // public uint CurHP; // 更新剩余血量,求余亿部分 |
| | | // public uint CurHPEx; // 更新剩余血量,整除亿部分 |
| | | // public uint SuckHP; // 本次伤害转化的吸血量 |
| | | // public uint BounceHP; // 本次伤害反弹的伤害量 |
| | | |
| | | |
| | | // TODO YYL AttackTypes 要表现成什么样呢? 支持多种类型并存,如无视防御且暴击同时被格挡,二进制或运算最终值;0-失败;1-普通;2-回血;5-格挡;6-无视防御;7-暴击;9-闪避 |
| | | target.Hurt(damageList, totalDamage, hurt.AttackTypes); |
| | | |
| | | // TODO YYL 这里是要做统一计算后再hurt跟suckhp还是怎样 |
| | | // caster.SuckHp(hurt.SuckHP);// 吸血 |
| | | // caster.HurtByReflect(hurt.BounceHP);// 反弹伤害 |
| | | } |
| | | |
| | | |
| | | protected void HandleDead() |
| | | { |
| | |
| | | } |
| | | |
| | | |
| | | |
| | | protected virtual void OnHitEachTarget(BattleObject target, long totalDamage, List<long> damageList, ref HB427_tagSCUseSkill.tagSCUseSkillHurt hurt) |
| | | { |
| | | target.Hurt(damageList, totalDamage, hurt.AttackTypes); |
| | | |
| | | } |
| | | |
| | | protected void CheckAfterDeadhPack() |
| | | { |
| | |
| | | |
| | | public void Run() |
| | | { |
| | | // 倒序遍历 删除.run里删除元素不受影响 |
| | | for (int i = tipsList.Count - 1; i >= 0; i--) |
| | | { |
| | | tipsList[i].Run(); |
| | |
| | | public float showTime = 0.4f; |
| | | public float timer = 0f; |
| | | |
| | | protected RectTransform rectTransform; |
| | | |
| | | void Awake() |
| | | { |
| | | rectTransform = gameObject.AddMissingComponent<RectTransform>(); |
| | | } |
| | | public RectTransform rectTransform; |
| | | |
| | | public Text tipText; |
| | | |
| | |
| | | // 不要使用update |
| | | public void Run() |
| | | { |
| | | if (!gameObject.activeSelf) |
| | | return; |
| | | |
| | | if (timer >= showTime) |
| | | { |
| | | OnFinish?.Invoke(); |