Files
beyond/Assets/Scripts/InvectorDerivatives/bControlAIMelee.cs
2024-11-20 15:21:28 +01:00

76 lines
2.4 KiB
C#

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