using Invector; using Invector.vCharacterController.AI; using Invector.vEventSystems; using System.Collections; using System.Collections.Generic; using UnityEngine; namespace Beyond { public class bControlAIMelee : vControlAIMelee { public void ResetAnimationTags() { if (animatorStateInfos == null) { return; } animatorStateInfos.stateInfos.vToList().ForEach(infos => infos.tags.Clear()); } private new void Update() { // animatorStateInfos.stateInfos.vToList().ForEach(st => { Debug.Log(st.layer + " " + st.normalizedTime + " " + st.shortPathHash); st.tags.ForEach(tag => Debug.Log(tag)); }); base.Update(); } protected override void OnEnable() { ResetAnimationTags(); base.OnEnable(); } public void SetAttackTimes(float minTime, float maxTime) { _minAttackTime = minTime; _maxAttackTime = maxTime; } protected override void TryBlockAttack(vDamage damage) { if (isAttacking) //we dont want blocking when attacking { damage.hitReaction = true; return; } //base.TryBlockAttack(damage); if (MeleeManager && damage.sender) { if (isBlocking && MeleeManager.CanBlockAttack(damage.sender.position)) { var fighter = damage.sender.GetComponent(); var damageReduction = MeleeManager.GetDefenseRate(); if (damageReduction > 0) damage.ReduceDamage(damageReduction); if (fighter != null && MeleeManager.CanBreakAttack()) fighter.OnRecoil(MeleeManager.GetDefenseRecoilID()); MeleeManager.OnDefense(); } else damage.hitReaction = true; } } protected override void TryApplyRecoil(vIMeleeFighter fighter) { if (MeleeManager && fighter != null && !isAttacking) { if (isBlocking && MeleeManager.CanBlockAttack(fighter.transform.position)) { if (MeleeManager.CanBreakAttack()) fighter.OnRecoil(MeleeManager.GetDefenseRecoilID()); } } } } }